@combeenation/3d-viewer 12.4.1 → 13.0.0

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 (213) hide show
  1. package/dist/lib-cjs/buildinfo.json +1 -1
  2. package/dist/lib-cjs/commonjs.tsconfig.tsbuildinfo +1 -1
  3. package/dist/lib-cjs/index.d.ts +63 -63
  4. package/dist/lib-cjs/index.js +81 -114
  5. package/dist/lib-cjs/index.js.map +1 -1
  6. package/dist/lib-cjs/internal/cbnCustomBabylonLoaderPlugin.d.ts +10 -0
  7. package/dist/lib-cjs/internal/cbnCustomBabylonLoaderPlugin.js +124 -0
  8. package/dist/lib-cjs/internal/cbnCustomBabylonLoaderPlugin.js.map +1 -0
  9. package/dist/lib-cjs/internal/cloningHelper.d.ts +19 -0
  10. package/dist/lib-cjs/internal/cloningHelper.js +165 -0
  11. package/dist/lib-cjs/internal/cloningHelper.js.map +1 -0
  12. package/dist/lib-cjs/internal/deviceHelper.d.ts +9 -0
  13. package/dist/lib-cjs/{api/util → internal}/deviceHelper.js +6 -10
  14. package/dist/lib-cjs/internal/deviceHelper.js.map +1 -0
  15. package/dist/lib-cjs/internal/geometryHelper.d.ts +21 -0
  16. package/dist/lib-cjs/{api/util → internal}/geometryHelper.js +57 -24
  17. package/dist/lib-cjs/internal/geometryHelper.js.map +1 -0
  18. package/dist/lib-cjs/internal/metadataHelper.d.ts +26 -0
  19. package/dist/lib-cjs/internal/metadataHelper.js +51 -0
  20. package/dist/lib-cjs/internal/metadataHelper.js.map +1 -0
  21. package/dist/lib-cjs/internal/paintableHelper.d.ts +40 -0
  22. package/dist/lib-cjs/internal/paintableHelper.js +287 -0
  23. package/dist/lib-cjs/internal/paintableHelper.js.map +1 -0
  24. package/dist/lib-cjs/internal/tagsHelper.d.ts +12 -0
  25. package/dist/lib-cjs/internal/tagsHelper.js +38 -0
  26. package/dist/lib-cjs/internal/tagsHelper.js.map +1 -0
  27. package/dist/lib-cjs/manager/cameraManager.d.ts +51 -0
  28. package/dist/lib-cjs/manager/cameraManager.js +154 -0
  29. package/dist/lib-cjs/manager/cameraManager.js.map +1 -0
  30. package/dist/lib-cjs/manager/debugManager.d.ts +60 -0
  31. package/dist/lib-cjs/manager/debugManager.js +218 -0
  32. package/dist/lib-cjs/manager/debugManager.js.map +1 -0
  33. package/dist/lib-cjs/manager/eventManager.d.ts +52 -0
  34. package/dist/lib-cjs/manager/eventManager.js +72 -0
  35. package/dist/lib-cjs/manager/eventManager.js.map +1 -0
  36. package/dist/lib-cjs/{api/manager → manager}/gltfExportManager.d.ts +29 -34
  37. package/dist/lib-cjs/{api/manager → manager}/gltfExportManager.js +99 -120
  38. package/dist/lib-cjs/manager/gltfExportManager.js.map +1 -0
  39. package/dist/lib-cjs/manager/materialManager.d.ts +35 -0
  40. package/dist/lib-cjs/manager/materialManager.js +126 -0
  41. package/dist/lib-cjs/manager/materialManager.js.map +1 -0
  42. package/dist/lib-cjs/manager/modelManager.d.ts +145 -0
  43. package/dist/lib-cjs/manager/modelManager.js +381 -0
  44. package/dist/lib-cjs/manager/modelManager.js.map +1 -0
  45. package/dist/lib-cjs/manager/parameterManager.d.ts +210 -0
  46. package/dist/lib-cjs/manager/parameterManager.js +515 -0
  47. package/dist/lib-cjs/manager/parameterManager.js.map +1 -0
  48. package/dist/lib-cjs/manager/sceneManager.d.ts +45 -0
  49. package/dist/lib-cjs/manager/sceneManager.js +65 -0
  50. package/dist/lib-cjs/manager/sceneManager.js.map +1 -0
  51. package/dist/lib-cjs/manager/screenshotManager.d.ts +36 -0
  52. package/dist/lib-cjs/manager/screenshotManager.js +40 -0
  53. package/dist/lib-cjs/manager/screenshotManager.js.map +1 -0
  54. package/dist/lib-cjs/manager/textureManager.d.ts +12 -0
  55. package/dist/lib-cjs/manager/textureManager.js +44 -0
  56. package/dist/lib-cjs/manager/textureManager.js.map +1 -0
  57. package/dist/lib-cjs/viewer.d.ts +117 -0
  58. package/dist/lib-cjs/viewer.js +222 -0
  59. package/dist/lib-cjs/viewer.js.map +1 -0
  60. package/dist/lib-cjs/{api/classes/viewerError.d.ts → viewerError.d.ts} +6 -1
  61. package/dist/lib-cjs/{api/classes/viewerError.js → viewerError.js} +6 -1
  62. package/dist/lib-cjs/viewerError.js.map +1 -0
  63. package/package.json +10 -11
  64. package/src/dev.ts +14 -37
  65. package/src/{types.d.ts → globalTypes.d.ts} +8 -18
  66. package/src/index.ts +79 -113
  67. package/src/internal/cbnCustomBabylonLoaderPlugin.ts +149 -0
  68. package/src/internal/cloningHelper.ts +225 -0
  69. package/src/internal/deviceHelper.ts +25 -0
  70. package/src/{api/util → internal}/geometryHelper.ts +63 -24
  71. package/src/internal/metadataHelper.ts +63 -0
  72. package/src/internal/paintableHelper.ts +310 -0
  73. package/src/internal/tagsHelper.ts +41 -0
  74. package/src/manager/cameraManager.ts +236 -0
  75. package/src/manager/debugManager.ts +245 -0
  76. package/src/manager/eventManager.ts +72 -0
  77. package/src/{api/manager → manager}/gltfExportManager.ts +132 -125
  78. package/src/manager/materialManager.ts +135 -0
  79. package/src/manager/modelManager.ts +456 -0
  80. package/src/manager/parameterManager.ts +652 -0
  81. package/src/manager/sceneManager.ts +101 -0
  82. package/src/manager/screenshotManager.ts +59 -0
  83. package/src/manager/textureManager.ts +32 -0
  84. package/src/viewer.ts +296 -0
  85. package/src/{api/classes/viewerError.ts → viewerError.ts} +6 -1
  86. package/dist/lib-cjs/api/classes/animationInterface.d.ts +0 -8
  87. package/dist/lib-cjs/api/classes/animationInterface.js +0 -3
  88. package/dist/lib-cjs/api/classes/animationInterface.js.map +0 -1
  89. package/dist/lib-cjs/api/classes/dottedPath.d.ts +0 -79
  90. package/dist/lib-cjs/api/classes/dottedPath.js +0 -167
  91. package/dist/lib-cjs/api/classes/dottedPath.js.map +0 -1
  92. package/dist/lib-cjs/api/classes/element.d.ts +0 -153
  93. package/dist/lib-cjs/api/classes/element.js +0 -703
  94. package/dist/lib-cjs/api/classes/element.js.map +0 -1
  95. package/dist/lib-cjs/api/classes/event.d.ts +0 -401
  96. package/dist/lib-cjs/api/classes/event.js +0 -425
  97. package/dist/lib-cjs/api/classes/event.js.map +0 -1
  98. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +0 -26
  99. package/dist/lib-cjs/api/classes/eventBroadcaster.js +0 -50
  100. package/dist/lib-cjs/api/classes/eventBroadcaster.js.map +0 -1
  101. package/dist/lib-cjs/api/classes/fuzzyMap.d.ts +0 -7
  102. package/dist/lib-cjs/api/classes/fuzzyMap.js +0 -22
  103. package/dist/lib-cjs/api/classes/fuzzyMap.js.map +0 -1
  104. package/dist/lib-cjs/api/classes/parameter.d.ts +0 -410
  105. package/dist/lib-cjs/api/classes/parameter.js +0 -643
  106. package/dist/lib-cjs/api/classes/parameter.js.map +0 -1
  107. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +0 -36
  108. package/dist/lib-cjs/api/classes/parameterObservable.js +0 -73
  109. package/dist/lib-cjs/api/classes/parameterObservable.js.map +0 -1
  110. package/dist/lib-cjs/api/classes/parameterizable.d.ts +0 -15
  111. package/dist/lib-cjs/api/classes/parameterizable.js +0 -103
  112. package/dist/lib-cjs/api/classes/parameterizable.js.map +0 -1
  113. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +0 -45
  114. package/dist/lib-cjs/api/classes/placementAnimation.js +0 -177
  115. package/dist/lib-cjs/api/classes/placementAnimation.js.map +0 -1
  116. package/dist/lib-cjs/api/classes/variant.d.ts +0 -261
  117. package/dist/lib-cjs/api/classes/variant.js +0 -873
  118. package/dist/lib-cjs/api/classes/variant.js.map +0 -1
  119. package/dist/lib-cjs/api/classes/variantInstance.d.ts +0 -53
  120. package/dist/lib-cjs/api/classes/variantInstance.js +0 -126
  121. package/dist/lib-cjs/api/classes/variantInstance.js.map +0 -1
  122. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +0 -17
  123. package/dist/lib-cjs/api/classes/variantParameterizable.js +0 -87
  124. package/dist/lib-cjs/api/classes/variantParameterizable.js.map +0 -1
  125. package/dist/lib-cjs/api/classes/viewer.d.ts +0 -215
  126. package/dist/lib-cjs/api/classes/viewer.js +0 -709
  127. package/dist/lib-cjs/api/classes/viewer.js.map +0 -1
  128. package/dist/lib-cjs/api/classes/viewerError.js.map +0 -1
  129. package/dist/lib-cjs/api/classes/viewerLight.d.ts +0 -66
  130. package/dist/lib-cjs/api/classes/viewerLight.js +0 -345
  131. package/dist/lib-cjs/api/classes/viewerLight.js.map +0 -1
  132. package/dist/lib-cjs/api/internal/lensRendering.d.ts +0 -8
  133. package/dist/lib-cjs/api/internal/lensRendering.js +0 -12
  134. package/dist/lib-cjs/api/internal/lensRendering.js.map +0 -1
  135. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +0 -13
  136. package/dist/lib-cjs/api/internal/sceneSetup.js +0 -228
  137. package/dist/lib-cjs/api/internal/sceneSetup.js.map +0 -1
  138. package/dist/lib-cjs/api/manager/animationManager.d.ts +0 -30
  139. package/dist/lib-cjs/api/manager/animationManager.js +0 -127
  140. package/dist/lib-cjs/api/manager/animationManager.js.map +0 -1
  141. package/dist/lib-cjs/api/manager/gltfExportManager.js.map +0 -1
  142. package/dist/lib-cjs/api/manager/sceneManager.d.ts +0 -33
  143. package/dist/lib-cjs/api/manager/sceneManager.js +0 -129
  144. package/dist/lib-cjs/api/manager/sceneManager.js.map +0 -1
  145. package/dist/lib-cjs/api/manager/tagManager.d.ts +0 -118
  146. package/dist/lib-cjs/api/manager/tagManager.js +0 -531
  147. package/dist/lib-cjs/api/manager/tagManager.js.map +0 -1
  148. package/dist/lib-cjs/api/manager/textureLoadManager.d.ts +0 -22
  149. package/dist/lib-cjs/api/manager/textureLoadManager.js +0 -108
  150. package/dist/lib-cjs/api/manager/textureLoadManager.js.map +0 -1
  151. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +0 -106
  152. package/dist/lib-cjs/api/manager/variantInstanceManager.js +0 -291
  153. package/dist/lib-cjs/api/manager/variantInstanceManager.js.map +0 -1
  154. package/dist/lib-cjs/api/store/specStorage.d.ts +0 -32
  155. package/dist/lib-cjs/api/store/specStorage.js +0 -66
  156. package/dist/lib-cjs/api/store/specStorage.js.map +0 -1
  157. package/dist/lib-cjs/api/util/babylonHelper.d.ts +0 -238
  158. package/dist/lib-cjs/api/util/babylonHelper.js +0 -826
  159. package/dist/lib-cjs/api/util/babylonHelper.js.map +0 -1
  160. package/dist/lib-cjs/api/util/debugHelper.d.ts +0 -9
  161. package/dist/lib-cjs/api/util/debugHelper.js +0 -94
  162. package/dist/lib-cjs/api/util/debugHelper.js.map +0 -1
  163. package/dist/lib-cjs/api/util/deviceHelper.d.ts +0 -9
  164. package/dist/lib-cjs/api/util/deviceHelper.js.map +0 -1
  165. package/dist/lib-cjs/api/util/geometryHelper.d.ts +0 -17
  166. package/dist/lib-cjs/api/util/geometryHelper.js.map +0 -1
  167. package/dist/lib-cjs/api/util/globalTypes.d.ts +0 -490
  168. package/dist/lib-cjs/api/util/globalTypes.js +0 -2
  169. package/dist/lib-cjs/api/util/globalTypes.js.map +0 -1
  170. package/dist/lib-cjs/api/util/resourceHelper.d.ts +0 -58
  171. package/dist/lib-cjs/api/util/resourceHelper.js +0 -215
  172. package/dist/lib-cjs/api/util/resourceHelper.js.map +0 -1
  173. package/dist/lib-cjs/api/util/sceneLoaderHelper.d.ts +0 -58
  174. package/dist/lib-cjs/api/util/sceneLoaderHelper.js +0 -229
  175. package/dist/lib-cjs/api/util/sceneLoaderHelper.js.map +0 -1
  176. package/dist/lib-cjs/api/util/stringHelper.d.ts +0 -13
  177. package/dist/lib-cjs/api/util/stringHelper.js +0 -33
  178. package/dist/lib-cjs/api/util/stringHelper.js.map +0 -1
  179. package/dist/lib-cjs/api/util/structureHelper.d.ts +0 -9
  180. package/dist/lib-cjs/api/util/structureHelper.js +0 -58
  181. package/dist/lib-cjs/api/util/structureHelper.js.map +0 -1
  182. package/src/api/classes/animationInterface.ts +0 -10
  183. package/src/api/classes/dottedPath.ts +0 -181
  184. package/src/api/classes/element.ts +0 -766
  185. package/src/api/classes/event.ts +0 -457
  186. package/src/api/classes/eventBroadcaster.ts +0 -52
  187. package/src/api/classes/fuzzyMap.ts +0 -21
  188. package/src/api/classes/parameter.ts +0 -686
  189. package/src/api/classes/parameterObservable.ts +0 -73
  190. package/src/api/classes/parameterizable.ts +0 -87
  191. package/src/api/classes/placementAnimation.ts +0 -162
  192. package/src/api/classes/variant.ts +0 -965
  193. package/src/api/classes/variantInstance.ts +0 -123
  194. package/src/api/classes/variantParameterizable.ts +0 -83
  195. package/src/api/classes/viewer.ts +0 -751
  196. package/src/api/classes/viewerLight.ts +0 -335
  197. package/src/api/internal/debugViewer.ts +0 -90
  198. package/src/api/internal/lensRendering.ts +0 -9
  199. package/src/api/internal/sceneSetup.ts +0 -208
  200. package/src/api/manager/animationManager.ts +0 -143
  201. package/src/api/manager/sceneManager.ts +0 -134
  202. package/src/api/manager/tagManager.ts +0 -572
  203. package/src/api/manager/textureLoadManager.ts +0 -107
  204. package/src/api/manager/variantInstanceManager.ts +0 -306
  205. package/src/api/store/specStorage.ts +0 -68
  206. package/src/api/util/babylonHelper.ts +0 -915
  207. package/src/api/util/debugHelper.ts +0 -121
  208. package/src/api/util/deviceHelper.ts +0 -31
  209. package/src/api/util/globalTypes.ts +0 -566
  210. package/src/api/util/resourceHelper.ts +0 -201
  211. package/src/api/util/sceneLoaderHelper.ts +0 -247
  212. package/src/api/util/stringHelper.ts +0 -30
  213. package/src/api/util/structureHelper.ts +0 -62
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cloneMorphTargetManager = exports.cloneModelAssetContainer = void 0;
4
+ const index_1 = require("../index");
5
+ const metadataHelper_1 = require("./metadataHelper");
6
+ const tagsHelper_1 = require("./tagsHelper");
7
+ const _defaultNodeNamingStrategy = (node, newModelName) => {
8
+ return `${node.name}.${newModelName}`;
9
+ };
10
+ const _defaultTagNamingStrategy = (tag, newModelName) => {
11
+ // don't rename tags by default
12
+ return tag;
13
+ };
14
+ /**
15
+ * Clones the node hierarchy of the asset container with some special treatment that differs from Babylon.js default
16
+ * cloning behaviour, such as:
17
+ * - create new instances of morph target manager
18
+ * - deep cloning internal metadata
19
+ * - deep cloning metadata and tags for instanced meshes
20
+ * - reassigns source meshes in cloned asset container
21
+ * Furthermore there is the possibility to adjust naming of nodes and tags in the cloned asset container
22
+ */
23
+ function cloneModelAssetContainer(sourceAssetContainer, newModelName, renaming, scene) {
24
+ const targetAssetContainer = new index_1.AssetContainer(scene);
25
+ sourceAssetContainer.rootNodes.forEach(node => {
26
+ if (node instanceof index_1.TransformNode) {
27
+ // this is the actual node tree cloning procedure
28
+ _cloneNode(node, newModelName, null, targetAssetContainer, {
29
+ nodeNamingStrategy: renaming === null || renaming === void 0 ? void 0 : renaming.nodeNamingStrategy,
30
+ tagNamingStrategy: renaming === null || renaming === void 0 ? void 0 : renaming.tagNamingStrategy,
31
+ });
32
+ }
33
+ });
34
+ targetAssetContainer.populateRootNodes();
35
+ targetAssetContainer.rootNodes.forEach(node => {
36
+ if (node instanceof index_1.TransformNode) {
37
+ // reassigning instanced meshes can only be done after the model has been fully cloned, as we can't be sure if
38
+ // the source or instanced mesh is handled prior
39
+ _reAssignSourceMesh(node, sourceAssetContainer.meshes, targetAssetContainer.meshes);
40
+ }
41
+ });
42
+ // morph target manager is not cloned per default, therefore morph targets would affect original and cloned model at
43
+ // the same time, which we don't want
44
+ sourceAssetContainer.morphTargetManagers.forEach(sourceMTM => {
45
+ cloneMorphTargetManager(sourceMTM, targetAssetContainer);
46
+ });
47
+ _clearCloningMetadata(sourceAssetContainer);
48
+ _clearCloningMetadata(targetAssetContainer);
49
+ // hide immediately, so that show model code can do it's thing (scene preparation) before finally showing the model
50
+ targetAssetContainer.removeAllFromScene();
51
+ return targetAssetContainer;
52
+ }
53
+ exports.cloneModelAssetContainer = cloneModelAssetContainer;
54
+ /**
55
+ * Helper function for cloning a morph target manager and updating all the mesh assignments.
56
+ * Meshes need to be already available in the target asset container.
57
+ */
58
+ function cloneMorphTargetManager(sourceMTM, targetAssetContainer) {
59
+ const clonedMTM = sourceMTM.clone();
60
+ clonedMTM._parentContainer = targetAssetContainer;
61
+ targetAssetContainer.morphTargetManagers.push(clonedMTM);
62
+ targetAssetContainer.meshes.forEach(mesh => {
63
+ var _a;
64
+ if (((_a = mesh.morphTargetManager) === null || _a === void 0 ? void 0 : _a.uniqueId) === sourceMTM.uniqueId) {
65
+ mesh.morphTargetManager = clonedMTM;
66
+ }
67
+ });
68
+ return clonedMTM;
69
+ }
70
+ exports.cloneMorphTargetManager = cloneMorphTargetManager;
71
+ /**
72
+ * The actual geometry cloning function.
73
+ * Calls "clone" function of dedicated Node type and recourses into children to clone the whole node tree.
74
+ * Adds temporary metadata for special treatment of certain node types (e.g. InstancedMesh).
75
+ */
76
+ function _cloneNode(node, newModelName, newParent, assetContainer, renaming) {
77
+ var _a, _b;
78
+ const nodeNamingStrategy = (_a = renaming.nodeNamingStrategy) !== null && _a !== void 0 ? _a : _defaultNodeNamingStrategy;
79
+ const tagNamingStrategy = (_b = renaming.tagNamingStrategy) !== null && _b !== void 0 ? _b : _defaultTagNamingStrategy;
80
+ const cloneName = nodeNamingStrategy(node, newModelName);
81
+ const clone = node.clone(cloneName, newParent, true);
82
+ if (!clone) {
83
+ throw new Error(`Cloning node "${node.name}" failed`);
84
+ }
85
+ clone.id = cloneName;
86
+ // create a deep clone for internal metadata, as the default clone function uses the same assignment of the sources
87
+ // internal metadata
88
+ (0, metadataHelper_1.cloneInternalMetadata)(node, clone);
89
+ // ATM the assignment from clone to source is needed for reassigning instanced meshes after cloning
90
+ // may be usefull for other node types in the future as well
91
+ (0, metadataHelper_1.setInternalMetadataValue)(clone, 'cloneSource', node.uniqueId);
92
+ (0, metadataHelper_1.setInternalMetadataValue)(node, 'cloneTarget', clone.uniqueId);
93
+ if (node instanceof index_1.InstancedMesh) {
94
+ _cloneInstancedMeshData(node, clone);
95
+ }
96
+ const sourceTags = (0, tagsHelper_1.getTags)(node);
97
+ const mappedTags = sourceTags.map(tag => tagNamingStrategy(tag, newModelName));
98
+ (0, tagsHelper_1.setTags)(clone, mappedTags);
99
+ clone._parentContainer = assetContainer;
100
+ // TODO WTT: create global helper function for distinguishing between transform nodes and meshes
101
+ if (clone instanceof index_1.AbstractMesh) {
102
+ assetContainer.meshes.push(clone);
103
+ }
104
+ else {
105
+ assetContainer.transformNodes.push(clone);
106
+ }
107
+ const children = node.getChildTransformNodes(true);
108
+ children.forEach(child => _cloneNode(child, newModelName, clone, assetContainer, renaming));
109
+ }
110
+ /**
111
+ * Cloned instanced meshes are having the same source mesh as their cloning source.
112
+ * However we want the cloned source mesh to be the actual source.
113
+ * Exchanging and reassigning is done within this function.
114
+ * Operates on the given `node` and all its children recursively.
115
+ */
116
+ function _reAssignSourceMesh(node, sourceMeshes, clonedMeshes) {
117
+ if (node instanceof index_1.InstancedMesh) {
118
+ // find the cloned instance and source mesh
119
+ const clonedInstance = node;
120
+ const originalInstance = _findByUniqueId(sourceMeshes, (0, metadataHelper_1.getInternalMetadataValue)(clonedInstance, 'cloneSource'));
121
+ if (originalInstance instanceof index_1.InstancedMesh) {
122
+ const originalSource = originalInstance.sourceMesh;
123
+ const clonedSource = _findByUniqueId(clonedMeshes, (0, metadataHelper_1.getInternalMetadataValue)(originalSource, 'cloneTarget'));
124
+ if (clonedSource instanceof index_1.Mesh) {
125
+ // it's not possible to just exchange the source mesh => readonly property
126
+ // we have to create a new clone with the correct source mesh
127
+ const exchangedInstance = clonedInstance.clone(clonedInstance.name, clonedInstance.parent, true, clonedSource);
128
+ clonedInstance._parentContainer.meshes.push(exchangedInstance);
129
+ _cloneInstancedMeshData(clonedInstance, exchangedInstance);
130
+ // re-reference the childs of the cloned instance as well
131
+ const childs = clonedInstance.getChildTransformNodes(true);
132
+ childs.forEach(child => (child.parent = exchangedInstance));
133
+ }
134
+ }
135
+ // old instance mesh is not needed anymore and can be disposed
136
+ clonedInstance.dispose();
137
+ }
138
+ // recurse into childs
139
+ const children = node.getChildTransformNodes(true);
140
+ children.forEach(child => _reAssignSourceMesh(child, sourceMeshes, clonedMeshes));
141
+ }
142
+ /**
143
+ * Removes metadata entries "cloneSource" and "cloneTarget" from all meshes and transform nodes inside the asset
144
+ * container
145
+ */
146
+ function _clearCloningMetadata(assetContainer) {
147
+ [...assetContainer.meshes, ...assetContainer.transformNodes].forEach(node => {
148
+ (0, metadataHelper_1.clearInternalMetadataValue)(node, 'cloneSource');
149
+ (0, metadataHelper_1.clearInternalMetadataValue)(node, 'cloneTarget');
150
+ });
151
+ }
152
+ /**
153
+ * "InstancedMesh.clone" function doesn't clone tags and metadata, also the enabled state doesn't seem to be cloned
154
+ * correctly.
155
+ * This function adjusts the behaviour to fulfill our expectations.
156
+ */
157
+ function _cloneInstancedMeshData(sourceInstancedMesh, targetInstancedMesh) {
158
+ targetInstancedMesh.setEnabled(sourceInstancedMesh.isEnabled(false));
159
+ (0, metadataHelper_1.cloneMetadata)(sourceInstancedMesh, targetInstancedMesh);
160
+ (0, tagsHelper_1.cloneTags)(sourceInstancedMesh, targetInstancedMesh);
161
+ }
162
+ function _findByUniqueId(nodes, uniqueId) {
163
+ return nodes.find(node => node.uniqueId === uniqueId);
164
+ }
165
+ //# sourceMappingURL=cloningHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloningHelper.js","sourceRoot":"","sources":["../../../src/internal/cloningHelper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { LimitTextureSizeConfig } from '../index';
2
+ /**
3
+ * Checks if the current device is an iPhone
4
+ */
5
+ export declare function getIsIPhone(): boolean;
6
+ /**
7
+ * Checks if the current device is "scaled down", as defined in the Spec
8
+ */
9
+ export declare function getIsScaledDownDevice(limitTextureSize: LimitTextureSizeConfig | false): boolean;
@@ -1,29 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getIsScaledDownDevice = exports.getIsIPhone = void 0;
4
- const specStorage_1 = require("../store/specStorage");
5
4
  /**
6
5
  * Checks if the current device is an iPhone
7
6
  */
