@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceHelper.js","sourceRoot":"","sources":["../../../../src/api/util/resourceHelper.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,IAAM,KAAK,GAAG,UAAC,EAAU,IAAK,OAAA,IAAI,OAAO,CAAC,UAAA,OAAO,IAAI,OAAA,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAA9B,CAA8B,CAAC,EAAtD,CAAsD,CAAC;AAErF;;;;GAIG;AACH,IAAM,IAAI,GAAG,UAAgB,IAAY;;;;;;oBACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBAC7B,qBAAM,KAAK,CAAC,IAAI,CAAC,EAAA;;oBAAxB,IAAI,GAAG,SAAiB;oBAC5B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBACtC,sBAAO,IAAI,EAAC;;;;CACb,CAAC;AAEF;;;;GAIG;AACH,IAAM,QAAQ,GAAG,UAAmB,IAAY;;;;;wBAC7B,qBAAM,IAAI,CAAC,IAAI,CAAC,EAAA;;oBAA3B,QAAQ,GAAG,SAAgB;oBACjC,sBAAO,QAAQ,CAAC,IAAI,EAAE,EAAC;;;;CACxB,CAAC;AAEF;;;;GAIG;AACH,IAAM,QAAQ,GAAG,UAAgB,IAAY;;;;;wBAC1B,qBAAM,IAAI,CAAC,IAAI,CAAC,EAAA;;oBAA3B,QAAQ,GAAG,SAAgB;oBACjC,sBAAO,QAAQ,CAAC,IAAI,EAAE,EAAC;;;;CACxB,CAAC;AAEF;;;GAGG;AACH,IAAM,cAAc,GAAG,UAAC,GAAW;IACjC,OAAA,IAAI,OAAO,CAAC,UAAA,OAAO;QACjB,IAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAElD,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAClC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACjD,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAClD,QAAQ,CAAC,MAAM,GAAG,cAAM,OAAA,OAAO,EAAE,EAAT,CAAS,CAAC;QAElC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC;AATF,CASE,CAAC;AAEL;;GAEG;AACH,IAAM,QAAQ,GAAG,UAAU,IAAc,EAAE,IAAY,EAAE,SAA0B;IAA1B,0BAAA,EAAA,iBAA0B;IACjF,IAAI,OAAY,CAAC;IACjB,OAAO;QACL,aAAa;QACb,IAAM,OAAO,GAAG,IAAI,CAAC;QACrB,IAAM,IAAI,GAAG,SAAS,CAAC;QACvB,IAAM,KAAK,GAAG;YACZ,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,SAAS,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aAC3B;QACH,CAAC,CAAC;QACF,IAAM,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;QACtC,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC3B;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,IAAM,SAAS,GAAG;IAAwB,cAA4B;SAA5B,UAA4B,EAA5B,qBAA4B,EAA5B,IAA4B;QAA5B,yBAA4B;;IACpE,IAAM,SAAS,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,UAAA,GAAG;QACd,GAAG,CAAC,OAAO,CAAC,UAAC,CAAC,EAAE,CAAC;YACf,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,IAAM,kBAAkB,GAAG,UAAgB,MAAc;;;;;wBAEzB,qBAAM,YAAY,CAAC,MAAM,CAAC,EAAA;;oBAAlD,qBAAqB,GAAG,SAA0B;oBAGlD,UAAU,GAAG,qBAAqB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;oBAErF,sBAAO,qBAAqB,CAAC,UAAU,CAAC,EAAC;;;;CAC1C,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,IAAM,qBAAqB,GAAG,UAAgB,MAAc;;;;;;oBACtD,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;oBAEtB,qBAAM,IAAI,OAAO,CAAC,UAAA,OAAO;4BACvB,GAAG,CAAC,MAAM,GAAG;gCACX,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;4BACzB,CAAC,CAAC;4BACF,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;wBACnB,CAAC,CAAC,EAAA;;oBALF,SAKE,CAAC;oBAEH,sBAAO,GAAG,EAAC;;;;CACZ,CAAC;AAEF;;GAEG;AACH,IAAM,YAAY,GAAG,UAAgB,MAAc;;;;;;oBAC3C,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC/D,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAClD,gBAAgB,kBAAO,gBAAgB,EAAK,eAAe,CAAC,CAAC;oBAE7D,QAAQ,GAAG,gEAAgE,CAAC;oBAC5E,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAa,CAAC;oBAC7C,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,UAAA,GAAG;wBAClC,OAAA,gBAAgB,CAAC,IAAI,CAAC,UAAA,SAAS,IAAI,OAAA,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAI,SAAW,CAAC,EAA3C,CAA2C,CAAC;oBAA/E,CAA+E,CAChF,CAAC;oBACI,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBACnC,qBAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAA;;oBAA3D,mBAAmB,GAAG,SAAqC;oBACjE,sBAAO,mBAAmB,CAAC,MAAM,CAAC,UAAC,MAAM,EAAE,CAAC,IAAK,OAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAA/B,CAA+B,EAAE,MAAM,CAAC,EAAC;;;;CAC3F,CAAC;AAEF;;GAEG;AACH,IAAM,oBAAoB,GAAG,UAAgB,QAAgB;;;;YAC3D,yFAAyF;YACzF,2GAA2G;YAC3G,8EAA8E;YAC9E,sBAAO,IAAI,OAAO,CAAC,UAAO,OAAO,EAAE,MAAM;;;;oCAC1B,qBAAM,KAAK,CAAC,QAAQ,CAAC,EAAA;;gCAA5B,IAAI,GAAG,SAAqB;gCACrB,qBAAM,IAAI,CAAC,IAAI,EAAE,EAAA;;gCAAxB,IAAI,GAAG,SAAiB;gCACxB,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gCAChC,MAAM,CAAC,SAAS,GAAG,UAAA,KAAK;oCACtB,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;oCAC5B,IAAI,CAAC,MAAM,EAAE;wCACX,OAAO,MAAM,CAAC,sBAAmB,QAAQ,4BAAwB,CAAC,CAAC;qCACpE;oCACD,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;oCAC7B,IAAI,CAAC,MAAM,EAAE;wCACX,OAAO,MAAM,CAAC,sBAAmB,QAAQ,iCAA6B,CAAC,CAAC;qCACzE;oCACD,OAAO,CAAC;wCACN,GAAG,EAAE,QAAQ;wCACb,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAY;qCACpC,CAAC,CAAC;gCACL,CAAC,CAAC;gCACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;;;qBAC5B,CAAC,EAAC;;;CACJ,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { Scene } from '@babylonjs/core/scene';
2
+ import { ISceneLoaderPlugin } from '@babylonjs/core/Loading/sceneLoader';
3
+ import { Material } from '@babylonjs/core/Materials/material';
4
+ import { Node as BjsNode } from '@babylonjs/core/node';
5
+ declare const missingMaterialMetadataName = "missingMaterial";
6
+ /**
7
+ * Create and return a custom loader plugin to be registered with SceneLoader, that allows
8
+ * us to run our own code against the input data before using the standard procedure to
9
+ * import.
10
+ * @param previousLoaderPlugin the actual loader that's executed after manipulating the input data
11
+ * @returns Custom loader plugin to be registered with SceneLoader.RegisterPlugin()
12
+ */
13
+ declare const getCustomCbnBabylonLoaderPlugin: (previousLoaderPlugin: ISceneLoaderPlugin) => ISceneLoaderPlugin;
14
+ /**
15
+ * Return an observer to be applied to meshes in order to post-load missing materials
16
+ * upon set enabled/visible.
17
+ * @param targetMeshOrInstance AbstractMesh the observer will be applied to
18
+ * @param concerningMesh Mesh to look for missing materials on, and create/apply to (when found).
19
+ * @returns observer
20
+ */
21
+ declare const getMaterialPostLoadObserver: (targetMeshOrInstance: AbstractMesh, concerningMesh: Mesh) => (_eventData: any, _eventState: any) => void;
22
+ /**
23
+ * Adds an "onEnabledStateChanged" observer to the given mesh and all its parents:
24
+ * The added observer (`getMaterialPostLoadObserver`) handles creation of missing materials once the given node is
25
+ * enabled.
26
+ */
27
+ declare const addMissingMaterialObserver: (node: BjsNode) => void;
28
+ /**
29
+ * Look up the provided materials (see library import) and create and return one if found.
30
+ * @param materialId BabylonJs material-id. E.g. 'concrete".
31
+ * @param scene BabylonJs scene
32
+ * @returns PBRMaterial | null
33
+ */
34
+ export declare const getMaterialFromCbnAssets: (materialId: string, scene: Scene) => Material | null;
35
+ export { getCustomCbnBabylonLoaderPlugin, getMaterialPostLoadObserver, missingMaterialMetadataName, addMissingMaterialObserver, };
@@ -0,0 +1,134 @@
1
+ import { injectNodeMetadata } from './babylonHelper';
2
+ import has from 'lodash-es/has';
3
+ import { Material } from '@babylonjs/core/Materials/material';
4
+ import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh';
5
+ var missingMaterialMetadataName = 'missingMaterial';
6
+ /**
7
+ * Create and return a custom loader plugin to be registered with SceneLoader, that allows
8
+ * us to run our own code against the input data before using the standard procedure to
9
+ * import.
10
+ * @param previousLoaderPlugin the actual loader that's executed after manipulating the input data
11
+ * @returns Custom loader plugin to be registered with SceneLoader.RegisterPlugin()
12
+ */
13
+ var getCustomCbnBabylonLoaderPlugin = function (previousLoaderPlugin) {
14
+ var customLoader = {
15
+ name: 'cbnCustomBabylonLoader',
16
+ extensions: '.babylon',
17
+ importMesh: previousLoaderPlugin.importMesh,
18
+ load: previousLoaderPlugin.load,
19
+ loadAssetContainer: function (scene, data, rootUrl, onError) {
20
+ //* 1) --- manipulate ORIGINAL data
21
+ var dataParsed = JSON.parse(data);
22
+ //* 2) --- call default (non-custom) loading method
23
+ var importedContainer = previousLoaderPlugin.loadAssetContainer(scene, data, rootUrl);
24
+ //* 3) --- manipulate IMPORTED data
25
+ addMissingMaterialMetadata(dataParsed, importedContainer);
26
+ //* 4) --- return imported data
27
+ return importedContainer;
28
+ },
29
+ };
30
+ return customLoader;
31
+ };
32
+ /**
33
+ * Return an observer to be applied to meshes in order to post-load missing materials
34
+ * upon set enabled/visible.
35
+ * @param targetMeshOrInstance AbstractMesh the observer will be applied to
36
+ * @param concerningMesh Mesh to look for missing materials on, and create/apply to (when found).
37
+ * @returns observer
38
+ */
39
+ var getMaterialPostLoadObserver = function (targetMeshOrInstance, concerningMesh) {
40
+ return function (_eventData, _eventState) {
41
+ var hasBeenEnabled = concerningMesh.isEnabled(true);
42
+ var materialMissing = has(concerningMesh.metadata, missingMaterialMetadataName);
43
+ if (!hasBeenEnabled || !materialMissing)
44
+ return;
45
+ // get id of missing material
46
+ var missingMatId = concerningMesh.metadata[missingMaterialMetadataName];
47
+ // try to find material on the scene
48
+ var existingMat = concerningMesh.getScene().getMaterialById(missingMatId);
49
+ // assign either existing material or freshly created one
50
+ concerningMesh.material = existingMat || getMaterialFromCbnAssets(missingMatId, concerningMesh.getScene());
51
+ // since the material is there now, we do not need the related metadata tag anymore
52
+ delete concerningMesh.metadata[missingMaterialMetadataName];
53
+ };
54
+ };
55
+ /**
56
+ * Internal function that compares the original meshes on a .babylon file with what was loaded,
57
+ * and tags missing materials with respective metadata on respective meshes.
58
+ * @param dataParsed original data
59
+ * @param container loaded data
60
+ */
61
+ var addMissingMaterialMetadata = function (dataParsed, container) {
62
+ container.meshes.forEach(function (currMeshImported) {
63
+ var _a;
64
+ var _b, _c;
65
+ for (var _i = 0, _d = dataParsed.meshes; _i < _d.length; _i++) {
66
+ var currMeshOriginal = _d[_i];
67
+ if (currMeshOriginal.name !== currMeshImported.name)
68
+ continue;
69
+ // we're dealing with the original version of the current imported mesh now
70
+ var materialOnImportedMesh = (_b = currMeshImported.material) === null || _b === void 0 ? void 0 : _b.id;
71
+ var materialOnOriginalMesh = currMeshOriginal.materialId;
72
+ if (!materialOnOriginalMesh || materialOnImportedMesh === materialOnOriginalMesh)
73
+ continue;
74
+ // TODO: Just for easier debugging. Remove before publishment...
75
+ console.info("Adding \"" + missingMaterialMetadataName + "\" info on mesh \"" + currMeshOriginal.name + "\" with material \"" + currMeshOriginal.materialId + "\"");
76
+ // if we're here, the imported mesh has different material than original one
77
+ (_c = window.Cbn) === null || _c === void 0 ? void 0 : _c.Assets.assertMaterialExists(materialOnOriginalMesh);
78
+ injectNodeMetadata(currMeshImported, (_a = {}, _a[missingMaterialMetadataName] = materialOnOriginalMesh, _a), false);
79
+ break;
80
+ }
81
+ });
82
+ };
83
+ /**
84
+ * Adds an "onEnabledStateChanged" observer to the given mesh and all its parents:
85
+ * The added observer (`getMaterialPostLoadObserver`) handles creation of missing materials once the given node is
86
+ * enabled.
87
+ */
88
+ var addMissingMaterialObserver = function (node) {
89
+ // set the concerning node, i.e. the node the observer should check for missing material.
90
+ // for instanced meshes, we want the sourcemesh here.
91
+ var concerningNode = node instanceof InstancedMesh ? node.sourceMesh : node;
92
+ // observer is pointless if concerning node has no missing material
93
+ if (!has(concerningNode.metadata, missingMaterialMetadataName))
94
+ return;
95
+ // for each of our AbstractMeshes, set an observer on the AbstractMesh itself and all of its parents.
96
+ var currNode = node;
97
+ while (currNode) {
98
+ // Note HAR: Using `addOnce` could be wrong in certain situations.
99
+ // E.g.:
100
+ // * 2 meshes `parentMesh` & `parentMesh.concerningMesh`
101
+ // * `concerningMesh` is having the missing material flag
102
+ // * Both `parentMesh` & `concerningMesh` are disabled
103
+ // * `parentMesh` is enabled -> material should **not** be created as `concerningMesh` is still disabled
104
+ // * `parentMesh` is disabled
105
+ // * `concerningMesh` is enabled -> material should **not** be created as `concerningMesh` is still invisible
106
+ // because its `parentMesh` is ATM disabled
107
+ // * `parentMesh` & `concerningMesh` are both enable
108
+ // -> material should be created as `concerningMesh` is now actually visible but it isn't, as all observers were
109
+ // only fired once 🔥
110
+ //
111
+ // However: Using `add` instead of `addOnce` requires rather complicated manual clean up work...
112
+ // add observer. needed only once per node, hence addOnce()
113
+ node.onEnabledStateChangedObservable.addOnce(getMaterialPostLoadObserver(currNode, concerningNode));
114
+ // console.log('## observer set on: ' + meshOrInstance.name);
115
+ currNode = currNode.parent;
116
+ }
117
+ };
118
+ /**
119
+ * Look up the provided materials (see library import) and create and return one if found.
120
+ * @param materialId BabylonJs material-id. E.g. 'concrete".
121
+ * @param scene BabylonJs scene
122
+ * @returns PBRMaterial | null
123
+ */
124
+ export var getMaterialFromCbnAssets = function (materialId, scene) {
125
+ var _a;
126
+ var materialDefinition = (_a = window.Cbn) === null || _a === void 0 ? void 0 : _a.Assets.getMaterial(materialId);
127
+ // The generic `Material.Parse` actually returns a more specific material like `BABYLON.StandardMaterial`,
128
+ // `BABYLON.PBRMaterial` or stuff like `BABYLON.PBRMetallicRoughnessMaterial` etc. based on the given `customType`
129
+ // within the material JSON definition
130
+ var material = materialDefinition && Material.Parse(materialDefinition, scene, '');
131
+ return material || null;
132
+ };
133
+ export { getCustomCbnBabylonLoaderPlugin, getMaterialPostLoadObserver, missingMaterialMetadataName, addMissingMaterialObserver, };
134
+ //# sourceMappingURL=sceneLoaderHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sceneLoaderHelper.js","sourceRoot":"","sources":["../../../../src/api/util/sceneLoaderHelper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Creates a random uuidv4.
3
+ */
4
+ declare const uuidv4: () => any;
5
+ /**
6
+ * Converts a string from camel case to snake case.
7
+ */
8
+ declare const camelToSnakeCase: (str: string) => string;
9
+ export { uuidv4, camelToSnakeCase };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Creates a random uuidv4.
3
+ */
4
+ var uuidv4 = function () {
5
+ // @ts-ignore
6
+ return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {
7
+ return (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16);
8
+ });
9
+ };
10
+ /**
11
+ * Converts a string from camel case to snake case.
12
+ */
13
+ var camelToSnakeCase = function (str) {
14
+ return str
15
+ .replace(/([A-Z])/g, ' $1')
16
+ .trim()
17
+ .split(' ')
18
+ .join('_')
19
+ .toLowerCase();
20
+ };
21
+ export { uuidv4, camelToSnakeCase };
22
+ //# sourceMappingURL=stringHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringHelper.js","sourceRoot":"","sources":["../../../../src/api/util/stringHelper.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,IAAM,MAAM,GAAG;IACb,aAAa;IACb,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAA,CAAC;QAC7D,OAAA,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IAAnF,CAAmF,CACpF,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,IAAM,gBAAgB,GAAG,UAAU,GAAW;IAC5C,OAAO,GAAG;SACP,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,IAAI,EAAE;SACN,KAAK,CAAC,GAAG,CAAC;SACV,IAAI,CAAC,GAAG,CAAC;SACT,WAAW,EAAE,CAAC;AACnB,CAAC,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Mesh } from '@babylonjs/core/Meshes/mesh';
2
+ /**
3
+ * Find out if a mesh is part of a list of excluded geometry
4
+ * @param mesh BJS mesh
5
+ * @param list list of excluded geometry
6
+ * @returns boolean based on whether mesh (or one of its parents) was found in list
7
+ */
8
+ declare const isMeshIncludedInExclusionList: (mesh: Mesh, list: ExcludedGeometryList) => boolean;
9
+ export { isMeshIncludedInExclusionList };
@@ -0,0 +1,46 @@
1
+ import { Mesh } from '@babylonjs/core/Meshes/mesh';
2
+ import { Variant } from '../classes/variant';
3
+ import { VariantInstance } from '../classes/variantInstance';
4
+ import { Element } from '../classes/element';
5
+ /**
6
+ * Find out if a mesh is part of a list of excluded geometry
7
+ * @param mesh BJS mesh
8
+ * @param list list of excluded geometry
9
+ * @returns boolean based on whether mesh (or one of its parents) was found in list
10
+ */
11
+ var isMeshIncludedInExclusionList = function (mesh, list) {
12
+ var checkMesh = function (inputMesh, meshToCheck) {
13
+ return inputMesh.uniqueId === meshToCheck.uniqueId;
14
+ };
15
+ var checkElement = function (inputEl, meshToCheck) {
16
+ return inputEl.meshesFlat.some(function (m) { return checkMesh(m, meshToCheck); });
17
+ };
18
+ var checkVariant = function (inputVariant, meshToCheck) {
19
+ return inputVariant.elements.some(function (el) { return checkElement(el, meshToCheck); });
20
+ };
21
+ var checkVariantInstance = function (inputVarInst, meshToCheck) {
22
+ return inputVarInst.variant.elements.some(function (el) { return checkElement(el, meshToCheck); });
23
+ };
24
+ var check = function (geometryToExclude, mesh) {
25
+ if (geometryToExclude instanceof VariantInstance) {
26
+ return checkVariantInstance(geometryToExclude, mesh);
27
+ }
28
+ if (geometryToExclude instanceof Variant) {
29
+ return checkVariant(geometryToExclude, mesh);
30
+ }
31
+ if (geometryToExclude instanceof Element) {
32
+ return checkElement(geometryToExclude, mesh);
33
+ }
34
+ if (geometryToExclude instanceof Mesh) {
35
+ return checkMesh(geometryToExclude, mesh);
36
+ }
37
+ return false;
38
+ };
39
+ var isExcluded = list.some(function (geometryToExclude) { return check(geometryToExclude, mesh); });
40
+ if (!isExcluded && mesh.parent instanceof Mesh) {
41
+ isExcluded = isMeshIncludedInExclusionList(mesh.parent, list);
42
+ }
43
+ return isExcluded;
44
+ };
45
+ export { isMeshIncludedInExclusionList };
46
+ //# sourceMappingURL=structureHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structureHelper.js","sourceRoot":"","sources":["../../../../src/api/util/structureHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;;;;GAKG;AACH,IAAM,6BAA6B,GAAG,UAAU,IAAU,EAAE,IAA0B;IACpF,IAAM,SAAS,GAAG,UAAC,SAAe,EAAE,WAAiB;QACnD,OAAO,SAAS,CAAC,QAAQ,KAAK,WAAW,CAAC,QAAQ,CAAC;IACrD,CAAC,CAAC;IACF,IAAM,YAAY,GAAG,UAAC,OAAgB,EAAE,WAAiB;QACvD,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,EAAzB,CAAyB,CAAC,CAAC;IACjE,CAAC,CAAC;IACF,IAAM,YAAY,GAAG,UAAC,YAAqB,EAAE,WAAiB;QAC5D,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,YAAY,CAAC,EAAE,EAAE,WAAW,CAAC,EAA7B,CAA6B,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,IAAM,oBAAoB,GAAG,UAAC,YAA6B,EAAE,WAAiB;QAC5E,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,YAAY,CAAC,EAAE,EAAE,WAAW,CAAC,EAA7B,CAA6B,CAAC,CAAC;IACjF,CAAC,CAAC;IACF,IAAM,KAAK,GAAG,UAAC,iBAAmC,EAAE,IAAU;QAC5D,IAAI,iBAAiB,YAAY,eAAe,EAAE;YAChD,OAAO,oBAAoB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SACtD;QACD,IAAI,iBAAiB,YAAY,OAAO,EAAE;YACxC,OAAO,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAC9C;QACD,IAAI,iBAAiB,YAAY,OAAO,EAAE;YACxC,OAAO,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAC9C;QACD,IAAI,iBAAiB,YAAY,IAAI,EAAE;YACrC,OAAO,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAC3C;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAA,iBAAiB,IAAI,OAAA,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAA9B,CAA8B,CAAC,CAAC;IAChF,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,YAAY,IAAI,EAAE;QAC9C,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC/D;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "version": "5.1.0-rc3"
3
+ }
@@ -0,0 +1,49 @@
1
+ /// <reference path="api/util/globalTypes.d.ts" />
2
+ import { Animation as BabylonAnimation } from '@babylonjs/core/Animations/animation';
3
+ import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera';
4
+ import { Engine } from '@babylonjs/core/Engines/engine';
5
+ import { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';
6
+ import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight';
7
+ import { Material } from '@babylonjs/core/Materials/material';
8
+ import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
9
+ import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
10
+ import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
11
+ import { DynamicTexture } from '@babylonjs/core/Materials/Textures/dynamicTexture';
12
+ import { Texture } from '@babylonjs/core/Materials/Textures/texture';
13
+ import { Color3, Color4 } from '@babylonjs/core/Maths/math.color';
14
+ import { Vector3 } from '@babylonjs/core/Maths/math.vector';
15
+ import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
16
+ import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh';
17
+ import { Mesh } from '@babylonjs/core/Meshes/mesh';
18
+ import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
19
+ import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
20
+ import { Node } from '@babylonjs/core/node';
21
+ /**
22
+ * Without explicitly importing the "BoundingBoxRenderer", we're getting "scene.getBoundingBoxRenderer is undefined"
23
+ * errors when creating HighlightLayer instances. Not sure why but those errors only happen when using the built
24
+ * version of the viewer (e.g. when pulling it from NPM etc.)...
25
+ */
26
+ import '@babylonjs/core/Rendering/boundingBoxRenderer';
27
+ import { Scene } from '@babylonjs/core/scene';
28
+ import { Parameterizable } from './api/classes/parameterizable';
29
+ import { VariantParameterizable } from './api/classes/variantParameterizable';
30
+ import { EventEmitter } from 'eventemitter3';
31
+ import { Element } from './api/classes/element';
32
+ import { emitter, Event } from './api/classes/event';
33
+ import { EventBroadcaster } from './api/classes/eventBroadcaster';
34
+ import { Parameter } from './api/classes/parameter';
35
+ import { ParameterObservable } from './api/classes/parameterObservable';
36
+ import { PlacementAnimation } from './api/classes/placementAnimation';
37
+ import { Variant } from './api/classes/variant';
38
+ import { VariantInstance } from './api/classes/variantInstance';
39
+ import { Viewer } from './api/classes/viewer';
40
+ import { ViewerLight } from './api/classes/viewerLight';
41
+ import { AnimationManager } from './api/manager/animationManager';
42
+ import { SceneManager } from './api/manager/sceneManager';
43
+ import { VariantInstanceManager } from './api/manager/variantInstanceManager';
44
+ import { GltfExportManager } from './api/manager/gltfExportManager';
45
+ import * as BabylonHelper from './api/util/babylonHelper';
46
+ /**
47
+ * Expose some frequently used babylon modules by our consumers.
48
+ */
49
+ export { AnimationManager, Variant, VariantInstanceManager, Viewer, ParameterObservable, Parameterizable, VariantParameterizable, ViewerLight, emitter as Emitter, EventEmitter, Event, Parameter, VariantInstance, Color3, Color4, Vector3, AbstractMesh, InstancedMesh, Mesh, TransformNode, Node, Material, PBRMaterial, StandardMaterial, Scene, Engine, ArcRotateCamera, DynamicTexture, CubeTexture, MeshBuilder, Texture, BabylonAnimation, HemisphericLight, DirectionalLight, Element, EventBroadcaster, SceneManager, PlacementAnimation, BabylonHelper, GltfExportManager, };
@@ -0,0 +1,51 @@
1
+ /// <reference path="api/util/globalTypes.ts" />
2
+ /// <reference types="gsap" />
3
+ import { Animation as BabylonAnimation } from '@babylonjs/core/Animations/animation';
4
+ import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera';
5
+ import { Engine } from '@babylonjs/core/Engines/engine';
6
+ import { DirectionalLight } from '@babylonjs/core/Lights/directionalLight';
7
+ import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight';
8
+ import { Material } from '@babylonjs/core/Materials/material';
9
+ import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
10
+ import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
11
+ import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
12
+ import { DynamicTexture } from '@babylonjs/core/Materials/Textures/dynamicTexture';
13
+ import { Texture } from '@babylonjs/core/Materials/Textures/texture';
14
+ import { Color3, Color4 } from '@babylonjs/core/Maths/math.color';
15
+ import { Vector3 } from '@babylonjs/core/Maths/math.vector';
16
+ import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
17
+ import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh';
18
+ import { Mesh } from '@babylonjs/core/Meshes/mesh';
19
+ import { MeshBuilder } from '@babylonjs/core/Meshes/meshBuilder';
20
+ import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
21
+ import { Node } from '@babylonjs/core/node';
22
+ /**
23
+ * Without explicitly importing the "BoundingBoxRenderer", we're getting "scene.getBoundingBoxRenderer is undefined"
24
+ * errors when creating HighlightLayer instances. Not sure why but those errors only happen when using the built
25
+ * version of the viewer (e.g. when pulling it from NPM etc.)...
26
+ */
27
+ import '@babylonjs/core/Rendering/boundingBoxRenderer';
28
+ import { Scene } from '@babylonjs/core/scene';
29
+ import { Parameterizable } from './api/classes/parameterizable';
30
+ import { VariantParameterizable } from './api/classes/variantParameterizable';
31
+ import { EventEmitter } from 'eventemitter3';
32
+ import { Element } from './api/classes/element';
33
+ import { emitter, Event } from './api/classes/event';
34
+ import { EventBroadcaster } from './api/classes/eventBroadcaster';
35
+ import { Parameter } from './api/classes/parameter';
36
+ import { ParameterObservable } from './api/classes/parameterObservable';
37
+ import { PlacementAnimation } from './api/classes/placementAnimation';
38
+ import { Variant } from './api/classes/variant';
39
+ import { VariantInstance } from './api/classes/variantInstance';
40
+ import { Viewer } from './api/classes/viewer';
41
+ import { ViewerLight } from './api/classes/viewerLight';
42
+ import { AnimationManager } from './api/manager/animationManager';
43
+ import { SceneManager } from './api/manager/sceneManager';
44
+ import { VariantInstanceManager } from './api/manager/variantInstanceManager';
45
+ import { GltfExportManager } from './api/manager/gltfExportManager';
46
+ import * as BabylonHelper from './api/util/babylonHelper';
47
+ /**
48
+ * Expose some frequently used babylon modules by our consumers.
49
+ */
50
+ export { AnimationManager, Variant, VariantInstanceManager, Viewer, ParameterObservable, Parameterizable, VariantParameterizable, ViewerLight, emitter as Emitter, EventEmitter, Event, Parameter, VariantInstance, Color3, Color4, Vector3, AbstractMesh, InstancedMesh, Mesh, TransformNode, Node, Material, PBRMaterial, StandardMaterial, Scene, Engine, ArcRotateCamera, DynamicTexture, CubeTexture, MeshBuilder, Texture, BabylonAnimation, HemisphericLight, DirectionalLight, Element, EventBroadcaster, SceneManager, PlacementAnimation, BabylonHelper, GltfExportManager, };
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,8BAA8B;AAE9B,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,4CAA4C,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C;;;;GAIG;AACH,OAAO,+CAA+C,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAE1D;;GAEG;AACH,OAAO,EACL,gBAAgB,EAChB,OAAO,EACP,sBAAsB,EACtB,MAAM,EACN,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,OAAO,IAAI,OAAO,EAClB,YAAY,EACZ,KAAK,EACL,SAAS,EACT,eAAe,EACf,MAAM,EACN,MAAM,EACN,OAAO,EACP,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,KAAK,EACL,MAAM,EACN,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GAClB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@combeenation/3d-viewer",
3
3
  "description": "Combeenation 3D Viewer",
4
- "version": "5.1.0-rc3",
4
+ "version": "5.1.0-rc4",
5
5
  "homepage": "https://github.com/Combeenation/3d-viewer#readme",
6
6
  "keywords": [],
7
7
  "author": "",
@@ -39,14 +39,14 @@
39
39
  "pub-alpha": "npm run dist-cjs && npm publish --tag alpha",
40
40
  "pub-beta": "npm run dist-cjs && npm publish --tag beta",
41
41
  "pub-rc": "npm run dist-cjs && npm publish --tag rc",
42
- "pack": "npm run dist-cjs && npm pack",
42
+ "pack": "npm run dist-cjs && npm pack --pack-destination=\"/mnt/c/Data/dev/custom-js/MichaelTest/PbrAssetTest\"",
43
43
  "format": "prettier --write ."
44
44
  },
