@babylonjs/node-geometry-editor 6.17.0 → 6.17.1

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.
@@ -55223,7 +55223,7 @@ __webpack_require__.r(__webpack_exports__);
55223
55223
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
55224
55224
  /* harmony export */ BlockTools: () => (/* binding */ BlockTools)
55225
55225
  /* harmony export */ });
55226
- /* harmony import */ var core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core/Meshes/Node/Blocks/conditionBlock */ "core/Misc/observable");
55226
+ /* harmony import */ var core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core/Meshes/Node/Blocks/geometryInfoBlock */ "core/Misc/observable");
55227
55227
  /* harmony import */ var core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__);
55228
55228
 
55229
55229
 
@@ -55269,12 +55269,18 @@ __webpack_require__.r(__webpack_exports__);
55269
55269
 
55270
55270
 
55271
55271
 
55272
+
55273
+
55272
55274
 
55273
55275
 
55274
55276
 
55275
55277
  class BlockTools {
55276
55278
  static GetBlockFromString(data) {
55277
55279
  switch (data) {
55280
+ case "GeometryInfoBlock":
55281
+ return new core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__.GeometryInfoBlock("Geometry Info");
55282
+ case "CollectionBlock":
55283
+ return new core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__.GeometryCollectionBlock("Collection");
55278
55284
  case "OptimizeBlock":
55279
55285
  return new core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__.GeometryOptimizeBlock("Optimize");
55280
55286
  case "NullBlock":
@@ -55462,6 +55468,11 @@ class BlockTools {
55462
55468
  block.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__.NodeGeometryContextualSources.GeometryID;
55463
55469
  return block;
55464
55470
  }
55471
+ case "CollectionIDBlock": {
55472
+ const block = new core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__.GeometryInputBlock("Collection ID");
55473
+ block.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__.NodeGeometryContextualSources.CollectionID;
55474
+ return block;
55475
+ }
55465
55476
  case "FaceIDBlock": {
55466
55477
  const block = new core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__.GeometryInputBlock("Face ID");
55467
55478
  block.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_0__.NodeGeometryContextualSources.FaceID;
@@ -55828,6 +55839,7 @@ class NodeListComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Component {
55828
55839
  "VertexIDBlock",
55829
55840
  "FaceIDBlock",
55830
55841
  "GeometryIDBlock",
55842
+ "CollectionIDBlock",
55831
55843
  ],
55832
55844
  Logical: ["EqualBlock", "NotEqualBlock", "LessThanBlock", "LessOrEqualBlock", "GreaterThanBlock", "GreaterOrEqualBlock", "XorBlock", "OrBlock", "AndBlock"],
55833
55845
  Math__Standard: [
@@ -55864,7 +55876,7 @@ class NodeListComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Component {
55864
55876
  Math__Vector: ["TransformBlock", "VectorConverterBlock", "NormalizeBlock"],
55865
55877
  Matrices: ["RotationXBlock", "RotationYBlock", "RotationZBlock", "ScalingBlock", "TranslationBlock", "AlignBlock"],
55866
55878
  Instances: ["InstantiateOnVerticesBlock", "InstantiateOnFacesBlock", "InstantiateOnVolumeBlock"],
55867
- Misc: ["ElbowBlock", "DebugBlock", "TeleportInBlock", "TeleportOutBlock"],
55879
+ Misc: ["ElbowBlock", "DebugBlock", "TeleportInBlock", "TeleportOutBlock", "GeometryInfoBlock"],
55868
55880
  Updates: [
55869
55881
  "SetColorsBlock",
55870
55882
  "SetNormalsBlock",
@@ -55873,6 +55885,7 @@ class NodeListComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Component {
55873
55885
  "SetUVsBlock",
55874
55886
  "SetMaterialIDBlock",
55875
55887
  "MergeBlock",
55888
+ "CollectionBlock",
55876
55889
  "ComputeNormalsBlock",
55877
55890
  "OptimizeBlock",
55878
55891
  ],
@@ -55946,6 +55959,7 @@ NodeListComponent._Tooltips = {
55946
55959
  VertexIDBlock: "Contextual value representing the vertex index of the current vertex of the active geometry",
55947
55960
  FaceIDBlock: "Contextual value representing the face index of the current face of the active geometry",
55948
55961
  GeometryIDBlock: "Contextual value representing the identifier of the current active geometry",
55962
+ CollectionIDBlock: "Contextual value representing the collection ID associated with the current active geometry",
55949
55963
  EqualBlock: "Conditional block set to Equal",
55950
55964
  NotEqualBlock: "Conditional block set to NotEqual",
55951
55965
  LessThanBlock: "Conditional block set to LessThan",
@@ -56011,6 +56025,7 @@ NodeListComponent._Tooltips = {
56011
56025
  GeometryOutputBlock: "Output block used to gather the final geometry",
56012
56026
  NullBlock: "Generate an empty geometry",
56013
56027
  OptimizeBlock: "Eliminate vertices that share positions with another vertex",
56028
+ GeometryInfoBlock: "Provides information about a geometry",
56014
56029
  };
56015
56030
 
56016
56031
 
@@ -56873,7 +56888,7 @@ class PropertyTabComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Component
56873
56888
  core_Misc_tools__WEBPACK_IMPORTED_MODULE_5__.DataStorage.WriteBoolean("UseNM", false);
56874
56889
  this.props.globalState.onPreviewModeChanged.notifyObservers();
56875
56890
  this.forceUpdate();
56876
- } }))] }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_2__.LineContainerComponent, { title: "FILE", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_sharedComponents_fileButtonLineComponent__WEBPACK_IMPORTED_MODULE_4__.FileButtonLineComponent, { label: "Load", onClick: (file) => this.load(file), accept: ".json" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_buttonLineComponent__WEBPACK_IMPORTED_MODULE_22__.ButtonLineComponent, { label: "Save", onClick: () => {
56891
+ } }))] }), this.props.globalState.resyncHandler && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_2__.LineContainerComponent, { title: "SYNC", children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_buttonLineComponent__WEBPACK_IMPORTED_MODULE_22__.ButtonLineComponent, { label: "Update mesh in scene", onClick: () => this.props.globalState.resyncHandler() }) })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_2__.LineContainerComponent, { title: "FILE", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_sharedComponents_fileButtonLineComponent__WEBPACK_IMPORTED_MODULE_4__.FileButtonLineComponent, { label: "Load", onClick: (file) => this.load(file), accept: ".json" }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_buttonLineComponent__WEBPACK_IMPORTED_MODULE_22__.ButtonLineComponent, { label: "Save", onClick: () => {
56877
56892
  this.save();
56878
56893
  } }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_buttonLineComponent__WEBPACK_IMPORTED_MODULE_22__.ButtonLineComponent, { label: "Generate code", onClick: () => {
56879
56894
  shared_ui_components_stringTools__WEBPACK_IMPORTED_MODULE_3__.StringTools.DownloadAsFile(this.props.globalState.hostDocument, this.props.globalState.nodeGeometry.generateCode(), "code.txt");
@@ -57844,15 +57859,16 @@ __webpack_require__.r(__webpack_exports__);
57844
57859
 
57845
57860
 
57846
57861
 
57862
+ const predicate = (b) => !!b.getExecutionIndex;
57847
57863
  class InputDisplayManager {
57864
+ constructor() {
57865
+ this._hasHighlights = false;
57866
+ }
57848
57867
  getHeaderClass(nodeData) {
57849
57868
  const inputBlock = nodeData.data;
57850
57869
  if (inputBlock.isContextual) {
57851
57870
  return _inputDisplayManager_modules_scss__WEBPACK_IMPORTED_MODULE_1__["default"]["contextual"];
57852
57871
  }
57853
- if (inputBlock.visibleInInspector) {
57854
- return _inputDisplayManager_modules_scss__WEBPACK_IMPORTED_MODULE_1__["default"]["inspector"];
57855
- }
57856
57872
  return "";
57857
57873
  }
57858
57874
  getHeaderText(nodeData) {
@@ -57891,6 +57907,9 @@ class InputDisplayManager {
57891
57907
  case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_2__.NodeGeometryContextualSources.GeometryID:
57892
57908
  value = "GeometryID";
57893
57909
  break;
57910
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_2__.NodeGeometryContextualSources.CollectionID:
57911
+ value = "CollectionID";
57912
+ break;
57894
57913
  case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_2__.NodeGeometryContextualSources.FaceID:
57895
57914
  value = "FaceID";
57896
57915
  break;
@@ -57948,6 +57967,45 @@ class InputDisplayManager {
57948
57967
  contentArea.innerHTML = value;
57949
57968
  contentArea.classList.add(_inputDisplayManager_modules_scss__WEBPACK_IMPORTED_MODULE_1__["default"]["input-block"]);
57950
57969
  }
57970
+ onSelectionChanged(nodeData, selectedData, manager) {
57971
+ const block = nodeData.data;
57972
+ if (!block.isContextual) {
57973
+ return;
57974
+ }
57975
+ const contextGenerationBlock = block.getDescendantOfPredicate(predicate);
57976
+ if (selectedData !== nodeData) {
57977
+ if (this._hasHighlights) {
57978
+ let removeHighlight;
57979
+ if (selectedData && selectedData.data.getClassName() === "GeometryInputBlock") {
57980
+ const otherSelection = selectedData.data;
57981
+ const otherContextGenerationBlock = otherSelection.getDescendantOfPredicate(predicate);
57982
+ removeHighlight = contextGenerationBlock !== otherContextGenerationBlock;
57983
+ }
57984
+ else {
57985
+ removeHighlight = true;
57986
+ }
57987
+ if (removeHighlight) {
57988
+ manager.onHighlightNodeObservable.notifyObservers({ data: contextGenerationBlock, active: false });
57989
+ }
57990
+ this._hasHighlights = false;
57991
+ }
57992
+ return;
57993
+ }
57994
+ if (contextGenerationBlock) {
57995
+ manager.onHighlightNodeObservable.notifyObservers({ data: contextGenerationBlock, active: true });
57996
+ this._hasHighlights = true;
57997
+ }
57998
+ }
57999
+ onDispose(nodeData, manager) {
58000
+ const block = nodeData.data;
58001
+ if (!block.isContextual) {
58002
+ return;
58003
+ }
58004
+ const contextGenerationBlock = block.getDescendantOfPredicate(predicate);
58005
+ if (contextGenerationBlock) {
58006
+ manager.onHighlightNodeObservable.notifyObservers({ data: contextGenerationBlock, active: false });
58007
+ }
58008
+ }
57951
58009
  }
57952
58010
 
57953
58011
 
@@ -58485,13 +58543,11 @@ __webpack_require__.r(__webpack_exports__);
58485
58543
  /* harmony import */ var _sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../sharedComponents/lineContainerComponent */ "../../../tools/nodeGeometryEditor/dist/sharedComponents/lineContainerComponent.js");
58486
58544
  /* harmony import */ var _genericNodePropertyComponent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./genericNodePropertyComponent */ "../../../tools/nodeGeometryEditor/dist/graphSystem/properties/genericNodePropertyComponent.js");
58487
58545
  /* harmony import */ var _sharedComponents_checkBoxLineComponent__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../sharedComponents/checkBoxLineComponent */ "../../../tools/nodeGeometryEditor/dist/sharedComponents/checkBoxLineComponent.js");
58488
- /* harmony import */ var shared_ui_components_lines_textInputLineComponent__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! shared-ui-components/lines/textInputLineComponent */ "../../../dev/sharedUiComponents/dist/lines/textInputLineComponent.js");
58489
- /* harmony import */ var shared_ui_components_lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! shared-ui-components/lines/optionsLineComponent */ "../../../dev/sharedUiComponents/dist/lines/optionsLineComponent.js");
58490
- /* harmony import */ var shared_ui_components_lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! shared-ui-components/lines/floatLineComponent */ "../../../dev/sharedUiComponents/dist/lines/floatLineComponent.js");
58491
- /* harmony import */ var shared_ui_components_lines_sliderLineComponent__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! shared-ui-components/lines/sliderLineComponent */ "../../../dev/sharedUiComponents/dist/lines/sliderLineComponent.js");
58492
- /* harmony import */ var core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core/Meshes/Node/Enums/nodeGeometryContextualSources */ "core/Misc/observable");
58493
- /* harmony import */ var core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__);
58494
-
58546
+ /* harmony import */ var shared_ui_components_lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! shared-ui-components/lines/optionsLineComponent */ "../../../dev/sharedUiComponents/dist/lines/optionsLineComponent.js");
58547
+ /* harmony import */ var shared_ui_components_lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! shared-ui-components/lines/floatLineComponent */ "../../../dev/sharedUiComponents/dist/lines/floatLineComponent.js");
58548
+ /* harmony import */ var shared_ui_components_lines_sliderLineComponent__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! shared-ui-components/lines/sliderLineComponent */ "../../../dev/sharedUiComponents/dist/lines/sliderLineComponent.js");
58549
+ /* harmony import */ var core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core/Meshes/Node/Enums/nodeGeometryContextualSources */ "core/Misc/observable");
58550
+ /* harmony import */ var core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__);
58495
58551
 
