@configura/babylon-view 2.0.0-alpha.2 → 2.0.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/.eslintrc.json +5 -18
  2. package/LICENSE +201 -201
  3. package/README.md +1 -1
  4. package/dist/animation/AnimatableObject.d.ts +8 -8
  5. package/dist/animation/AnimatableObject.js +3 -3
  6. package/dist/animation/animator/Animator.d.ts +33 -33
  7. package/dist/animation/animator/Animator.js +58 -58
  8. package/dist/animation/animator/AnimatorEasing.d.ts +16 -16
  9. package/dist/animation/animator/AnimatorEasing.js +31 -31
  10. package/dist/animation/animator/AnimatorEasingMatrix.d.ts +14 -14
  11. package/dist/animation/animator/AnimatorEasingMatrix.js +16 -16
  12. package/dist/animation/animator/AnimatorHighlight.d.ts +16 -16
  13. package/dist/animation/animator/AnimatorHighlight.js +32 -32
  14. package/dist/animation/animator/AnimatorPointToPoint.d.ts +8 -8
  15. package/dist/animation/animator/AnimatorPointToPoint.js +14 -14
  16. package/dist/animation/animator/AnimatorQueue.d.ts +13 -13
  17. package/dist/animation/animator/AnimatorQueue.js +57 -57
  18. package/dist/animation/animator/AnimatorScale.d.ts +8 -8
  19. package/dist/animation/animator/AnimatorScale.js +13 -13
  20. package/dist/animation/animator/AnimatorSpin.d.ts +10 -10
  21. package/dist/animation/animator/AnimatorSpin.js +13 -13
  22. package/dist/animation/animator/EasingFunctions.d.ts +35 -35
  23. package/dist/animation/animator/EasingFunctions.js +137 -137
  24. package/dist/animation/coordinator/Coordinator.d.ts +28 -28
  25. package/dist/animation/coordinator/Coordinator.js +53 -53
  26. package/dist/animation/coordinator/CoordinatorDropAndSpin.d.ts +22 -22
  27. package/dist/animation/coordinator/CoordinatorDropAndSpin.js +138 -138
  28. package/dist/animation/coordinator/CoordinatorIdentity.d.ts +11 -11
  29. package/dist/animation/coordinator/CoordinatorIdentity.js +14 -14
  30. package/dist/animation/coordinator/CoordinatorNodeQueues.d.ts +18 -18
  31. package/dist/animation/coordinator/CoordinatorNodeQueues.js +50 -50
  32. package/dist/animation/coordinator/CoordinatorPulse.d.ts +21 -21
  33. package/dist/animation/coordinator/CoordinatorPulse.js +47 -47
  34. package/dist/animation/coordinator/CoordinatorPulseBounce.d.ts +14 -14
  35. package/dist/animation/coordinator/CoordinatorPulseBounce.js +35 -35
  36. package/dist/animation/coordinator/CoordinatorPulseHighlight.d.ts +13 -13
  37. package/dist/animation/coordinator/CoordinatorPulseHighlight.js +29 -29
  38. package/dist/animation/coordinator/CoordinatorPulseInflate.d.ts +14 -14
  39. package/dist/animation/coordinator/CoordinatorPulseInflate.js +23 -23
  40. package/dist/camera/CameraCreator.d.ts +5 -5
  41. package/dist/camera/CameraCreator.js +4 -4
  42. package/dist/camera/CfgArcRotateCameraPointersInput.d.ts +26 -26
  43. package/dist/camera/CfgArcRotateCameraPointersInput.js +266 -266
  44. package/dist/camera/CfgOrbitalCamera.d.ts +76 -73
  45. package/dist/camera/CfgOrbitalCamera.js +281 -260
  46. package/dist/camera/CfgOrbitalCameraControlProps.d.ts +14 -11
  47. package/dist/camera/CfgOrbitalCameraControlProps.js +7 -6
  48. package/dist/camera/GradingApplier.d.ts +3 -3
  49. package/dist/camera/GradingApplier.js +48 -48
  50. package/dist/engine/EngineCreator.d.ts +3 -3
  51. package/dist/engine/EngineCreator.js +10 -10
  52. package/dist/geometry/CfgGeometry.d.ts +29 -29
  53. package/dist/geometry/CfgGeometry.js +146 -146
  54. package/dist/geometry/CfgMesh.d.ts +10 -10
  55. package/dist/geometry/CfgMesh.js +38 -38
  56. package/dist/geometry/geoSplitter.d.ts +8 -8
  57. package/dist/geometry/geoSplitter.js +192 -192
  58. package/dist/geometry/stretch/CfgMorphTarget.d.ts +15 -15
  59. package/dist/geometry/stretch/CfgMorphTarget.js +65 -65
  60. package/dist/geometry/stretch/CfgStretchData.d.ts +116 -116
  61. package/dist/geometry/stretch/CfgStretchData.js +350 -350
  62. package/dist/geometry/stretch/CfgStretchMorphGeometry.d.ts +16 -16
  63. package/dist/geometry/stretch/CfgStretchMorphGeometry.js +95 -95
  64. package/dist/index.d.ts +16 -16
  65. package/dist/index.js +16 -16
  66. package/dist/io/CfgHistoryToCameraConfConnector.d.ts +31 -29
  67. package/dist/io/CfgHistoryToCameraConfConnector.js +90 -80
  68. package/dist/io/CfgIOCameraConfConnector.d.ts +35 -35
  69. package/dist/io/CfgIOCameraConfConnector.js +81 -82
  70. package/dist/io/CfgObservableStateToCameraConfConnector.d.ts +10 -10
  71. package/dist/io/CfgObservableStateToCameraConfConnector.js +11 -11
  72. package/dist/io/CfgWindowMessageToCameraConfConnector.d.ts +10 -10
  73. package/dist/io/CfgWindowMessageToCameraConfConnector.js +11 -11
  74. package/dist/light/CfgDirectionalLight.d.ts +8 -8
  75. package/dist/light/CfgDirectionalLight.js +18 -18
  76. package/dist/light/CfgHemisphericLight.d.ts +7 -7
  77. package/dist/light/CfgHemisphericLight.js +17 -17
  78. package/dist/light/CfgPointLight.d.ts +8 -8
  79. package/dist/light/CfgPointLight.js +18 -18
  80. package/dist/light/DefaultLightRig.d.ts +19 -19
  81. package/dist/light/DefaultLightRig.js +77 -77
  82. package/dist/light/LightRigCreator.d.ts +9 -9
  83. package/dist/light/LightRigCreator.js +3 -3
  84. package/dist/material/CfgMaterial.d.ts +68 -68
  85. package/dist/material/CfgMaterial.js +482 -482
  86. package/dist/material/DummyMaterialCreator.d.ts +4 -4
  87. package/dist/material/DummyMaterialCreator.js +15 -15
  88. package/dist/material/material.d.ts +18 -18
  89. package/dist/material/material.js +128 -128
  90. package/dist/material/texture.d.ts +14 -14
  91. package/dist/material/texture.js +306 -306
  92. package/dist/nodes/CfgContentRootNode.d.ts +19 -19
  93. package/dist/nodes/CfgContentRootNode.js +75 -75
  94. package/dist/nodes/CfgDeferredMeshNode.d.ts +55 -55
  95. package/dist/nodes/CfgDeferredMeshNode.js +378 -378
  96. package/dist/nodes/CfgProductNode.d.ts +127 -127
  97. package/dist/nodes/CfgProductNode.js +598 -598
  98. package/dist/nodes/CfgSymNode.d.ts +50 -50
  99. package/dist/nodes/CfgSymNode.js +249 -249
  100. package/dist/nodes/CfgSymRootNode.d.ts +45 -45
  101. package/dist/nodes/CfgSymRootNode.js +229 -229
  102. package/dist/nodes/CfgTransformNode.d.ts +33 -33
  103. package/dist/nodes/CfgTransformNode.js +83 -83
  104. package/dist/scene/SceneCreator.d.ts +6 -6
  105. package/dist/scene/SceneCreator.js +22 -22
  106. package/dist/utilities/CfgBoundingBox.d.ts +21 -21
  107. package/dist/utilities/CfgBoundingBox.js +81 -81
  108. package/dist/utilities/anchor/anchor.d.ts +50 -50
  109. package/dist/utilities/anchor/anchor.js +133 -133
  110. package/dist/utilities/anchor/anchorMap.d.ts +20 -20
  111. package/dist/utilities/anchor/anchorMap.js +111 -111
  112. package/dist/utilities/utilities3D.d.ts +70 -70
  113. package/dist/utilities/utilities3D.js +265 -265
  114. package/dist/utilities/utilitiesColor.d.ts +18 -18
  115. package/dist/utilities/utilitiesColor.js +50 -50
  116. package/dist/utilities/utilitiesImage.d.ts +6 -6
  117. package/dist/utilities/utilitiesImage.js +107 -107
  118. package/dist/utilities/utilitiesSymRootIdentifier.d.ts +7 -7
  119. package/dist/utilities/utilitiesSymRootIdentifier.js +26 -26
  120. package/dist/view/BaseView.d.ts +78 -78
  121. package/dist/view/BaseView.js +303 -303
  122. package/dist/view/BaseViewConfiguration.d.ts +32 -32
  123. package/dist/view/BaseViewConfiguration.js +10 -10
  124. package/dist/view/RenderEnv.d.ts +43 -43
  125. package/dist/view/RenderEnv.js +7 -7
  126. package/dist/view/SingleProductDefaultCameraView.d.ts +38 -37
  127. package/dist/view/SingleProductDefaultCameraView.js +149 -145
  128. package/dist/view/SingleProductDefaultCameraViewConfiguration.d.ts +44 -42
  129. package/dist/view/SingleProductDefaultCameraViewConfiguration.js +11 -11
  130. package/dist/view/SingleProductView.d.ts +44 -44
  131. package/dist/view/SingleProductView.js +212 -212
  132. package/dist/view/SingleProductViewConfiguration.d.ts +32 -32
  133. package/dist/view/SingleProductViewConfiguration.js +19 -19
  134. package/package.json +5 -5
