@combeenation/3d-viewer 5.1.0-rc3 → 5.1.0-rc4

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 (104) hide show
  1. package/dist/lib-cjs/api/classes/element.js +4 -18
  2. package/dist/lib-cjs/api/classes/element.js.map +1 -1
  3. package/dist/lib-cjs/api/classes/variant.js +37 -26
  4. package/dist/lib-cjs/api/classes/variant.js.map +1 -1
  5. package/dist/lib-cjs/api/util/babylonHelper.d.ts +2 -2
  6. package/dist/lib-cjs/api/util/babylonHelper.js +17 -6
  7. package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
  8. package/dist/lib-cjs/api/util/sceneLoaderHelper.d.ts +8 -1
  9. package/dist/lib-cjs/api/util/sceneLoaderHelper.js +39 -2
  10. package/dist/lib-cjs/api/util/sceneLoaderHelper.js.map +1 -1
  11. package/dist/lib-cjs/buildinfo.json +1 -1
  12. package/dist/lib-es6/api/classes/animationInterface.d.ts +8 -0
  13. package/dist/lib-es6/api/classes/animationInterface.js +2 -0
  14. package/dist/lib-es6/api/classes/animationInterface.js.map +1 -0
  15. package/dist/lib-es6/api/classes/dottedPath.d.ts +79 -0
  16. package/dist/lib-es6/api/classes/dottedPath.js +185 -0
  17. package/dist/lib-es6/api/classes/dottedPath.js.map +1 -0
  18. package/dist/lib-es6/api/classes/element.d.ts +149 -0
  19. package/dist/lib-es6/api/classes/element.js +821 -0
  20. package/dist/lib-es6/api/classes/element.js.map +1 -0
  21. package/dist/lib-es6/api/classes/event.d.ts +326 -0
  22. package/dist/lib-es6/api/classes/event.js +369 -0
  23. package/dist/lib-es6/api/classes/event.js.map +1 -0
  24. package/dist/lib-es6/api/classes/eventBroadcaster.d.ts +26 -0
  25. package/dist/lib-es6/api/classes/eventBroadcaster.js +51 -0
  26. package/dist/lib-es6/api/classes/eventBroadcaster.js.map +1 -0
  27. package/dist/lib-es6/api/classes/parameter.d.ts +336 -0
  28. package/dist/lib-es6/api/classes/parameter.js +469 -0
  29. package/dist/lib-es6/api/classes/parameter.js.map +1 -0
  30. package/dist/lib-es6/api/classes/parameterObservable.d.ts +36 -0
  31. package/dist/lib-es6/api/classes/parameterObservable.js +99 -0
  32. package/dist/lib-es6/api/classes/parameterObservable.js.map +1 -0
  33. package/dist/lib-es6/api/classes/parameterizable.d.ts +15 -0
  34. package/dist/lib-es6/api/classes/parameterizable.js +147 -0
  35. package/dist/lib-es6/api/classes/parameterizable.js.map +1 -0
  36. package/dist/lib-es6/api/classes/placementAnimation.d.ts +44 -0
  37. package/dist/lib-es6/api/classes/placementAnimation.js +161 -0
  38. package/dist/lib-es6/api/classes/placementAnimation.js.map +1 -0
  39. package/dist/lib-es6/api/classes/variant.d.ts +234 -0
  40. package/dist/lib-es6/api/classes/variant.js +1199 -0
  41. package/dist/lib-es6/api/classes/variant.js.map +1 -0
  42. package/dist/lib-es6/api/classes/variantInstance.d.ts +45 -0
  43. package/dist/lib-es6/api/classes/variantInstance.js +106 -0
  44. package/dist/lib-es6/api/classes/variantInstance.js.map +1 -0
  45. package/dist/lib-es6/api/classes/variantParameterizable.d.ts +17 -0
  46. package/dist/lib-es6/api/classes/variantParameterizable.js +97 -0
  47. package/dist/lib-es6/api/classes/variantParameterizable.js.map +1 -0
  48. package/dist/lib-es6/api/classes/viewer.d.ts +184 -0
  49. package/dist/lib-es6/api/classes/viewer.js +729 -0
  50. package/dist/lib-es6/api/classes/viewer.js.map +1 -0
  51. package/dist/lib-es6/api/classes/viewerLight.d.ts +66 -0
  52. package/dist/lib-es6/api/classes/viewerLight.js +390 -0
  53. package/dist/lib-es6/api/classes/viewerLight.js.map +1 -0
  54. package/dist/lib-es6/api/internal/debugViewer.d.ts +13 -0
  55. package/dist/lib-es6/api/internal/debugViewer.js +84 -0
  56. package/dist/lib-es6/api/internal/debugViewer.js.map +1 -0
  57. package/dist/lib-es6/api/internal/lensRendering.d.ts +8 -0
  58. package/dist/lib-es6/api/internal/lensRendering.js +9 -0
  59. package/dist/lib-es6/api/internal/lensRendering.js.map +1 -0
  60. package/dist/lib-es6/api/internal/sceneSetup.d.ts +13 -0
  61. package/dist/lib-es6/api/internal/sceneSetup.js +234 -0
  62. package/dist/lib-es6/api/internal/sceneSetup.js.map +1 -0
  63. package/dist/lib-es6/api/manager/animationManager.d.ts +29 -0
  64. package/dist/lib-es6/api/manager/animationManager.js +128 -0
  65. package/dist/lib-es6/api/manager/animationManager.js.map +1 -0
  66. package/dist/lib-es6/api/manager/gltfExportManager.d.ts +65 -0
  67. package/dist/lib-es6/api/manager/gltfExportManager.js +221 -0
  68. package/dist/lib-es6/api/manager/gltfExportManager.js.map +1 -0
  69. package/dist/lib-es6/api/manager/sceneManager.d.ts +31 -0
  70. package/dist/lib-es6/api/manager/sceneManager.js +150 -0
  71. package/dist/lib-es6/api/manager/sceneManager.js.map +1 -0
  72. package/dist/lib-es6/api/manager/variantInstanceManager.d.ts +92 -0
  73. package/dist/lib-es6/api/manager/variantInstanceManager.js +333 -0
  74. package/dist/lib-es6/api/manager/variantInstanceManager.js.map +1 -0
  75. package/dist/lib-es6/api/store/specStorage.d.ts +24 -0
  76. package/dist/lib-es6/api/store/specStorage.js +49 -0
  77. package/dist/lib-es6/api/store/specStorage.js.map +1 -0
  78. package/dist/lib-es6/api/util/babylonHelper.d.ts +174 -0
  79. package/dist/lib-es6/api/util/babylonHelper.js +582 -0
  80. package/dist/lib-es6/api/util/babylonHelper.js.map +1 -0
  81. package/dist/lib-es6/api/util/globalTypes.d.ts +366 -0
  82. package/dist/lib-es6/api/util/globalTypes.js +2 -0
  83. package/dist/lib-es6/api/util/globalTypes.js.map +1 -0
  84. package/dist/lib-es6/api/util/resourceHelper.d.ts +58 -0
  85. package/dist/lib-es6/api/util/resourceHelper.js +248 -0
  86. package/dist/lib-es6/api/util/resourceHelper.js.map +1 -0
  87. package/dist/lib-es6/api/util/sceneLoaderHelper.d.ts +35 -0
  88. package/dist/lib-es6/api/util/sceneLoaderHelper.js +134 -0
  89. package/dist/lib-es6/api/util/sceneLoaderHelper.js.map +1 -0
  90. package/dist/lib-es6/api/util/stringHelper.d.ts +9 -0
  91. package/dist/lib-es6/api/util/stringHelper.js +22 -0
  92. package/dist/lib-es6/api/util/stringHelper.js.map +1 -0
  93. package/dist/lib-es6/api/util/structureHelper.d.ts +9 -0
  94. package/dist/lib-es6/api/util/structureHelper.js +46 -0
  95. package/dist/lib-es6/api/util/structureHelper.js.map +1 -0
  96. package/dist/lib-es6/buildinfo.json +3 -0
  97. package/dist/lib-es6/index.d.ts +49 -0
  98. package/dist/lib-es6/index.js +51 -0
  99. package/dist/lib-es6/index.js.map +1 -0
  100. package/package.json +6 -6
  101. package/src/api/classes/element.ts +4 -23
  102. package/src/api/classes/variant.ts +22 -3
  103. package/src/api/util/babylonHelper.ts +17 -7
  104. package/src/api/util/sceneLoaderHelper.ts +48 -2