58496
58552
 
58497
58553
 
@@ -58527,29 +58583,29 @@ class InputPropertyTabComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Compo
58527
58583
  renderValue(globalState) {
58528
58584
  const inputBlock = this.props.nodeData.data;
58529
58585
  switch (inputBlock.type) {
58530
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Int:
58531
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Float: {
58586
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Int:
58587
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Float: {
58532
58588
  const cantDisplaySlider = isNaN(inputBlock.min) || isNaN(inputBlock.max) || inputBlock.min === inputBlock.max;
58533
- const isIntger = inputBlock.type === core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Int;
58534
- return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_11__.FloatLineComponent, { lockObject: this.props.stateManager.lockObject, label: "Min", target: inputBlock, isInteger: isIntger, propertyName: "min", onChange: () => {
58589
+ const isIntger = inputBlock.type === core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Int;
58590
+ return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_10__.FloatLineComponent, { lockObject: this.props.stateManager.lockObject, label: "Min", target: inputBlock, isInteger: isIntger, propertyName: "min", onChange: () => {
58535
58591
  if (inputBlock.value < inputBlock.min) {
58536
58592
  inputBlock.value = inputBlock.min;
58537
58593
  }
58538
58594
  this.forceUpdate();
58539
- } }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_11__.FloatLineComponent, { lockObject: this.props.stateManager.lockObject, label: "Max", target: inputBlock, isInteger: isIntger, propertyName: "max", onChange: () => {
58595
+ } }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_floatLineComponent__WEBPACK_IMPORTED_MODULE_10__.FloatLineComponent, { lockObject: this.props.stateManager.lockObject, label: "Max", target: inputBlock, isInteger: isIntger, propertyName: "max", onChange: () => {
58540
58596
  if (inputBlock.value > inputBlock.max) {
58541
58597
  inputBlock.value = inputBlock.max;
58542
58598
  }
58543
58599
  this.forceUpdate();
58544
- } }), cantDisplaySlider && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_propertyTab_properties_floatPropertyTabComponent__WEBPACK_IMPORTED_MODULE_2__.FloatPropertyTabComponent, { globalState: globalState, inputBlock: inputBlock }), !cantDisplaySlider && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_sliderLineComponent__WEBPACK_IMPORTED_MODULE_12__.SliderLineComponent, { lockObject: this.props.stateManager.lockObject, label: "Value", target: inputBlock, propertyName: "value", step: isIntger ? 1 : Math.abs(inputBlock.max - inputBlock.min) / 100.0, decimalCount: isIntger ? 0 : 2, minimum: Math.min(inputBlock.min, inputBlock.max), maximum: inputBlock.max, onChange: () => {
58600
+ } }), cantDisplaySlider && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_propertyTab_properties_floatPropertyTabComponent__WEBPACK_IMPORTED_MODULE_2__.FloatPropertyTabComponent, { globalState: globalState, inputBlock: inputBlock }), !cantDisplaySlider && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_sliderLineComponent__WEBPACK_IMPORTED_MODULE_11__.SliderLineComponent, { lockObject: this.props.stateManager.lockObject, label: "Value", target: inputBlock, propertyName: "value", step: isIntger ? 1 : Math.abs(inputBlock.max - inputBlock.min) / 100.0, decimalCount: isIntger ? 0 : 2, minimum: Math.min(inputBlock.min, inputBlock.max), maximum: inputBlock.max, onChange: () => {
58545
58601
  this.props.stateManager.onRebuildRequiredObservable.notifyObservers();
58546
58602
  } }))] }));