8
- const getIsIPhone = () => {
7
+ function getIsIPhone() {
9
8
  const isIPhone = /iPhone/.test(navigator.userAgent);
10
9
  return isIPhone;
11
- };
10
+ }
12
11
  exports.getIsIPhone = getIsIPhone;
13
12
  /**
14
13
  * Checks if the current device is "scaled down", as defined in the Spec
15
14
  */
16
- const getIsScaledDownDevice = () => {
17
- var _a;
18
- const sceneJson = specStorage_1.SpecStorage.get('scene');
19
- if (!((_a = sceneJson.engine) === null || _a === void 0 ? void 0 : _a.limitTextureSize)) {
15
+ function getIsScaledDownDevice(limitTextureSize) {
16
+ if (!limitTextureSize) {
20
17
  // no down scaling defined
21
18
  return false;
22
19
  }
23
20
  // check device
24
- const deviceFits = sceneJson.engine.limitTextureSize.devices === 'all' ||
25
- (sceneJson.engine.limitTextureSize.devices === 'iPhone' && getIsIPhone());
21
+ const deviceFits = limitTextureSize.devices === 'all' || (limitTextureSize.devices === 'iPhone' && getIsIPhone());
26
22
  return deviceFits;
27
- };
23
+ }
28
24
  exports.getIsScaledDownDevice = getIsScaledDownDevice;
29
25
  //# sourceMappingURL=deviceHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deviceHelper.js","sourceRoot":"","sources":["../../../src/internal/deviceHelper.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,SAAgB,WAAW;IACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAEpD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAJD,kCAIC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,gBAAgD;IACpF,IAAI,CAAC,gBAAgB,EAAE;QACrB,0BAA0B;QAC1B,OAAO,KAAK,CAAC;KACd;IAED,eAAe;IACf,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,KAAK,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;IAElH,OAAO,UAAU,CAAC;AACpB,CAAC;AAVD,sDAUC"}
@@ -0,0 +1,21 @@
1
+ import { ExcludedGeometryList, InstancedMesh, Mesh, TransformNode } from '../index';
2
+ /**
3
+ * Find out if a node is part of a list of excluded geometry
4
+ * @param node BJS node
5
+ * @param list list of excluded geometry
6
+ * @returns boolean based on whether node (or one of its parents) was found in list
7
+ */
8
+ export declare function isNodeExcluded(nodeToCheck: TransformNode, list: ExcludedGeometryList): boolean;
9
+ /**
10
+ * Creates a "standard" mesh from an instanced mesh, by cloning the source mesh and applying transformation data
11
+ */
12
+ export declare function createMeshFromInstancedMesh(instancedMesh: InstancedMesh, newName: string, clonedParent: TransformNode): Mesh;
13
+ /**
14
+ * Removes transformation data from the mesh and stores it in the geometry, which is called "baking".
15
+ * Also considers the geometry change from morph targets.
16
+ */
17
+ export declare function bakeGeometryOfMesh(mesh: Mesh): void;
18
+ /**
19
+ * Resets transformation to initial state
20
+ */
21
+ export declare function resetTransformation(node: TransformNode): void;
@@ -1,14 +1,47 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resetTransformation = exports.bakeGeometryOfMesh = exports.createMeshFromInstancedMesh = void 0;
4
- const buffer_1 = require("@babylonjs/core/Buffers/buffer");
5
- const math_vector_1 = require("@babylonjs/core/Maths/math.vector");
3
+ exports.resetTransformation = exports.bakeGeometryOfMesh = exports.createMeshFromInstancedMesh = exports.isNodeExcluded = void 0;
4
+ const index_1 = require("../index");
5
+ const metadataHelper_1 = require("./metadataHelper");
6
+ const tagsHelper_1 = require("./tagsHelper");
7
+ /**
8
+ * Find out if a node is part of a list of excluded geometry
9
+ * @param node BJS node
10
+ * @param list list of excluded geometry
11
+ * @returns boolean based on whether node (or one of its parents) was found in list
12
+ */
13
+ function isNodeExcluded(nodeToCheck, list) {
14
+ // CAUTION: node has to be the same instance
15
+ const checkNode = (excludedNode) => excludedNode === nodeToCheck;
16
+ const checkTagManagerSubject = (excludedSubject) => {
17
+ const nameMatches = !!excludedSubject.nodeName && excludedSubject.nodeName === nodeToCheck.name;
18
+ const tagMatches = !!excludedSubject.tagName && (0, tagsHelper_1.hasTag)(nodeToCheck, excludedSubject.tagName);
19
+ return nameMatches || tagMatches;
20
+ };
21
+ const check = (geometryToExclude) => {
22
+ if (geometryToExclude instanceof index_1.TransformNode) {
23
+ return checkNode(geometryToExclude);
24
+ }
25
+ if (geometryToExclude.tagName || geometryToExclude.nodeName) {
26
+ return checkTagManagerSubject(geometryToExclude);
27
+ }
28
+ return false;
29
+ };
30
+ let isExcluded = list.some(geometryToExclude => check(geometryToExclude));
31
+ // consider parent as well
32
+ if (!isExcluded && nodeToCheck.parent instanceof index_1.TransformNode) {
33
+ isExcluded = isNodeExcluded(nodeToCheck.parent, list);
34
+ }
35
+ return isExcluded;
36
+ }
37
+ exports.isNodeExcluded = isNodeExcluded;
6
38
  /**
7
39
  * Creates a "standard" mesh from an instanced mesh, by cloning the source mesh and applying transformation data
8
40
  */
9
- const createMeshFromInstancedMesh = function (instancedMesh, newName, clonedParent) {
41
+ function createMeshFromInstancedMesh(instancedMesh, newName, clonedParent) {
10
42
  // first create a clone of the source mesh
11
43
  const newMesh = instancedMesh.sourceMesh.clone(newName, clonedParent, true);
44
+ (0, metadataHelper_1.cloneInternalMetadata)(instancedMesh.sourceMesh, newMesh);
12
45
  // apply the transformation data, it's important to create clones of the transformations to not touch the original
13
46
  // transformation when applying changes (eg: geometry baking)
14
47
  newMesh.position = instancedMesh.position.clone();
@@ -21,13 +54,13 @@ const createMeshFromInstancedMesh = function (instancedMesh, newName, clonedPare
21
54
  // also sync the enabled state from the original instanced mesh
22
55
  newMesh.setEnabled(instancedMesh.isEnabled(false));
23
56
  return newMesh;
24
- };
57
+ }
25
58
  exports.createMeshFromInstancedMesh = createMeshFromInstancedMesh;
26
59
  /**
27
60
  * Removes transformation data from the mesh and stores it in the geometry, which is called "baking".
28
61
  * Also considers the geometry change from morph targets.
29
62
  */
30
- const bakeGeometryOfMesh = function (mesh) {
63
+ function bakeGeometryOfMesh(mesh) {
31
64
  if (!mesh.geometry) {
32
65
  // no geometry available, nothing to do
33
66
  return;
@@ -52,32 +85,32 @@ const bakeGeometryOfMesh = function (mesh) {
52
85
  if (morphTargetManager === null || morphTargetManager === void 0 ? void 0 : morphTargetManager.numTargets) {
53
86
  // apply morph target vertices data to mesh geometry
54
87
  // mostly only the "PositionKind" is implemented
55
- _bakeMorphTargetManagerIntoVertices(buffer_1.VertexBuffer.PositionKind, morphTargetManager, geometry);
56
- _bakeMorphTargetManagerIntoVertices(buffer_1.VertexBuffer.NormalKind, morphTargetManager, geometry);
57
- _bakeMorphTargetManagerIntoVertices(buffer_1.VertexBuffer.TangentKind, morphTargetManager, geometry);
58
- _bakeMorphTargetManagerIntoVertices(buffer_1.VertexBuffer.UVKind, morphTargetManager, geometry);
88
+ _bakeMorphTargetManagerIntoVertices(index_1.VertexBuffer.PositionKind, morphTargetManager, geometry);
89
+ _bakeMorphTargetManagerIntoVertices(index_1.VertexBuffer.NormalKind, morphTargetManager, geometry);
90
+ _bakeMorphTargetManagerIntoVertices(index_1.VertexBuffer.TangentKind, morphTargetManager, geometry);
91
+ _bakeMorphTargetManagerIntoVertices(index_1.VertexBuffer.UVKind, morphTargetManager, geometry);
59
92
  // remove morph target manager with all it's morph targets
60
93
  mesh.morphTargetManager = null;
61
94
  }
62
95
  // bake the transformation data in the mesh geometry, fortunately there is already a help function from Babylon.js
63
96
  mesh.bakeCurrentTransformIntoVertices();
64
- };
97
+ }
65
98
  exports.bakeGeometryOfMesh = bakeGeometryOfMesh;
66
99
  /**
67
100
  * Resets transformation to initial state
68
101
  */
69
- const resetTransformation = function (node) {
70
- node.position = new math_vector_1.Vector3(0, 0, 0);
71
- node.rotation = new math_vector_1.Vector3(0, 0, 0);
102
+ function resetTransformation(node) {
103
+ node.position = new index_1.Vector3(0, 0, 0);
104
+ node.rotation = new index_1.Vector3(0, 0, 0);
72
105
  node.rotationQuaternion = null;
73
- node.scaling = new math_vector_1.Vector3(1, 1, 1);
74
- };
106
+ node.scaling = new index_1.Vector3(1, 1, 1);
107
+ }
75
108
  exports.resetTransformation = resetTransformation;
76
109
  /**
77
110
  * @param kind morph targets can affect various vertices kinds, whereas "position" is the most common one
78
111
  * still other kinds (like normals or tangents) can be affected as well and can be provided on this input
79
112
  */
80
- const _bakeMorphTargetManagerIntoVertices = function (kind, morphTargetManager, geometry) {
113
+ function _bakeMorphTargetManagerIntoVertices(kind, morphTargetManager, geometry) {
81
114
  const origVerticesData = geometry.getVerticesData(kind);
82
115
  if (!origVerticesData) {
83
116
  // no vertices data for this kind availabe on the mesh geometry
@@ -96,18 +129,18 @@ const _bakeMorphTargetManagerIntoVertices = function (kind, morphTargetManager,
96
129
  }
97
130
  // apply the updated vertices data
98
131
  geometry.setVerticesData(kind, verticesData);
99
- };
100
- const _getVerticesDataFromMorphTarget = function (kind, morphTarget) {
132
+ }
133
+ function _getVerticesDataFromMorphTarget(kind, morphTarget) {
101
134
  switch (kind) {
102
- case buffer_1.VertexBuffer.PositionKind:
135
+ case index_1.VertexBuffer.PositionKind:
103
136
  return morphTarget.getPositions();
104
- case buffer_1.VertexBuffer.NormalKind:
137
+ case index_1.VertexBuffer.NormalKind:
105
138
  return morphTarget.getNormals();
106
- case buffer_1.VertexBuffer.TangentKind:
139
+ case index_1.VertexBuffer.TangentKind:
107
140
  return morphTarget.getTangents();
108
- case buffer_1.VertexBuffer.UVKind:
141
+ case index_1.VertexBuffer.UVKind:
109
142
  return morphTarget.getUVs();
110
143
  }
111
144
  return null;
112
- };
145
+ }
113
146
  //# sourceMappingURL=geometryHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometryHelper.js","sourceRoot":"","sources":["../../../src/internal/geometryHelper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { BaseTexture, Material, Node } from '../index';
2
+ declare type MetadataValue = string | number | boolean | undefined;
3
+ declare type MetadataTarget = Node | Material | BaseTexture;
4
+ declare type MetadataKeys = 'deferredMaterial' | 'materialToBeSet' | 'exportNode' | 'deleteAfterExport' | 'exchangeMaterialWith' | 'cloneSource' | 'cloneTarget';
5
+ /**
6
+ * Sets certain metadata on the objects INTERNAL metadata storage.
7
+ * "object._internalMetadata.cbn" is reserved for CBN specific metadata information.
8
+ * The objects public metadata ("object.metadata") is not affected and should therefore not interfere with metadata
9
+ * that is used in consumer projects.
10
+ */
11
+ export declare function setInternalMetadataValue(object: MetadataTarget, key: MetadataKeys, value: MetadataValue): void;
12
+ export declare function clearInternalMetadataValue(object: MetadataTarget, key: MetadataKeys): void;
13
+ export declare function getInternalMetadataValue(object: MetadataTarget, key: MetadataKeys): MetadataValue;
14
+ /**
15
+ * Creates a deep clone from the source objects internal metadata and assigns it to the target objects metadata.
16
+ * This is required as Babylon.js only creates shallow clones of the internal metadata, which would be problematic for
17
+ * our needs.
18
+ */
19
+ export declare function cloneInternalMetadata(sourceObject: MetadataTarget, targetObject: MetadataTarget): void;
20
+ /**
21
+ * Clones the metadata from one object to another.
22
+ * CAUTION: this is now the public available "object.metadata" object.
23
+ * We need this function internally when cloning instanced meshes.
24
+ */
25
+ export declare function cloneMetadata(sourceObject: MetadataTarget, targetObject: MetadataTarget): void;
26
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cloneMetadata = exports.cloneInternalMetadata = exports.getInternalMetadataValue = exports.clearInternalMetadataValue = exports.setInternalMetadataValue = void 0;
4
+ const lodash_es_1 = require("lodash-es");
5
+ // TODO WTT: use generics or some kind of logic that is able to type the metadata according to their key
6
+ /**
7
+ * Sets certain metadata on the objects INTERNAL metadata storage.
8
+ * "object._internalMetadata.cbn" is reserved for CBN specific metadata information.
9
+ * The objects public metadata ("object.metadata") is not affected and should therefore not interfere with metadata
10
+ * that is used in consumer projects.
11
+ */
12
+ function setInternalMetadataValue(object, key, value) {
13
+ if (!object._internalMetadata) {
14
+ object._internalMetadata = {};
15
+ }
16
+ if (!object._internalMetadata.cbn) {
17
+ object._internalMetadata.cbn = {};
18
+ }
19
+ object._internalMetadata.cbn[key] = value;
20
+ }
21
+ exports.setInternalMetadataValue = setInternalMetadataValue;
22
+ function clearInternalMetadataValue(object, key) {
23
+ var _a, _b;
24
+ (_b = (_a = object._internalMetadata) === null || _a === void 0 ? void 0 : _a.cbn) === null || _b === void 0 ? true : delete _b[key];
25
+ }
26
+ exports.clearInternalMetadataValue = clearInternalMetadataValue;
27
+ function getInternalMetadataValue(object, key) {
28
+ var _a, _b;
29
+ return (_b = (_a = object._internalMetadata) === null || _a === void 0 ? void 0 : _a.cbn) === null || _b === void 0 ? void 0 : _b[key];
30
+ }
31
+ exports.getInternalMetadataValue = getInternalMetadataValue;
32
+ /**
33
+ * Creates a deep clone from the source objects internal metadata and assigns it to the target objects metadata.
34
+ * This is required as Babylon.js only creates shallow clones of the internal metadata, which would be problematic for
35
+ * our needs.
36
+ */
37
+ function cloneInternalMetadata(sourceObject, targetObject) {
38
+ targetObject._internalMetadata = (0, lodash_es_1.cloneDeep)(sourceObject._internalMetadata);
39
+ }
40
+ exports.cloneInternalMetadata = cloneInternalMetadata;
41
+ /**
42
+ * Clones the metadata from one object to another.
43
+ * CAUTION: this is now the public available "object.metadata" object.
44
+ * We need this function internally when cloning instanced meshes.
45
+ */
46
+ function cloneMetadata(sourceObject, targetObject) {
47
+ const clonedMetadata = (0, lodash_es_1.cloneDeep)(sourceObject.metadata);
48
+ targetObject.metadata = clonedMetadata;
49
+ }
50
+ exports.cloneMetadata = cloneMetadata;
51
+ //# sourceMappingURL=metadataHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadataHelper.js","sourceRoot":"","sources":["../../../src/internal/metadataHelper.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AAiBtC,wGAAwG;AACxG;;;;;GAKG;AACH,SAAgB,wBAAwB,CAAC,MAAsB,EAAE,GAAiB,EAAE,KAAoB;IACtG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;QAC7B,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC/B;IACD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE;QACjC,MAAM,CAAC,iBAAiB,CAAC,GAAG,GAAG,EAAE,CAAC;KACnC;IAED,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC5C,CAAC;AATD,4DASC;AAED,SAAgB,0BAA0B,CAAC,MAAsB,EAAE,GAAiB;;IAC3E,MAAA,MAAA,MAAM,CAAC,iBAAiB,0CAAE,GAAG,+CAAG,GAAG,CAAC,CAAC;AAC9C,CAAC;AAFD,gEAEC;AAED,SAAgB,wBAAwB,CAAC,MAAsB,EAAE,GAAiB;;IAChF,OAAO,MAAA,MAAA,MAAM,CAAC,iBAAiB,0CAAE,GAAG,0CAAG,GAAG,CAAC,CAAC;AAC9C,CAAC;AAFD,4DAEC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,YAA4B,EAAE,YAA4B;IAC9F,YAAY,CAAC,iBAAiB,GAAG,IAAA,qBAAS,EAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAC7E,CAAC;AAFD,sDAEC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,YAA4B,EAAE,YAA4B;IACtF,MAAM,cAAc,GAAG,IAAA,qBAAS,EAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAExD,YAAY,CAAC,QAAQ,GAAG,cAAc,CAAC;AACzC,CAAC;AAJD,sCAIC"}
@@ -0,0 +1,40 @@
1
+ import { Material, ParameterValue, Scene } from '../index';
2
+ declare type PaintableValue = {
3
+ src: string;
4
+ options?: PaintableOptions;
5
+ };
6
+ declare type PaintableOptions = {
7
+ uScale?: number;
8
+ uOffset?: number;
9
+ vScale?: number;
10
+ vOffset?: number;
11
+ };
12
+ /**
13
+ * Observer implementation for "paintable" parameter.
14
+ * Basically creates a dynamic texture from the source image and assigns it as albedo (or diffuse) texture.
15
+ */
16
+ export declare function paintableParameterObserver(newValue: ParameterValue, materials: Material[], scene: Scene): Promise<void>;
17
+ /**
18
+ * Parser for paintable value.
19
+ * ATM this is only used internally, but it could theoretically be used to create ones own paintable implementation.
20
+ *
21
+ * @param value The value to parse. Examples:
22
+ * ```ts
23
+ * // Default definition as JSON object:
24
+ * '{ "src": "https://path.to/image.jpg", "uScale": 0.5 }'
25
+ *
26
+ * // Short hand definition, only contains source string:
27
+ * 'https://path.to/image.jpg'
28
+ *
29
+ * // Full content, paintable texture is flipped in both directions
30
+ * '{ "src": "https://path.to/image.jpg", "uScale": -1, "vScale": -1, "uOffset": 0, "vOffset": 0 }'
31
+ *
32
+ * // SVG content can be used directly:
33
+ * '<svg>...</svg>'
34
+ *
35
+ * // SVG in src property works as well:
36
+ * '{ "src": "<svg>...</svg>", "uScale": 0.5 }'
37
+ * ```
38
+ */
39
+ export declare function parsePaintable(value: ParameterValue): PaintableValue;
40
+ export {};