45
45
  "dependencies": {
46
- "@babylonjs/core": "5.6.0",
47
- "@babylonjs/loaders": "5.6.0",
48
- "@babylonjs/materials": "5.6.0",
49
- "@babylonjs/serializers": "5.6.0",
46
+ "@babylonjs/core": "5.21.0",
47
+ "@babylonjs/loaders": "5.21.0",
48
+ "@babylonjs/materials": "5.21.0",
49
+ "@babylonjs/serializers": "5.21.0",
50
50
  "eventemitter3": "^4.0.0",
51
51
  "gsap": "^3.5.1",
52
52
  "lodash-es": "^4.17.15"
@@ -36,9 +36,7 @@ import { VariantParameterizable } from './../classes/variantParameterizable';
36
36
  import { DottedPath } from './dottedPath';
37
37
  import { Parameter } from './parameter';
38
38
  import { Variant } from './variant';
39
- import { getMaterialPostLoadObserver, missingMaterialMetadataName } from '../util/sceneLoaderHelper';
40
- import { Nullable } from '@babylonjs/core/types';
41
- import { Node as BjsNode } from '@babylonjs/core/node'; //! overload DOM API Node due to name-clash with BJS
39
+ import { addMissingMaterialObserver } from '../util/sceneLoaderHelper';
42
40
 
43
41
  /**
44
42
  * An {@link Element} of a {@link Variant}. Acts as a container for diverse definitions. Lives only in the context of a
@@ -374,24 +372,7 @@ export class Element extends VariantParameterizable {
374
372
  */
375
373
  protected addMissingMaterialObservers() {
376
374
  for (const abstractMesh of this.abstractMeshesFlat) {
377
- // set the concerning mesh, i.e. the mesh the observer should check for missing material.
378
- // for instances, we want the sourcemesh here.
379
- const concerningMesh = abstractMesh instanceof InstancedMesh ? abstractMesh.sourceMesh : (abstractMesh as Mesh);
380
-
381
- // observer is pointless if concerning mesh has no missing material
382
- if (!has(concerningMesh.metadata, missingMaterialMetadataName)) continue;
383
-
384
- // for each of our AbstractMeshes, set an observer on the AbstractMesh itself,
385
- // but also on all of its parents.
386
- let currNode: Nullable<BjsNode> = abstractMesh as BjsNode;
387
- while (currNode) {
388
- // add observer. needed only once per node, hence addOnce()
389
- abstractMesh.onEnabledStateChangedObservable.addOnce(
390
- getMaterialPostLoadObserver(currNode as AbstractMesh, concerningMesh)
391
- );
392
- // console.log('## observer set on: ' + meshOrInstance.name);
393
- currNode = currNode.parent;
394
- }
375
+ addMissingMaterialObserver(abstractMesh);
395
376
  }
396
377
  }
397
378
 
@@ -458,7 +439,7 @@ export class Element extends VariantParameterizable {
458
439
  ]);