58547
58603
  }
58548
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector2:
58604
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector2:
58549
58605
  return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_propertyTab_properties_vector2PropertyTabComponent__WEBPACK_IMPORTED_MODULE_3__.Vector2PropertyTabComponent, { lockObject: globalState.lockObject, globalState: globalState, inputBlock: inputBlock });
58550
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector3:
58606
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector3:
58551
58607
  return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_propertyTab_properties_vector3PropertyTabComponent__WEBPACK_IMPORTED_MODULE_4__.Vector3PropertyTabComponent, { lockObject: globalState.lockObject, globalState: globalState, inputBlock: inputBlock });
58552
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector4:
58608
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector4:
58553
58609
  return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_components_propertyTab_properties_vector4PropertyTabComponent__WEBPACK_IMPORTED_MODULE_5__.Vector4PropertyTabComponent, { lockObject: globalState.lockObject, globalState: globalState, inputBlock: inputBlock });
58554
58610
  }
58555
58611
  return null;
@@ -58560,75 +58616,48 @@ class InputPropertyTabComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Compo
58560
58616
  }
58561
58617
  render() {
58562
58618
  const inputBlock = this.props.nodeData.data;
58563
- let contextualSourcesOptions = [{ label: "None", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.None }];
58619
+ let contextualSourcesOptions = [{ label: "None", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.None }];
58564
58620
  switch (inputBlock.type) {
58565
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Float:
58566
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Int:
58621
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Float:
58622
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Int:
58567
58623
  contextualSourcesOptions = [
58568
- { label: "Vertex ID", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.VertexID },
58569
- { label: "Face ID", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.FaceID },
58570
- { label: "Geometry ID", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.GeometryID },
58624
+ { label: "Vertex ID", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.VertexID },
58625
+ { label: "Face ID", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.FaceID },
58626
+ { label: "Geometry ID", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.GeometryID },
58627
+ { label: "Collection ID", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.CollectionID },
58571
58628
  ];
58572
58629
  break;
58573
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector2:
58630
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector2:
58574
58631
  contextualSourcesOptions = [
58575
- { label: "UV1s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.UV },
58576
- { label: "UV2s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.UV2 },
58577
- { label: "UV3s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.UV3 },
58578
- { label: "UV4s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.UV4 },
58579
- { label: "UV5s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.UV5 },
58580
- { label: "UV6s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.UV6 },
58632
+ { label: "UV1s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.UV },
58633
+ { label: "UV2s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.UV2 },
58634
+ { label: "UV3s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.UV3 },
58635
+ { label: "UV4s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.UV4 },
58636
+ { label: "UV5s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.UV5 },
58637
+ { label: "UV6s", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.UV6 },
58581
58638
  ];
58582
58639
  break;
58583
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector3:
58640
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector3:
58584
58641
  contextualSourcesOptions = [
58585
- { label: "Positions", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.Positions },
58586
- { label: "Normals", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.Normals },
58642
+ { label: "Positions", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.Positions },
58643
+ { label: "Normals", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.Normals },
58587
58644
  ];
58588
58645
  break;
58589
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector4:
58646
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector4:
58590
58647
  contextualSourcesOptions = [
58591
- { label: "Tangents", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.Tangents },
58592
- { label: "Colors", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.Colors },
58648
+ { label: "Tangents", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.Tangents },
58649
+ { label: "Colors", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.Colors },
58593
58650
  ];
58594
58651
  break;
58595
58652
  }
58596
58653
  const modeOptions = [{ label: "User-defined", value: 0 }];
58597
58654
  if (contextualSourcesOptions.length > 0) {
58598
- modeOptions.push({ label: "Contextual value (Integer)", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Int });
58599
- modeOptions.push({ label: "Contextual value (Vector2)", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector2 });
58600
- modeOptions.push({ label: "Contextual value (Vector3)", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector3 });
58601
- modeOptions.push({ label: "Contextual value (Vector4)", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector4 });
58602
- }
58603
- const typeOptions = [
58604
- { label: "None", value: 0 },
58605
- { label: "Visible in the inspector", value: 1 },
58606
- ];
58607
- return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_genericNodePropertyComponent__WEBPACK_IMPORTED_MODULE_7__.GeneralPropertyTabComponent, { stateManager: this.props.stateManager, nodeData: this.props.nodeData }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_6__.LineContainerComponent, { title: "PROPERTIES", children: [!inputBlock.isContextual && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_10__.OptionsLineComponent, { label: "Type", options: typeOptions, target: inputBlock, noDirectUpdate: true, extractValue: () => {
58608
- if (inputBlock.visibleInInspector) {
58609
- return 1;
58610
- }
58611
- return 0;
58612
- }, onSelect: (value) => {
58613
- switch (value) {
58614
- case 0:
58615
- inputBlock.visibleInInspector = false;
58616
- break;
58617
- case 1:
58618
- inputBlock.visibleInInspector = true;
58619
- break;
58620
- case 2:
58621
- inputBlock.visibleInInspector = false;
58622
- break;
58623
- }
58624
- this.forceUpdate();
58625
- this.props.stateManager.onUpdateRequiredObservable.notifyObservers(inputBlock);
58626
- this.props.stateManager.onRebuildRequiredObservable.notifyObservers();
58627
- }, propertyName: "" })), inputBlock.visibleInInspector && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_textInputLineComponent__WEBPACK_IMPORTED_MODULE_9__.TextInputLineComponent, { label: "Group", propertyName: "groupInInspector", target: inputBlock, lockObject: this.props.stateManager.lockObject, onChange: () => {
58628
- this.forceUpdate();
58629
- this.props.stateManager.onUpdateRequiredObservable.notifyObservers(inputBlock);
58630
- this.props.stateManager.onRebuildRequiredObservable.notifyObservers();
58631
- }, throttlePropertyChangedNotification: true })), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_10__.OptionsLineComponent, { label: "Mode", options: modeOptions, target: inputBlock, noDirectUpdate: true, extractValue: () => {
58655
+ modeOptions.push({ label: "Contextual value (Integer)", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Int });
58656
+ modeOptions.push({ label: "Contextual value (Vector2)", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector2 });
58657
+ modeOptions.push({ label: "Contextual value (Vector3)", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector3 });
58658
+ modeOptions.push({ label: "Contextual value (Vector4)", value: core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector4 });
58659
+ }
58660
+ return ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(_genericNodePropertyComponent__WEBPACK_IMPORTED_MODULE_7__.GeneralPropertyTabComponent, { stateManager: this.props.stateManager, nodeData: this.props.nodeData }), (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(_sharedComponents_lineContainerComponent__WEBPACK_IMPORTED_MODULE_6__.LineContainerComponent, { title: "PROPERTIES", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_9__.OptionsLineComponent, { label: "Mode", options: modeOptions, target: inputBlock, noDirectUpdate: true, extractValue: () => {
58632
58661
  if (inputBlock.isContextual) {
58633
58662
  return inputBlock.type;
58634
58663
  }
@@ -58640,17 +58669,17 @@ class InputPropertyTabComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Compo
58640
58669
  break;
58641
58670
  default:
58642
58671
  switch (value) {
58643
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Int:
58644
- inputBlock.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.VertexID;
58672
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Int:
58673
+ inputBlock.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.VertexID;
58645
58674
  break;
58646
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector2:
58647
- inputBlock.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.UV;
58675
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector2:
58676
+ inputBlock.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.UV;
58648
58677
  break;
58649
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector3:
58650
- inputBlock.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.Positions;
58678
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector3:
58679
+ inputBlock.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.Positions;
58651
58680
  break;
58652
- case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryBlockConnectionPointTypes.Vector4:
58653
- inputBlock.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_13__.NodeGeometryContextualSources.Colors;
58681
+ case core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryBlockConnectionPointTypes.Vector4:
58682
+ inputBlock.contextualValue = core_Meshes_Node_Enums_nodeGeometryConnectionPointTypes__WEBPACK_IMPORTED_MODULE_12__.NodeGeometryContextualSources.Colors;
58654
58683
  break;
58655
58684
  }
58656
58685
  break;
@@ -58658,7 +58687,7 @@ class InputPropertyTabComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Compo
58658
58687
  this.forceUpdate();
58659
58688
  this.props.stateManager.onUpdateRequiredObservable.notifyObservers(inputBlock);
58660
58689
  this.props.stateManager.onRebuildRequiredObservable.notifyObservers();
58661
- }, propertyName: "" }), !inputBlock.isContextual && this.renderValue(this.props.stateManager.data), inputBlock.isContextual && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_10__.OptionsLineComponent, { label: "Contextual value", options: contextualSourcesOptions, target: inputBlock, propertyName: "contextualValue", onSelect: (value) => {
58690
+ }, propertyName: "" }), !inputBlock.isContextual && this.renderValue(this.props.stateManager.data), inputBlock.isContextual && ((0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_optionsLineComponent__WEBPACK_IMPORTED_MODULE_9__.OptionsLineComponent, { label: "Contextual value", options: contextualSourcesOptions, target: inputBlock, propertyName: "contextualValue", onSelect: (value) => {
58662
58691
  inputBlock.contextualValue = value;
58663
58692
  this.forceUpdate();
58664
58693
  this.props.stateManager.onUpdateRequiredObservable.notifyObservers(inputBlock);
@@ -58720,7 +58749,7 @@ class MeshPropertyTabComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Compon
58720
58749
  if (meshes.length) {
58721
58750
  const block = this.props.nodeData.data;
58722
58751
  block.mesh = meshes[0];
58723
- this.props.stateManager.onUpdateRequiredObservable.notifyObservers(block);
58752
+ this.props.stateManager.onRebuildRequiredObservable.notifyObservers();
58724
58753
  }
58725
58754
  this.forceUpdate();
58726
58755
  }
@@ -58756,7 +58785,7 @@ class MeshPropertyTabComponent extends react__WEBPACK_IMPORTED_MODULE_1__.Compon
58756
58785
  return meshIndex;
58757
58786
  }
58758
58787
  return -1;
58759
- } }))] })] }));
58788
+ } })), !scene && !!block.mesh && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_textLineComponent__WEBPACK_IMPORTED_MODULE_6__.TextLineComponent, { ignoreValue: true, label: `Mesh ${block.mesh.name} defined by code` }), !scene && !!block.isUsingCachedData && (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(shared_ui_components_lines_textLineComponent__WEBPACK_IMPORTED_MODULE_6__.TextLineComponent, { ignoreValue: true, label: `Block is using cached data` })] })] }));
58760
58789
  }
58761
58790
  }
58762
58791
 
@@ -59299,6 +59328,13 @@ class NodeGeometryEditor {
59299
59328
  globalState.hostWindow.addEventListener("beforeunload", () => {
59300
59329
  globalState.onPopupClosedObservable.notifyObservers();
59301
59330
  });
59331
+ // Resync
59332
+ if (options.hostMesh) {
59333
+ globalState.resyncHandler = () => {
59334
+ options.nodeGeometry.build();
59335
+ options.nodeGeometry.updateMesh(options.hostMesh);
59336
+ };
59337
+ }
59302
59338
  // Close the popup window when the page is refreshed or scene is disposed
59303
59339
  const popupWindow = _sharedComponents_popup__WEBPACK_IMPORTED_MODULE_4__.Popup["node-geometry-editor"];
59304
59340
  if (globalState.nodeGeometry && options.hostScene && popupWindow) {