@@ -1,192 +1,192 @@
1
- import { VertexBuffer } from "@babylonjs/core/Meshes/buffer.js";
2
- // Will try to split the geometry along planes on the xy, yz and xz-planes for
3
- // a total of maximum 8 groups. If a triangle straddles a plane those groups
4
- // will be merged
5
- export function splitIndexQuick(logger, geo) {
6
- const indexArray = geo.getIndices();
7
- if (!indexArray) {
8
- logger.info("No index array, could not try split geo");
9
- return;
10
- }
11
- const indexCount = geo.getTotalIndices();
12
- if (indexCount === 0) {
13
- logger.warn("Empty geo index");
14
- return;
15
- }
16
- const positionArray = geo.getVerticesData(VertexBuffer.PositionKind);
17
- if (!positionArray) {
18
- logger.info("No position array, could not try split geo");
19
- return;
20
- }
21
- // Three axis, so max potential resultGroups 2^3
22
- const resultGroups = [[], [], [], [], [], [], [], []];
23
- for (let triIndex = 0; triIndex < indexCount; triIndex += 3) {
24
- const belongsInGroups = [];
25
- // For each triangle
26
- for (let i = triIndex; i < triIndex + 3; i++) {
27
- const offset = indexArray[i] * 3;
28
- let belongsIndex = 0;
29
- for (let c = 0; c < 3; c++) {
30
- belongsIndex += 0 <= positionArray[offset + c] ? 1 << c : 0;
31
- }
32
- if (!belongsInGroups.some((g) => g === belongsIndex)) {
33
- belongsInGroups.push(belongsIndex);
34
- }
35
- }
36
- const targetGroup = resultGroups[belongsInGroups[0]];
37
- // Merge groups straddled by this triangle (if needed)
38
- for (let i = 1; i < belongsInGroups.length; i++) {
39
- const resultGroupIndex = belongsInGroups[i];
40
- const otherGroup = resultGroups[resultGroupIndex];
41
- // Let this position in the result groups array point to the same group as they share
42
- // at least one triangle
43
- if (targetGroup !== otherGroup) {
44
- // The group can be in multiple positions
45
- let j = resultGroups.length;
46
- while (j--) {
47
- if (otherGroup === resultGroups[j]) {
48
- resultGroups[j] = targetGroup;
49
- }
50
- }
51
- const otherGroupLength = otherGroup.length;
52
- for (let j = 0; j < otherGroupLength; j++) {
53
- targetGroup.push(otherGroup[j]);
54
- }
55
- }
56
- }
57
- for (let i = triIndex; i < triIndex + 3; i++) {
58
- targetGroup.push(indexArray[i]);
59
- }
60
- }
61
- // Filter so that we only get one instance of each group and no empty groups
62
- let i = resultGroups.length;
63
- while (i--) {
64
- const group = resultGroups[i];
65
- if (group.length === 0) {
66
- resultGroups.splice(i, 1);
67
- continue;
68
- }
69
- let j = i;
70
- while (j--) {
71
- if (group === resultGroups[j]) {
72
- resultGroups.splice(i, 1);
73
- break;
74
- }
75
- }
76
- }
77
- return resultGroups;
78
- }
79
- export function splitIndexComplete(logger, geo, conf) {
80
- const { maxProgressGroups, maxFinalGroups, acceptCoordinateMatch } = conf;
81
- const indexArray = geo.getIndices();
82
- if (!indexArray) {
83
- logger.info("No index array, could not try split geo");
84
- return;
85
- }
86
- const indexCount = geo.getTotalIndices();
87
- if (indexCount === 0) {
88
- logger.warn("Empty geo index");
89
- return;
90
- }
91
- const positionArray = geo.getVerticesData(VertexBuffer.PositionKind);
92
- if (!positionArray) {
93
- logger.info("No position array, could not try split geo");
94
- return;
95
- }
96
- const resultGroups = [];
97
- let targetGroup;
98
- // Loop over each triangle in the index
99
- for (let triIndex = 0; triIndex < indexCount; triIndex += 3) {
100
- // Groups that neighbor this triangle
101
- const intersectingGroupIndices = [];
102
- const resultGroupsCount = resultGroups.length;
103
- if (maxProgressGroups < resultGroupsCount) {
104
- logger.info(`Geo split into too many groups while in progress`, `(max allowed ${maxProgressGroups})`);
105
- return;
106
- }
107
- // Loop over each group.
108
- for (let resultGroupIndex = 0; resultGroupIndex < resultGroupsCount; resultGroupIndex++) {
109
- const group = resultGroups[resultGroupIndex];
110
- const groupLength = group.length;
111
- let found = false;
112
- // For nodes in the current triangle
113
- for (let i = triIndex; i < triIndex + 3; i++) {
114
- let j = groupLength;
115
- // Loop backwards through indices in the group. Backwards since it's likely new
116
- // nodes will be close to previous ones
117
- while (j--) {
118
- if (indexArray[i] === group[j]) {
119
- intersectingGroupIndices.push(resultGroupIndex);
120
- found = true;
121
- break;
122
- }
123
- }
124
- if (found) {
125
- break;
126
- }
127
- }
128
- if (!found && acceptCoordinateMatch) {
129
- // For nodes in the current triangle
130
- for (let i = triIndex; i < triIndex + 3; i++) {
131
- let j = groupLength;
132
- // Loop backwards through indices in the group. Backwards since it's likely new
133
- // nodes will be close to previous ones
134
- while (j--) {
135
- const offset1 = indexArray[i] * 3;
136
- const offset2 = group[j] * 3;
137
- let c = 3;
138
- while (c--) {
139
- if (positionArray[offset1 + c] !== positionArray[offset2 + c]) {
140
- break;
141
- }
142
- }
143
- if (c === -1) {
144
- intersectingGroupIndices.push(resultGroupIndex);
145
- found = true;
146
- break;
147
- }
148
- }
149
- if (found) {
150
- break;
151
- }
152
- }
153
- }
154
- }
155
- targetGroup = undefined;
156
- const intersectingGroupIndicesCount = intersectingGroupIndices.length;
157
- if (intersectingGroupIndicesCount === 0) {
158
- // The triangle is not adjacent to any existing node in any group
159
- targetGroup = [];
160
- resultGroups.push(targetGroup);
161
- }
162
- else {
163
- let i = intersectingGroupIndicesCount - 1;
164
- // Pick one (probably not important which one) to merge the other groups into. If this
165
- // was the only one it will skip the loop
166
- targetGroup = resultGroups[intersectingGroupIndices[i]];
167
- // The nodes are sorted in ascending order. So we back through to nodes to allow us to
168
- // use splice without disturbing unbroken ground.
169
- while (i--) {
170
- // Move all nodes to the target group and remove this one, as the latest triangle
171
- // is adjacent to both
172
- const resultGroupIndex = intersectingGroupIndices[i];
173
- const group = resultGroups[resultGroupIndex];
174
- resultGroups.splice(resultGroupIndex, 1);
175
- const resultGroupCount = group.length;
176
- for (let j = 0; j < resultGroupCount; j++) {
177
- targetGroup.push(group[j]);
178
- }
179
- }
180
- }
181
- // Add the latest triangle to the target group
182
- for (let i = triIndex; i < triIndex + 3; i++) {
183
- targetGroup.push(indexArray[i]);
184
- }
185
- }
186
- const resultGroupsCount = resultGroups.length;
187
- if (resultGroupsCount > maxFinalGroups) {
188
- logger.info(`Geo split into too many final groups`, `(actual ${resultGroupsCount}, max allowed ${maxFinalGroups})`);
189
- return;
190
- }
191
- return resultGroups;
192
- }
1
+ import { VertexBuffer } from "@babylonjs/core/Meshes/buffer.js";
2
+ // Will try to split the geometry along planes on the xy, yz and xz-planes for
3
+ // a total of maximum 8 groups. If a triangle straddles a plane those groups
4
+ // will be merged
5
+ export function splitIndexQuick(logger, geo) {
6
+ const indexArray = geo.getIndices();
7
+ if (!indexArray) {
8
+ logger.info("No index array, could not try split geo");
9
+ return;
10
+ }
11
+ const indexCount = geo.getTotalIndices();
12
+ if (indexCount === 0) {
13
+ logger.warn("Empty geo index");
14
+ return;
15
+ }
16
+ const positionArray = geo.getVerticesData(VertexBuffer.PositionKind);
17
+ if (!positionArray) {
18
+ logger.info("No position array, could not try split geo");
19
+ return;
20
+ }
21
+ // Three axis, so max potential resultGroups 2^3
22
+ const resultGroups = [[], [], [], [], [], [], [], []];
23
+ for (let triIndex = 0; triIndex < indexCount; triIndex += 3) {
24
+ const belongsInGroups = [];
25
+ // For each triangle
26
+ for (let i = triIndex; i < triIndex + 3; i++) {
27
+ const offset = indexArray[i] * 3;
28
+ let belongsIndex = 0;
29
+ for (let c = 0; c < 3; c++) {
30
+ belongsIndex += 0 <= positionArray[offset + c] ? 1 << c : 0;
31
+ }
32
+ if (!belongsInGroups.some((g) => g === belongsIndex)) {
33
+ belongsInGroups.push(belongsIndex);
34
+ }
35
+ }
36
+ const targetGroup = resultGroups[belongsInGroups[0]];
37
+ // Merge groups straddled by this triangle (if needed)
38
+ for (let i = 1; i < belongsInGroups.length; i++) {
39
+ const resultGroupIndex = belongsInGroups[i];
40
+ const otherGroup = resultGroups[resultGroupIndex];
41
+ // Let this position in the result groups array point to the same group as they share
42
+ // at least one triangle
43
+ if (targetGroup !== otherGroup) {
44
+ // The group can be in multiple positions
45
+ let j = resultGroups.length;
46
+ while (j--) {
47
+ if (otherGroup === resultGroups[j]) {
48
+ resultGroups[j] = targetGroup;
49
+ }
50
+ }
51
+ const otherGroupLength = otherGroup.length;
52
+ for (let j = 0; j < otherGroupLength; j++) {
53
+ targetGroup.push(otherGroup[j]);
54
+ }
55
+ }
56
+ }
57
+ for (let i = triIndex; i < triIndex + 3; i++) {
58
+ targetGroup.push(indexArray[i]);
59
+ }
60
+ }
61
+ // Filter so that we only get one instance of each group and no empty groups
62
+ let i = resultGroups.length;
63
+ while (i--) {
64
+ const group = resultGroups[i];
65
+ if (group.length === 0) {
66
+ resultGroups.splice(i, 1);
67
+ continue;
68
+ }
69
+ let j = i;
70
+ while (j--) {
71
+ if (group === resultGroups[j]) {
72
+ resultGroups.splice(i, 1);
73
+ break;
74
+ }
75
+ }
76
+ }
77
+ return resultGroups;
78
+ }
79
+ export function splitIndexComplete(logger, geo, conf) {
80
+ const { maxProgressGroups, maxFinalGroups, acceptCoordinateMatch } = conf;
81
+ const indexArray = geo.getIndices();
82
+ if (!indexArray) {
83
+ logger.info("No index array, could not try split geo");
84
+ return;
85
+ }
86
+ const indexCount = geo.getTotalIndices();
87
+ if (indexCount === 0) {
88
+ logger.warn("Empty geo index");
89
+ return;
90
+ }
91
+ const positionArray = geo.getVerticesData(VertexBuffer.PositionKind);
92
+ if (!positionArray) {
93
+ logger.info("No position array, could not try split geo");
94
+ return;
95
+ }
96
+ const resultGroups = [];
97
+ let targetGroup;
98
+ // Loop over each triangle in the index
99
+ for (let triIndex = 0; triIndex < indexCount; triIndex += 3) {
100
+ // Groups that neighbor this triangle
101
+ const intersectingGroupIndices = [];
102
+ const resultGroupsCount = resultGroups.length;
103
+ if (maxProgressGroups < resultGroupsCount) {
104
+ logger.info(`Geo split into too many groups while in progress`, `(max allowed ${maxProgressGroups})`);
105
+ return;
106
+ }
107
+ // Loop over each group.
108
+ for (let resultGroupIndex = 0; resultGroupIndex < resultGroupsCount; resultGroupIndex++) {
109
+ const group = resultGroups[resultGroupIndex];
110
+ const groupLength = group.length;
111
+ let found = false;
112
+ // For nodes in the current triangle
113
+ for (let i = triIndex; i < triIndex + 3; i++) {
114
+ let j = groupLength;
115
+ // Loop backwards through indices in the group. Backwards since it's likely new
116
+ // nodes will be close to previous ones
117
+ while (j--) {
118
+ if (indexArray[i] === group[j]) {
119
+ intersectingGroupIndices.push(resultGroupIndex);
120
+ found = true;
121
+ break;
122
+ }
123
+ }
124
+ if (found) {
125
+ break;
126
+ }
127
+ }
128
+ if (!found && acceptCoordinateMatch) {
129
+ // For nodes in the current triangle
130
+ for (let i = triIndex; i < triIndex + 3; i++) {
131
+ let j = groupLength;
132
+ // Loop backwards through indices in the group. Backwards since it's likely new
133
+ // nodes will be close to previous ones
134
+ while (j--) {
135
+ const offset1 = indexArray[i] * 3;
136
+ const offset2 = group[j] * 3;
137
+ let c = 3;
138
+ while (c--) {
139
+ if (positionArray[offset1 + c] !== positionArray[offset2 + c]) {
140
+ break;
141
+ }
142
+ }
143
+ if (c === -1) {
144
+ intersectingGroupIndices.push(resultGroupIndex);
145
+ found = true;
146
+ break;
147
+ }
148
+ }
149
+ if (found) {
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ }
155
+ targetGroup = undefined;
156
+ const intersectingGroupIndicesCount = intersectingGroupIndices.length;
157
+ if (intersectingGroupIndicesCount === 0) {
158
+ // The triangle is not adjacent to any existing node in any group
159
+ targetGroup = [];
160
+ resultGroups.push(targetGroup);
161
+ }
162
+ else {
163
+ let i = intersectingGroupIndicesCount - 1;
164
+ // Pick one (probably not important which one) to merge the other groups into. If this
165
+ // was the only one it will skip the loop
166
+ targetGroup = resultGroups[intersectingGroupIndices[i]];
167
+ // The nodes are sorted in ascending order. So we back through to nodes to allow us to
168
+ // use splice without disturbing unbroken ground.
169
+ while (i--) {
170
+ // Move all nodes to the target group and remove this one, as the latest triangle
171
+ // is adjacent to both
172
+ const resultGroupIndex = intersectingGroupIndices[i];
173
+ const group = resultGroups[resultGroupIndex];
174
+ resultGroups.splice(resultGroupIndex, 1);
175
+ const resultGroupCount = group.length;
176
+ for (let j = 0; j < resultGroupCount; j++) {
177
+ targetGroup.push(group[j]);
178
+ }
179
+ }
180
+ }
181
+ // Add the latest triangle to the target group
182
+ for (let i = triIndex; i < triIndex + 3; i++) {
183
+ targetGroup.push(indexArray[i]);
184
+ }
185
+ }
186
+ const resultGroupsCount = resultGroups.length;
187
+ if (resultGroupsCount > maxFinalGroups) {
188
+ logger.info(`Geo split into too many final groups`, `(actual ${resultGroupsCount}, max allowed ${maxFinalGroups})`);
189
+ return;
190
+ }
191
+ return resultGroups;
192
+ }
@@ -1,16 +1,16 @@
1
- import { MorphTarget } from "@babylonjs/core/Morph/morphTarget.js";
2
- import { CfgProductNode } from "../../nodes/CfgProductNode.js";
3
- import { CfgStretchData } from "./CfgStretchData.js";
4
- import { CfgMorphTwiceStretchedGeometry } from "./CfgStretchMorphGeometry.js";
5
- /**
6
- * Contains geometry which when added to the original geometry will move the vertices to where
7
- * they should be when the stretchReference length doubles.
8
- */
9
- export declare class CfgMorphTarget extends MorphTarget {
10
- private _morphGeometry;
11
- readonly cfgProductNodeParent: CfgProductNode;
12
- constructor(_morphGeometry: CfgMorphTwiceStretchedGeometry, cfgProductNodeParent: CfgProductNode);
13
- get stretchData(): CfgStretchData;
14
- refreshStretch(): void;
15
- }
1
+ import { MorphTarget } from "@babylonjs/core/Morph/morphTarget.js";
2
+ import { CfgProductNode } from "../../nodes/CfgProductNode.js";
3
+ import { CfgStretchData } from "./CfgStretchData.js";
4
+ import { CfgMorphTwiceStretchedGeometry } from "./CfgStretchMorphGeometry.js";
5
+ /**
6
+ * Contains geometry which when added to the original geometry will move the vertices to where
7
+ * they should be when the stretchReference length doubles.
8
+ */
9
+ export declare class CfgMorphTarget extends MorphTarget {
10
+ private _morphGeometry;
11
+ readonly cfgProductNodeParent: CfgProductNode;
12
+ constructor(_morphGeometry: CfgMorphTwiceStretchedGeometry, cfgProductNodeParent: CfgProductNode);
13
+ get stretchData(): CfgStretchData;
14
+ refreshStretch(): void;
15
+ }
16
16
  //# sourceMappingURL=CfgMorphTarget.d.ts.map
@@ -1,65 +1,65 @@
1
- import { MorphTarget } from "@babylonjs/core/Morph/morphTarget.js";
2
- /**
3
- * Contains geometry which when added to the original geometry will move the vertices to where
4
- * they should be when the stretchReference length doubles.
5
- */
6
- export class CfgMorphTarget extends MorphTarget {
7
- constructor(_morphGeometry, cfgProductNodeParent) {
8
- super(_morphGeometry.id);
9
- this._morphGeometry = _morphGeometry;
10
- this.cfgProductNodeParent = cfgProductNodeParent;
11
- const { pos, uvs } = _morphGeometry;
12
- this.setPositions(pos);
13
- if (uvs !== undefined) {
14
- this.setUVs(uvs);
15
- }
16
- this.refreshStretch();
17
- }
18
- get stretchData() {
19
- return this._morphGeometry.stretchData;
20
- }
21
- refreshStretch() {
22
- const stretchReferenceLengthsByMeasureParamCode = this.cfgProductNodeParent.product.configuration._internal
23
- .stretchReferenceLengthsByMeasureParamCode;
24
- const referenceLength = stretchReferenceLengthsByMeasureParamCode.get(this.stretchData.measureParam);
25
- const influence = referenceLength === undefined
26
- ? 0
27
- : this.stretchData.calculateInfluenceGivenTwiceMorphTarget(referenceLength.current);
28
- if (this.influence === influence) {
29
- return;
30
- }
31
- /* WORKAROUND for render failure
32
- *
33
- * Setting an influence to 0 (zero) will actually remove the MorphTarget from the list of
34
- * "active" MorphTargets in the MorphTargetManager in Babylon.js.
35
- *
36
- * This is probably an performance optimization since it means less calculations has to be
37
- * done the shaders. Another reason could be a workaround for a technical limitation in
38
- * WebGL1 that limits the maximum number of MorphTargets in Babylon.js:
39
- * https://doc.babylonjs.com/divingDeeper/mesh/morphTargets#limitations
40
- *
41
- * For some reason this causes problems for us, at least with the combination of Windows 10
42
- * + Chromium + Babylon 4.2, in where disabling a previous active MorphTarget (i.e. setting
43
- * influence to 0) will cause the first frame in BaseView.BrowserTick to fail to render,
44
- * ending up an empty frame with the following error in the console:
45
- *
46
- * WebGL: INVALID_OPERATION: drawElements: no buffer is bound to enabled attribute
47
- * ThinEngine.drawElementsType @ thinEngine.ts:1995
48
- * Mesh._draw @ mesh.ts:1542
49
- * Mesh._processRendering @ mesh.ts:1740
50
- * Mesh.render @ mesh.ts:1930
51
- * [...]
52
- *
53
- * The theory we have is that the change of active MorphTargets needs some time or other
54
- * event to properly settle in, perhaps due to it changing the shaders. Digging in the
55
- * Babylon.js source code has not reveled anything useful so far.
56
- *
57
- * As a workaround, set the influence to Number.MIN_VALUE (smallest non-zero value) instead
58
- * of 0. This keeps it the actual influence as zero in practice, but keeps the MorphTarget
59
- * active and no longer triggers the render failure.
60
- *
61
- * TODO: Revisit this when we switch to a new major release of Babylon.js, 5.0 is next.
62
- */
63
- this.influence = influence === 0 ? Number.MIN_VALUE : influence;
64
- }
65
- }
1
+ import { MorphTarget } from "@babylonjs/core/Morph/morphTarget.js";
2
+ /**
3
+ * Contains geometry which when added to the original geometry will move the vertices to where
4
+ * they should be when the stretchReference length doubles.
5
+ */
6
+ export class CfgMorphTarget extends MorphTarget {
7
+ constructor(_morphGeometry, cfgProductNodeParent) {
8
+ super(_morphGeometry.id);
9
+ this._morphGeometry = _morphGeometry;
10
+ this.cfgProductNodeParent = cfgProductNodeParent;
11
+ const { pos, uvs } = _morphGeometry;
12
+ this.setPositions(pos);
13
+ if (uvs !== undefined) {
14
+ this.setUVs(uvs);
15
+ }
16
+ this.refreshStretch();
17
+ }
18
+ get stretchData() {
19
+ return this._morphGeometry.stretchData;
20
+ }
21
+ refreshStretch() {
22
+ const stretchReferenceLengthsByMeasureParamCode = this.cfgProductNodeParent.product.configuration._internal
23
+ .stretchReferenceLengthsByMeasureParamCode;
24
+ const referenceLength = stretchReferenceLengthsByMeasureParamCode.get(this.stretchData.measureParam);
25
+ const influence = referenceLength === undefined
26
+ ? 0
27
+ : this.stretchData.calculateInfluenceGivenTwiceMorphTarget(referenceLength.current);
28
+ if (this.influence === influence) {
29
+ return;
30
+ }
31
+ /* WORKAROUND for render failure
32
+ *
33
+ * Setting an influence to 0 (zero) will actually remove the MorphTarget from the list of
34
+ * "active" MorphTargets in the MorphTargetManager in Babylon.js.
35
+ *
36
+ * This is probably an performance optimization since it means less calculations has to be
37
+ * done the shaders. Another reason could be a workaround for a technical limitation in
38
+ * WebGL1 that limits the maximum number of MorphTargets in Babylon.js:
39
+ * https://doc.babylonjs.com/divingDeeper/mesh/morphTargets#limitations
40
+ *
41
+ * For some reason this causes problems for us, at least with the combination of Windows 10
42
+ * + Chromium + Babylon 4.2, in where disabling a previous active MorphTarget (i.e. setting
43
+ * influence to 0) will cause the first frame in BaseView.BrowserTick to fail to render,
44
+ * ending up an empty frame with the following error in the console:
45
+ *
46
+ * WebGL: INVALID_OPERATION: drawElements: no buffer is bound to enabled attribute
47
+ * ThinEngine.drawElementsType @ thinEngine.ts:1995
48
+ * Mesh._draw @ mesh.ts:1542
49
+ * Mesh._processRendering @ mesh.ts:1740
50
+ * Mesh.render @ mesh.ts:1930
51
+ * [...]
52
+ *
53
+ * The theory we have is that the change of active MorphTargets needs some time or other
54
+ * event to properly settle in, perhaps due to it changing the shaders. Digging in the
55
+ * Babylon.js source code has not reveled anything useful so far.
56
+ *
57
+ * As a workaround, set the influence to Number.MIN_VALUE (smallest non-zero value) instead
58
+ * of 0. This keeps it the actual influence as zero in practice, but keeps the MorphTarget
59
+ * active and no longer triggers the render failure.
60
+ *
61
+ * TODO: Revisit this when we switch to a new major release of Babylon.js, 5.0 is next.
62
+ */
63
+ this.influence = influence === 0 ? Number.MIN_VALUE : influence;
64
+ }
65
+ }