@@ -4,6 +4,9 @@ import { AssetContainer } from '@babylonjs/core/assetContainer';
4
4
  import { injectNodeMetadata } from './babylonHelper';
5
5
  import has from 'lodash-es/has';
6
6
  import { Material } from '@babylonjs/core/Materials/material';
7
+ import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh';
8
+ import { Nullable } from '@babylonjs/core/types';
9
+ import { Node as BjsNode } from '@babylonjs/core/node'; //! overload DOM API Node due to name-clash with BJS
7
10
 
8
11
  const missingMaterialMetadataName = 'missingMaterial';
9
12
 
@@ -43,7 +46,7 @@ const getCustomCbnBabylonLoaderPlugin = function (previousLoaderPlugin: ISceneLo
43
46
  */
44
47
  const getMaterialPostLoadObserver = function (targetMeshOrInstance: AbstractMesh, concerningMesh: Mesh) {
45
48
  return (_eventData: any, _eventState: any) => {
46
- const hasBeenEnabled = targetMeshOrInstance.isEnabled(true);
49
+ const hasBeenEnabled = concerningMesh.isEnabled(true);
47
50
  const materialMissing = has(concerningMesh.metadata, missingMaterialMetadataName);
48
51
  if (!hasBeenEnabled || !materialMissing) return;
49
52
  // get id of missing material
@@ -83,6 +86,44 @@ const addMissingMaterialMetadata = function (dataParsed: any, container: AssetCo
83
86
  });
84
87
  };
85
88
 
89
+ /**
90
+ * Adds an "onEnabledStateChanged" observer to the given mesh and all its parents:
91
+ * The added observer (`getMaterialPostLoadObserver`) handles creation of missing materials once the given node is
92
+ * enabled.
93
+ */
94
+ const addMissingMaterialObserver = function (node: BjsNode) {
95
+ // set the concerning node, i.e. the node the observer should check for missing material.
96
+ // for instanced meshes, we want the sourcemesh here.
97
+ const concerningNode = node instanceof InstancedMesh ? node.sourceMesh : (node as Mesh);
98
+
99
+ // observer is pointless if concerning node has no missing material
100
+ if (!has(concerningNode.metadata, missingMaterialMetadataName)) return;
101
+
102
+ // for each of our AbstractMeshes, set an observer on the AbstractMesh itself and all of its parents.
103
+ let currNode: Nullable<BjsNode> = node;
104
+ while (currNode) {
105
+ // Note HAR: Using `addOnce` could be wrong in certain situations.
106
+ // E.g.:
107
+ // * 2 meshes `parentMesh` & `parentMesh.concerningMesh`
108
+ // * `concerningMesh` is having the missing material flag
109
+ // * Both `parentMesh` & `concerningMesh` are disabled
110
+ // * `parentMesh` is enabled -> material should **not** be created as `concerningMesh` is still disabled
111
+ // * `parentMesh` is disabled
112
+ // * `concerningMesh` is enabled -> material should **not** be created as `concerningMesh` is still invisible
113
+ // because its `parentMesh` is ATM disabled
114
+ // * `parentMesh` & `concerningMesh` are both enable
115
+ // -> material should be created as `concerningMesh` is now actually visible but it isn't, as all observers were
116
+ // only fired once 🔥
117
+ //
118
+ // However: Using `add` instead of `addOnce` requires rather complicated manual clean up work...
119
+
120
+ // add observer. needed only once per node, hence addOnce()
121
+ node.onEnabledStateChangedObservable.addOnce(getMaterialPostLoadObserver(currNode as AbstractMesh, concerningNode));
122
+ // console.log('## observer set on: ' + meshOrInstance.name);
123
+ currNode = currNode.parent;
124
+ }
125
+ };
126
+
86
127
  /**
87
128
  * Look up the provided materials (see library import) and create and return one if found.
88
129
  * @param materialId BabylonJs material-id. E.g. 'concrete".
@@ -98,4 +139,9 @@ export const getMaterialFromCbnAssets = function (materialId: string, scene: Sce
98
139
  return material || null;
99
140
  };
100
141
 
101
- export { getCustomCbnBabylonLoaderPlugin, getMaterialPostLoadObserver, missingMaterialMetadataName };
142
+ export {
143
+ getCustomCbnBabylonLoaderPlugin,
144
+ getMaterialPostLoadObserver,
145
+ missingMaterialMetadataName,
146
+ addMissingMaterialObserver,
147
+ };