459
440
  this._parameterObservers.set(Parameter.MATERIAL, [
460
441
  async (element: Element, oldValue: ParameterValue, newValue: ParameterValue) => {
461
- const material = element.variant.getMaterial(newValue.toString());
442
+ const materialName = newValue.toString();
462
443
  element.nodes.forEach(node => {
463
444
  assertTransformNode(node, (node: AbstractMesh) => {
464
445
  if (node instanceof InstancedMesh) {
@@ -469,7 +450,7 @@ export class Element extends VariantParameterizable {
469
450
  );
470
451
  }
471
452
  });
472
- setMaterial(node, material);
453
+ setMaterial(element.variant, node, materialName);
473
454
  });
474
455
  },
475
456
  ]);
@@ -728,9 +728,9 @@ export class Variant extends Parameterizable {
728
728
  protected async commitParameterToElements(parameter: string, value: ParameterValue): Promise<Variant> {
729
729
  const promises = [];
730
730
  for (const element of this.elements) {
731
- const elementVisibleParamPath = DottedPath.create([element.name, Parameter.VISIBLE]).toString();
732
- const elementIsHiddenViaParams = this.inheritedParameters[elementVisibleParamPath] === false;
731
+ const paramShowsElement = Parameter.VISIBLE === parameter && value;
733
732
 
733
+ // Fixes https://combeenation.youtrack.cloud/issue/CB-7773
734
734
  // Don't enable/show the variants element if it is explicitly hidden via its element parameters.
735
735
  // E.g. via spec:
736
736
  // ```
@@ -747,7 +747,26 @@ export class Variant extends Parameterizable {
747
747
  // }
748
748
  // }
749
749
  // ```
750
- if (Parameter.VISIBLE === parameter && value && elementIsHiddenViaParams) continue;
750
+ const elementVisibleParamPath = DottedPath.create([element.name, Parameter.VISIBLE]).toString();
751
+ const elementIsHiddenViaParams = this.inheritedParameters[elementVisibleParamPath] === false;
752
+ if (paramShowsElement && elementIsHiddenViaParams) continue;
753
+
754
+ // To discuss: Is this a viable solution or is it too hacky to apply the elements material param, when the param
755
+ // at hand is actually the visible param?
756
+ // Fixes https://combeenation.youtrack.cloud/issue/CB-7809
757
+ // Apply element material before showing the element to prevent loading of the elements "original" material which
758
+ // is never shown when "overwritten" by elements material param.
759
+ const elementMaterialParamPath = DottedPath.create([element.name, Parameter.MATERIAL]).toString();
760
+ const elementMaterialParamValue = this.inheritedParameters[elementMaterialParamPath];
761
+ if (paramShowsElement && elementMaterialParamValue) {
762
+ // To discuss: Should we rather use `this.commitParametersToElements` here?
763
+ // I'm not really sure about the actual differences, both seem to do the job 🤷‍♂️
764
+ // To discuss: Should we actively `await` this (as is) or should we also push the resulting promise into the
765
+ // `promises` array as dome some lines below?
766
+ // I wasn't sure whether not awaiting this could result in "not guaranteed application order" of
767
+ // new visibility & material param value...
768
+ await element.commitParameter(Parameter.MATERIAL, elementMaterialParamValue);
769
+ }
751
770
 
752
771
  promises.push(element.commitParameter(parameter, value));
753
772
  }
@@ -21,7 +21,7 @@ import { Nullable } from '@babylonjs/core/types';
21
21
  import { defaultEnvHelperColor, defaultSceneClearColor } from '../internal/sceneSetup';
22
22
  import { cloneDeep, get, has, merge } from 'lodash-es';
23
23
  import { DottedPath } from '../classes/dottedPath';
24
- import { missingMaterialMetadataName } from './sceneLoaderHelper';
24
+ import { addMissingMaterialObserver, missingMaterialMetadataName } from './sceneLoaderHelper';
25
25
 
26
26
  const backgroundDomeName = 'BackgroundDome_ViewerGenerated';
27
27
  const envHelperMetadataName = 'viewerEnvHelper';
@@ -362,18 +362,28 @@ const changeEnvironment = function (scene: Scene, envDef: EnvironmentDefinition)
362
362
 
363
363
  /**
364
364
  * @param node
365
- * @param material
365
+ * @param materialName
366
366
  * @param deep
367
367
  */
368
- const setMaterial = function (node: TransformNode, material: Material, deep: boolean = true) {
368
+ const setMaterial = function (variant: Variant, node: TransformNode, materialName: string, deep: boolean = true) {
369
369
  if (node instanceof AbstractMesh) {
370
- node.material = material;
371
- if (has(node.metadata, missingMaterialMetadataName)) {
372
- delete node.metadata[missingMaterialMetadataName];
370
+ const hasMissingMaterial = has(node.metadata, missingMaterialMetadataName);
371
+ if (node.isEnabled()) {
372
+ node.material = variant.getMaterial(materialName);
373
+ if (hasMissingMaterial) {
374
+ delete node.metadata[missingMaterialMetadataName];
375
+ }
376
+ } else {
377
+ injectNodeMetadata(node, { [missingMaterialMetadataName]: materialName }, false);
378
+
379
+ // If it already had the missing material flag before, there already exists an observer...
380
+ if (!hasMissingMaterial) {
381
+ addMissingMaterialObserver(node);
382
+ }
373
383
  }
374
384
  }
375
385
  if (deep) {
376
- node.getChildTransformNodes(true).forEach(child => setMaterial(child, material, deep));
386
+ node.getChildTransformNodes(true).forEach(child => setMaterial(variant, child, materialName, deep));
377
387
  }
378
388
  };
379
389