@xeokit/xeokit-sdk 2.6.59 → 2.6.61

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.
@@ -90756,7 +90756,7 @@ class FastNavPlugin extends Plugin {
90756
90756
  this._hideEdges = cfg.hideEdges !== false;
90757
90757
  this._hideTransparentObjects = !!cfg.hideTransparentObjects;
90758
90758
  this._scaleCanvasResolution = !!cfg.scaleCanvasResolution;
90759
- this._defaultScaleCanvasResolutionFactor = cfg.defaultScaleCanvasResolutionFactor || 1.0;
90759
+ this._defaultScaleCanvasResolutionFactor = cfg.defaultScaleCanvasResolutionFactor;
90760
90760
  this._scaleCanvasResolutionFactor = cfg.scaleCanvasResolutionFactor || 0.6;
90761
90761
  this._delayBeforeRestore = (cfg.delayBeforeRestore !== false);
90762
90762
  this._delayBeforeRestoreSeconds = cfg.delayBeforeRestoreSeconds || 0.5;
@@ -90772,6 +90772,7 @@ class FastNavPlugin extends Plugin {
90772
90772
  viewer.scene._renderer.setSAOEnabled(!this._hideSAO);
90773
90773
  viewer.scene._renderer.setTransparentEnabled(!this._hideTransparentObjects);
90774
90774
  viewer.scene._renderer.setEdgesEnabled(!this._hideEdges);
90775
+ this._originalCanvasResolutionScale = viewer.scene.canvas.resolutionScale;
90775
90776
  if (this._scaleCanvasResolution) {
90776
90777
  viewer.scene.canvas.resolutionScale = this._scaleCanvasResolutionFactor;
90777
90778
  } else {
@@ -90782,7 +90783,7 @@ class FastNavPlugin extends Plugin {
90782
90783
  };
90783
90784
 
90784
90785
  const switchToHighQuality = () => {
90785
- viewer.scene.canvas.resolutionScale = this._defaultScaleCanvasResolutionFactor;
90786
+ viewer.scene.canvas.resolutionScale = this._defaultScaleCanvasResolutionFactor || this._originalCanvasResolutionScale || 1.0;
90786
90787
  viewer.scene._renderer.setEdgesEnabled(true);
90787
90788
  viewer.scene._renderer.setColorTextureEnabled(true);
90788
90789
  viewer.scene._renderer.setPBREnabled(true);
@@ -90987,7 +90988,7 @@ class FastNavPlugin extends Plugin {
90987
90988
  * @param {Number} defaultScaleCanvasResolutionFactor Factor by scale canvas resolution when we stop interacting with the viewer.
90988
90989
  */
90989
90990
  set defaultScaleCanvasResolutionFactor(defaultScaleCanvasResolutionFactor) {
90990
- this._defaultScaleCanvasResolutionFactor = defaultScaleCanvasResolutionFactor || 1.0;
90991
+ this._defaultScaleCanvasResolutionFactor = defaultScaleCanvasResolutionFactor;
90991
90992
  }
90992
90993
 
90993
90994
  /**
@@ -126544,6 +126545,7 @@ class TreeViewPlugin extends Plugin {
126544
126545
  * @param {Boolean} [cfg.pruneEmptyNodes=true] When true, will not contain nodes that don't have content in the {@link Scene}. These are nodes whose {@link MetaObject}s don't have {@link Entity}s.
126545
126546
  * @param {RenderService} [cfg.renderService] Optional {@link RenderService} to use. Defaults to the {@link TreeViewPlugin}'s default {@link RenderService}.
126546
126547
  * @param {Boolean} [cfg.showIndeterminate=false] When true, will show indeterminate state for checkboxes when some but not all child nodes are checked
126548
+ * @param {Boolean} [cfg.showProjectNode=false] When true, will show top level project node when hierarchy is set to "storeys"
126547
126549
  */
126548
126550
  constructor(viewer, cfg = {}) {
126549
126551
 
@@ -126596,6 +126598,7 @@ class TreeViewPlugin extends Plugin {
126596
126598
  this._showListItemElementId = null;
126597
126599
  this._renderService = cfg.renderService || new RenderService();
126598
126600
  this._showIndeterminate = cfg.showIndeterminate ?? false;
126601
+ this._showProjectNode = cfg.showProjectNode ?? false;
126599
126602
 
126600
126603
  if (!this._renderService) {
126601
126604
  throw new Error('TreeViewPlugin: no render service set');
@@ -127150,11 +127153,11 @@ class TreeViewPlugin extends Plugin {
127150
127153
  _createStoreysNodes() {
127151
127154
  const rootMetaObjects = this._viewer.metaScene.rootMetaObjects;
127152
127155
  for (let id in rootMetaObjects) {
127153
- this._createStoreysNodes2(rootMetaObjects[id], null, null, null);
127156
+ this._createStoreysNodes2(rootMetaObjects[id], null, null, null, null);
127154
127157
  }
127155
127158
  }
127156
127159
 
127157
- _createStoreysNodes2(metaObject, buildingNode, storeyNode, typeNodes) {
127160
+ _createStoreysNodes2(metaObject, projectNode, buildingNode, storeyNode, typeNodes) {
127158
127161
  if (this._pruneEmptyNodes && (metaObject._countEntities === 0)) {
127159
127162
  return;
127160
127163
  }
@@ -127162,20 +127165,41 @@ class TreeViewPlugin extends Plugin {
127162
127165
  const metaObjectName = metaObject.name;
127163
127166
  const children = metaObject.children;
127164
127167
  const objectId = metaObject.id;
127165
- if (metaObjectType === "IfcBuilding") {
127168
+
127169
+ if (this._showProjectNode && metaObjectType === 'IfcProject') {
127170
+ projectNode = {
127171
+ nodeId: `${this._id}-${objectId}`,
127172
+ objectId,
127173
+ title: (metaObject.metaModels.length === 0) ? metaObjectName : this._rootNames[metaObject.metaModels[0].id] || ((metaObjectName && metaObjectName !== "" && metaObjectName !== "Undefined" && metaObjectName !== "Default") ? metaObjectName : metaObjectType),
127174
+ type: metaObjectType,
127175
+ parent: null,
127176
+ numEntities: 0,
127177
+ numVisibleEntities: 0,
127178
+ checked: false,
127179
+ xrayed: false,
127180
+ children: [],
127181
+ };
127182
+ this._rootNodes.push(projectNode);
127183
+ this._objectNodes[projectNode.objectId] = projectNode;
127184
+ this._nodeNodes[projectNode.nodeId] = projectNode;
127185
+ } else if (metaObjectType === "IfcBuilding") {
127166
127186
  buildingNode = {
127167
127187
  nodeId: `${this._id}-${objectId}`,
127168
127188
  objectId: objectId,
127169
127189
  title: (metaObject.metaModels.length === 0) ? metaObjectName : this._rootNames[metaObject.metaModels[0].id] || ((metaObjectName && metaObjectName !== "" && metaObjectName !== "Undefined" && metaObjectName !== "Default") ? metaObjectName : metaObjectType),
127170
127190
  type: metaObjectType,
127171
- parent: null,
127191
+ parent: projectNode,
127172
127192
  numEntities: 0,
127173
127193
  numVisibleEntities: 0,
127174
127194
  checked: false,
127175
127195
  xrayed: false,
127176
127196
  children: []
127177
127197
  };
127178
- this._rootNodes.push(buildingNode);
127198
+ if (projectNode) {
127199
+ projectNode.children.push(buildingNode);
127200
+ } else {
127201
+ this._rootNodes.push(buildingNode);
127202
+ }
127179
127203
  this._objectNodes[buildingNode.objectId] = buildingNode;
127180
127204
  this._nodeNodes[buildingNode.nodeId] = buildingNode;
127181
127205
  } else if (metaObjectType === "IfcBuildingStorey") {
@@ -127245,7 +127269,7 @@ class TreeViewPlugin extends Plugin {
127245
127269
  if (children) {
127246
127270
  for (let i = 0, len = children.length; i < len; i++) {
127247
127271
  const childMetaObject = children[i];
127248
- this._createStoreysNodes2(childMetaObject, buildingNode, storeyNode, typeNodes);
127272
+ this._createStoreysNodes2(childMetaObject, projectNode, buildingNode, storeyNode, typeNodes);
127249
127273
  }
127250
127274
  }
127251
127275
  }
@@ -90752,7 +90752,7 @@ class FastNavPlugin extends Plugin {
90752
90752
  this._hideEdges = cfg.hideEdges !== false;
90753
90753
  this._hideTransparentObjects = !!cfg.hideTransparentObjects;
90754
90754
  this._scaleCanvasResolution = !!cfg.scaleCanvasResolution;
90755
- this._defaultScaleCanvasResolutionFactor = cfg.defaultScaleCanvasResolutionFactor || 1.0;
90755
+ this._defaultScaleCanvasResolutionFactor = cfg.defaultScaleCanvasResolutionFactor;
90756
90756
  this._scaleCanvasResolutionFactor = cfg.scaleCanvasResolutionFactor || 0.6;
90757
90757
  this._delayBeforeRestore = (cfg.delayBeforeRestore !== false);
90758
90758
  this._delayBeforeRestoreSeconds = cfg.delayBeforeRestoreSeconds || 0.5;
@@ -90768,6 +90768,7 @@ class FastNavPlugin extends Plugin {
90768
90768
  viewer.scene._renderer.setSAOEnabled(!this._hideSAO);
90769
90769
  viewer.scene._renderer.setTransparentEnabled(!this._hideTransparentObjects);
90770
90770
  viewer.scene._renderer.setEdgesEnabled(!this._hideEdges);
90771
+ this._originalCanvasResolutionScale = viewer.scene.canvas.resolutionScale;
90771
90772
  if (this._scaleCanvasResolution) {
90772
90773
  viewer.scene.canvas.resolutionScale = this._scaleCanvasResolutionFactor;
90773
90774
  } else {
@@ -90778,7 +90779,7 @@ class FastNavPlugin extends Plugin {
90778
90779
  };
90779
90780
 
90780
90781
  const switchToHighQuality = () => {
90781
- viewer.scene.canvas.resolutionScale = this._defaultScaleCanvasResolutionFactor;
90782
+ viewer.scene.canvas.resolutionScale = this._defaultScaleCanvasResolutionFactor || this._originalCanvasResolutionScale || 1.0;
90782
90783
  viewer.scene._renderer.setEdgesEnabled(true);
90783
90784
  viewer.scene._renderer.setColorTextureEnabled(true);
90784
90785
  viewer.scene._renderer.setPBREnabled(true);
@@ -90983,7 +90984,7 @@ class FastNavPlugin extends Plugin {
90983
90984
  * @param {Number} defaultScaleCanvasResolutionFactor Factor by scale canvas resolution when we stop interacting with the viewer.
90984
90985
  */
90985
90986
  set defaultScaleCanvasResolutionFactor(defaultScaleCanvasResolutionFactor) {
90986
- this._defaultScaleCanvasResolutionFactor = defaultScaleCanvasResolutionFactor || 1.0;
90987
+ this._defaultScaleCanvasResolutionFactor = defaultScaleCanvasResolutionFactor;
90987
90988
  }
90988
90989
 
90989
90990
  /**
@@ -126540,6 +126541,7 @@ class TreeViewPlugin extends Plugin {
126540
126541
  * @param {Boolean} [cfg.pruneEmptyNodes=true] When true, will not contain nodes that don't have content in the {@link Scene}. These are nodes whose {@link MetaObject}s don't have {@link Entity}s.
126541
126542
  * @param {RenderService} [cfg.renderService] Optional {@link RenderService} to use. Defaults to the {@link TreeViewPlugin}'s default {@link RenderService}.
126542
126543
  * @param {Boolean} [cfg.showIndeterminate=false] When true, will show indeterminate state for checkboxes when some but not all child nodes are checked
126544
+ * @param {Boolean} [cfg.showProjectNode=false] When true, will show top level project node when hierarchy is set to "storeys"
126543
126545
  */
126544
126546
  constructor(viewer, cfg = {}) {
126545
126547
 
@@ -126592,6 +126594,7 @@ class TreeViewPlugin extends Plugin {
126592
126594
  this._showListItemElementId = null;
126593
126595
  this._renderService = cfg.renderService || new RenderService();
126594
126596
  this._showIndeterminate = cfg.showIndeterminate ?? false;
126597
+ this._showProjectNode = cfg.showProjectNode ?? false;
126595
126598
 
126596
126599
  if (!this._renderService) {
126597
126600
  throw new Error('TreeViewPlugin: no render service set');
@@ -127146,11 +127149,11 @@ class TreeViewPlugin extends Plugin {
127146
127149
  _createStoreysNodes() {
127147
127150
  const rootMetaObjects = this._viewer.metaScene.rootMetaObjects;
127148
127151
  for (let id in rootMetaObjects) {
127149
- this._createStoreysNodes2(rootMetaObjects[id], null, null, null);
127152
+ this._createStoreysNodes2(rootMetaObjects[id], null, null, null, null);
127150
127153
  }
127151
127154
  }
127152
127155
 
127153
- _createStoreysNodes2(metaObject, buildingNode, storeyNode, typeNodes) {
127156
+ _createStoreysNodes2(metaObject, projectNode, buildingNode, storeyNode, typeNodes) {
127154
127157
  if (this._pruneEmptyNodes && (metaObject._countEntities === 0)) {
127155
127158
  return;
127156
127159
  }
@@ -127158,20 +127161,41 @@ class TreeViewPlugin extends Plugin {
127158
127161
  const metaObjectName = metaObject.name;
127159
127162
  const children = metaObject.children;
127160
127163
  const objectId = metaObject.id;
127161
- if (metaObjectType === "IfcBuilding") {
127164
+
127165
+ if (this._showProjectNode && metaObjectType === 'IfcProject') {
127166
+ projectNode = {
127167
+ nodeId: `${this._id}-${objectId}`,
127168
+ objectId,
127169
+ title: (metaObject.metaModels.length === 0) ? metaObjectName : this._rootNames[metaObject.metaModels[0].id] || ((metaObjectName && metaObjectName !== "" && metaObjectName !== "Undefined" && metaObjectName !== "Default") ? metaObjectName : metaObjectType),
127170
+ type: metaObjectType,
127171
+ parent: null,
127172
+ numEntities: 0,
127173
+ numVisibleEntities: 0,
127174
+ checked: false,
127175
+ xrayed: false,
127176
+ children: [],
127177
+ };
127178
+ this._rootNodes.push(projectNode);
127179
+ this._objectNodes[projectNode.objectId] = projectNode;
127180
+ this._nodeNodes[projectNode.nodeId] = projectNode;
127181
+ } else if (metaObjectType === "IfcBuilding") {
127162
127182
  buildingNode = {
127163
127183
  nodeId: `${this._id}-${objectId}`,
127164
127184
  objectId: objectId,
127165
127185
  title: (metaObject.metaModels.length === 0) ? metaObjectName : this._rootNames[metaObject.metaModels[0].id] || ((metaObjectName && metaObjectName !== "" && metaObjectName !== "Undefined" && metaObjectName !== "Default") ? metaObjectName : metaObjectType),
127166
127186
  type: metaObjectType,
127167
- parent: null,
127187
+ parent: projectNode,
127168
127188
  numEntities: 0,
127169
127189
  numVisibleEntities: 0,
127170
127190
  checked: false,
127171
127191
  xrayed: false,
127172
127192
  children: []
127173
127193
  };
127174
- this._rootNodes.push(buildingNode);
127194
+ if (projectNode) {
127195
+ projectNode.children.push(buildingNode);
127196
+ } else {
127197
+ this._rootNodes.push(buildingNode);
127198
+ }
127175
127199
  this._objectNodes[buildingNode.objectId] = buildingNode;
127176
127200
  this._nodeNodes[buildingNode.nodeId] = buildingNode;
127177
127201
  } else if (metaObjectType === "IfcBuildingStorey") {
@@ -127241,7 +127265,7 @@ class TreeViewPlugin extends Plugin {
127241
127265
  if (children) {
127242
127266
  for (let i = 0, len = children.length; i < len; i++) {
127243
127267
  const childMetaObject = children[i];
127244
- this._createStoreysNodes2(childMetaObject, buildingNode, storeyNode, typeNodes);
127268
+ this._createStoreysNodes2(childMetaObject, projectNode, buildingNode, storeyNode, typeNodes);
127245
127269
  }
127246
127270
  }
127247
127271
  }
@@ -20567,7 +20567,7 @@ return pickResult&&pickResult.worldPos?pickResult.worldPos:snap&&tryPickWorldPos
20567
20567
  * @param {Number} [cfg.scaleCanvasResolutionFactor=0.6] The factor by which we downscale the canvas resolution whenever we interact with the Viewer.
20568
20568
  * @param {Boolean} [cfg.delayBeforeRestore=true] Whether to temporarily have a delay before restoring normal rendering after we stop interacting with the Viewer.
20569
20569
  * @param {Number} [cfg.delayBeforeRestoreSeconds=0.5] Delay in seconds before restoring normal rendering after we stop interacting with the Viewer.
20570
- */function FastNavPlugin(viewer){var _this99;var cfg=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,FastNavPlugin);_this99=_super129.call(this,"FastNav",viewer);_this99._hideColorTexture=cfg.hideColorTexture!==false;_this99._hidePBR=cfg.hidePBR!==false;_this99._hideSAO=cfg.hideSAO!==false;_this99._hideEdges=cfg.hideEdges!==false;_this99._hideTransparentObjects=!!cfg.hideTransparentObjects;_this99._scaleCanvasResolution=!!cfg.scaleCanvasResolution;_this99._defaultScaleCanvasResolutionFactor=cfg.defaultScaleCanvasResolutionFactor||1.0;_this99._scaleCanvasResolutionFactor=cfg.scaleCanvasResolutionFactor||0.6;_this99._delayBeforeRestore=cfg.delayBeforeRestore!==false;_this99._delayBeforeRestoreSeconds=cfg.delayBeforeRestoreSeconds||0.5;var timer=_this99._delayBeforeRestoreSeconds*1000;var fastMode=false;var switchToLowQuality=function switchToLowQuality(){timer=_this99._delayBeforeRestoreSeconds*1000;if(!fastMode){viewer.scene._renderer.setColorTextureEnabled(!_this99._hideColorTexture);viewer.scene._renderer.setPBREnabled(!_this99._hidePBR);viewer.scene._renderer.setSAOEnabled(!_this99._hideSAO);viewer.scene._renderer.setTransparentEnabled(!_this99._hideTransparentObjects);viewer.scene._renderer.setEdgesEnabled(!_this99._hideEdges);if(_this99._scaleCanvasResolution){viewer.scene.canvas.resolutionScale=_this99._scaleCanvasResolutionFactor;}else{viewer.scene.canvas.resolutionScale=_this99._defaultScaleCanvasResolutionFactor;}fastMode=true;}};var switchToHighQuality=function switchToHighQuality(){viewer.scene.canvas.resolutionScale=_this99._defaultScaleCanvasResolutionFactor;viewer.scene._renderer.setEdgesEnabled(true);viewer.scene._renderer.setColorTextureEnabled(true);viewer.scene._renderer.setPBREnabled(true);viewer.scene._renderer.setSAOEnabled(true);viewer.scene._renderer.setTransparentEnabled(true);fastMode=false;};_this99._onCanvasBoundary=viewer.scene.canvas.on("boundary",switchToLowQuality);_this99._onCameraMatrix=viewer.scene.camera.on("matrix",switchToLowQuality);_this99._onSceneTick=viewer.scene.on("tick",function(tickEvent){if(!fastMode){return;}timer-=tickEvent.deltaTime;if(!_this99._delayBeforeRestore||timer<=0){switchToHighQuality();}});var down=false;_this99._onSceneMouseDown=viewer.scene.input.on("mousedown",function(){down=true;});_this99._onSceneMouseUp=viewer.scene.input.on("mouseup",function(){down=false;});_this99._onSceneMouseMove=viewer.scene.input.on("mousemove",function(){if(!down){return;}switchToLowQuality();});return _this99;}/**
20570
+ */function FastNavPlugin(viewer){var _this99;var cfg=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,FastNavPlugin);_this99=_super129.call(this,"FastNav",viewer);_this99._hideColorTexture=cfg.hideColorTexture!==false;_this99._hidePBR=cfg.hidePBR!==false;_this99._hideSAO=cfg.hideSAO!==false;_this99._hideEdges=cfg.hideEdges!==false;_this99._hideTransparentObjects=!!cfg.hideTransparentObjects;_this99._scaleCanvasResolution=!!cfg.scaleCanvasResolution;_this99._defaultScaleCanvasResolutionFactor=cfg.defaultScaleCanvasResolutionFactor;_this99._scaleCanvasResolutionFactor=cfg.scaleCanvasResolutionFactor||0.6;_this99._delayBeforeRestore=cfg.delayBeforeRestore!==false;_this99._delayBeforeRestoreSeconds=cfg.delayBeforeRestoreSeconds||0.5;var timer=_this99._delayBeforeRestoreSeconds*1000;var fastMode=false;var switchToLowQuality=function switchToLowQuality(){timer=_this99._delayBeforeRestoreSeconds*1000;if(!fastMode){viewer.scene._renderer.setColorTextureEnabled(!_this99._hideColorTexture);viewer.scene._renderer.setPBREnabled(!_this99._hidePBR);viewer.scene._renderer.setSAOEnabled(!_this99._hideSAO);viewer.scene._renderer.setTransparentEnabled(!_this99._hideTransparentObjects);viewer.scene._renderer.setEdgesEnabled(!_this99._hideEdges);_this99._originalCanvasResolutionScale=viewer.scene.canvas.resolutionScale;if(_this99._scaleCanvasResolution){viewer.scene.canvas.resolutionScale=_this99._scaleCanvasResolutionFactor;}else{viewer.scene.canvas.resolutionScale=_this99._defaultScaleCanvasResolutionFactor;}fastMode=true;}};var switchToHighQuality=function switchToHighQuality(){viewer.scene.canvas.resolutionScale=_this99._defaultScaleCanvasResolutionFactor||_this99._originalCanvasResolutionScale||1.0;viewer.scene._renderer.setEdgesEnabled(true);viewer.scene._renderer.setColorTextureEnabled(true);viewer.scene._renderer.setPBREnabled(true);viewer.scene._renderer.setSAOEnabled(true);viewer.scene._renderer.setTransparentEnabled(true);fastMode=false;};_this99._onCanvasBoundary=viewer.scene.canvas.on("boundary",switchToLowQuality);_this99._onCameraMatrix=viewer.scene.camera.on("matrix",switchToLowQuality);_this99._onSceneTick=viewer.scene.on("tick",function(tickEvent){if(!fastMode){return;}timer-=tickEvent.deltaTime;if(!_this99._delayBeforeRestore||timer<=0){switchToHighQuality();}});var down=false;_this99._onSceneMouseDown=viewer.scene.input.on("mousedown",function(){down=true;});_this99._onSceneMouseUp=viewer.scene.input.on("mouseup",function(){down=false;});_this99._onSceneMouseMove=viewer.scene.input.on("mousemove",function(){if(!down){return;}switchToLowQuality();});return _this99;}/**
20571
20571
  * Gets whether to temporarily hide color textures whenever we interact with the Viewer.
20572
20572
  *
20573
20573
  * Default is ````true````.
@@ -20665,7 +20665,7 @@ return pickResult&&pickResult.worldPos?pickResult.worldPos:snap&&tryPickWorldPos
20665
20665
  * Enable canvas resolution scaling by setting {@link FastNavPlugin#scaleCanvasResolution} ````true````.
20666
20666
  *
20667
20667
  * @param {Number} defaultScaleCanvasResolutionFactor Factor by scale canvas resolution when we stop interacting with the viewer.
20668
- */,set:function set(defaultScaleCanvasResolutionFactor){this._defaultScaleCanvasResolutionFactor=defaultScaleCanvasResolutionFactor||1.0;}/**
20668
+ */,set:function set(defaultScaleCanvasResolutionFactor){this._defaultScaleCanvasResolutionFactor=defaultScaleCanvasResolutionFactor;}/**
20669
20669
  * Gets the factor by which we temporarily scale the canvas resolution when we interact with the viewer.
20670
20670
  *
20671
20671
  * Default is ````0.6````.
@@ -27622,7 +27622,8 @@ addMesh(modelNode,positions,normals,colors,material,options);}function addMesh(m
27622
27622
  * @param {Boolean} [cfg.pruneEmptyNodes=true] When true, will not contain nodes that don't have content in the {@link Scene}. These are nodes whose {@link MetaObject}s don't have {@link Entity}s.
27623
27623
  * @param {RenderService} [cfg.renderService] Optional {@link RenderService} to use. Defaults to the {@link TreeViewPlugin}'s default {@link RenderService}.
27624
27624
  * @param {Boolean} [cfg.showIndeterminate=false] When true, will show indeterminate state for checkboxes when some but not all child nodes are checked
27625
- */function TreeViewPlugin(viewer){var _cfg$showIndeterminat;var _this158;var cfg=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,TreeViewPlugin);_this158=_super166.call(this,"TreeViewPlugin",viewer);/**
27625
+ * @param {Boolean} [cfg.showProjectNode=false] When true, will show top level project node when hierarchy is set to "storeys"
27626
+ */function TreeViewPlugin(viewer){var _cfg$showIndeterminat,_cfg$showProjectNode;var _this158;var cfg=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};_classCallCheck(this,TreeViewPlugin);_this158=_super166.call(this,"TreeViewPlugin",viewer);/**
27626
27627
  * Contains messages for any errors found while last rebuilding this TreeView.
27627
27628
  * @type {String[]}
27628
27629
  */_this158.errors=[];/**
@@ -27631,7 +27632,7 @@ addMesh(modelNode,positions,normals,colors,material,options);}function addMesh(m
27631
27632
  */_this158.valid=true;var containerElement=cfg.containerElement||document.getElementById(cfg.containerElementId);if(!(containerElement instanceof HTMLElement)){_this158.error("Mandatory config expected: valid containerElementId or containerElement");return _possibleConstructorReturn(_this158);}for(var _i539=0;;_i539++){if(!treeViews[_i539]){treeViews[_i539]=_assertThisInitialized(_this158);_this158._index=_i539;_this158._id="tree-".concat(_i539);break;}}_this158._containerElement=containerElement;_this158._metaModels={};_this158._autoAddModels=cfg.autoAddModels!==false;_this158._autoExpandDepth=cfg.autoExpandDepth||0;_this158._sortNodes=cfg.sortNodes!==false;_this158._viewer=viewer;_this158._rootElement=null;_this158._muteSceneEvents=false;_this158._muteTreeEvents=false;_this158._rootNodes=[];_this158._objectNodes={};// Object ID -> Node
27632
27633
  _this158._nodeNodes={};// Node ID -> Node
27633
27634
  _this158._rootNames={};// Node ID -> Root name
27634
- _this158._sortNodes=cfg.sortNodes;_this158._pruneEmptyNodes=cfg.pruneEmptyNodes;_this158._showListItemElementId=null;_this158._renderService=cfg.renderService||new RenderService();_this158._showIndeterminate=(_cfg$showIndeterminat=cfg.showIndeterminate)!==null&&_cfg$showIndeterminat!==void 0?_cfg$showIndeterminat:false;if(!_this158._renderService){throw new Error('TreeViewPlugin: no render service set');}_this158._containerElement.oncontextmenu=function(e){e.preventDefault();};_this158._onObjectVisibility=_this158._viewer.scene.on("objectVisibility",function(entity){if(_this158._muteSceneEvents){return;}var objectId=entity.id;var node=_this158._objectNodes[objectId];if(!node){return;// Not in this tree
27635
+ _this158._sortNodes=cfg.sortNodes;_this158._pruneEmptyNodes=cfg.pruneEmptyNodes;_this158._showListItemElementId=null;_this158._renderService=cfg.renderService||new RenderService();_this158._showIndeterminate=(_cfg$showIndeterminat=cfg.showIndeterminate)!==null&&_cfg$showIndeterminat!==void 0?_cfg$showIndeterminat:false;_this158._showProjectNode=(_cfg$showProjectNode=cfg.showProjectNode)!==null&&_cfg$showProjectNode!==void 0?_cfg$showProjectNode:false;if(!_this158._renderService){throw new Error('TreeViewPlugin: no render service set');}_this158._containerElement.oncontextmenu=function(e){e.preventDefault();};_this158._onObjectVisibility=_this158._viewer.scene.on("objectVisibility",function(entity){if(_this158._muteSceneEvents){return;}var objectId=entity.id;var node=_this158._objectNodes[objectId];if(!node){return;// Not in this tree
27635
27636
  }var visible=entity.visible;var updated=visible!==node.checked;if(!updated){return;}_this158._muteTreeEvents=true;node.checked=visible;if(visible){node.numVisibleEntities++;}else{node.numVisibleEntities--;}_this158._renderService.setCheckbox(node.nodeId,visible);var parent=node.parent;while(parent){parent.checked=visible;if(visible){parent.numVisibleEntities++;}else{parent.numVisibleEntities--;}var indeterminate=_this158._showIndeterminate&&parent.numVisibleEntities>0&&parent.numVisibleEntities<parent.numEntities;_this158._renderService.setCheckbox(parent.nodeId,parent.numVisibleEntities>0,indeterminate);parent=parent.parent;}_this158._muteTreeEvents=false;});_this158._onObjectXrayed=_this158._viewer.scene.on('objectXRayed',function(entity){if(_this158._muteSceneEvents){return;}var objectId=entity.id;var node=_this158._objectNodes[objectId];if(!node){return;// Not in this tree
27636
27637
  }_this158._muteTreeEvents=true;var xrayed=entity.xrayed;var updated=xrayed!==node.xrayed;if(!updated){return;}node.xrayed=xrayed;_this158._renderService.setXRayed(node.nodeId,xrayed);_this158._muteTreeEvents=false;});_this158._switchExpandHandler=function(event){event.preventDefault();event.stopPropagation();var switchElement=event.target;_this158._expandSwitchElement(switchElement);};_this158._switchCollapseHandler=function(event){event.preventDefault();event.stopPropagation();var switchElement=event.target;_this158._collapseSwitchElement(switchElement);};_this158._checkboxChangeHandler=function(event){if(_this158._muteTreeEvents){return;}_this158._muteSceneEvents=true;var checkbox=event.target;var visible=_this158._renderService.isChecked(checkbox);var nodeId=_this158._renderService.getIdFromCheckbox(checkbox);var checkedNode=_this158._nodeNodes[nodeId];var objects=_this158._viewer.scene.objects;var numUpdated=0;_this158._withNodeTree(checkedNode,function(node){var objectId=node.objectId;var entity=objects[objectId];var isLeaf=node.children.length===0;node.numVisibleEntities=visible?node.numEntities:0;if(isLeaf&&visible!==node.checked){numUpdated++;}node.checked=visible;_this158._renderService.setCheckbox(node.nodeId,visible);if(entity){entity.visible=visible;}});var parent=checkedNode.parent;while(parent){parent.checked=visible;if(visible){parent.numVisibleEntities+=numUpdated;}else{parent.numVisibleEntities-=numUpdated;}var indeterminate=_this158._showIndeterminate&&parent.numVisibleEntities>0&&parent.numVisibleEntities<parent.numEntities;_this158._renderService.setCheckbox(parent.nodeId,parent.numVisibleEntities>0,indeterminate);parent=parent.parent;}_this158._muteSceneEvents=false;};_this158._hierarchy=cfg.hierarchy||"containment";_this158._autoExpandDepth=cfg.autoExpandDepth||0;if(_this158._autoAddModels){var modelIds=Object.keys(_this158.viewer.metaScene.metaModels);for(var _i540=0,len=modelIds.length;_i540<len;_i540++){var modelId=modelIds[_i540];var metaModel=_this158.viewer.metaScene.metaModels[modelId];if(metaModel.finalized){_this158.addModel(modelId);}}_this158.viewer.scene.on("modelLoaded",function(modelId){if(_this158.viewer.metaScene.metaModels[modelId]){_this158.addModel(modelId);}});}_this158.hierarchy=cfg.hierarchy;return _this158;}/**
27637
27638
  * Sets how the nodes are organized within this tree view.
@@ -27736,7 +27737,7 @@ _this158._sortNodes=cfg.sortNodes;_this158._pruneEmptyNodes=cfg.pruneEmptyNodes;
27736
27737
  // // errors.push("Can't build storeys hierarchy: no IfcBuildingStoreys found");
27737
27738
  // }
27738
27739
  // }
27739
- return true;}},{key:"_createEnabledNodes",value:function _createEnabledNodes(){if(this._pruneEmptyNodes){this._findEmptyNodes();}switch(this._hierarchy){case"storeys":this._createStoreysNodes();if(this._rootNodes.length===0){this.error("Failed to build storeys hierarchy");}break;case"types":this._createTypesNodes();break;case"containment":default:this._createContainmentNodes();}if(this._sortNodes){this._doSortNodes();}this._synchNodesToEntities();this._createTrees();this.expandToDepth(this._autoExpandDepth);}},{key:"_createDisabledNodes",value:function _createDisabledNodes(){var rootNode=this._renderService.createRootNode();this._rootElement=rootNode;this._containerElement.appendChild(rootNode);var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var objectId in rootMetaObjects){var rootMetaObject=rootMetaObjects[objectId];var metaObjectType=rootMetaObject.type;var metaObjectName=rootMetaObject.name;var rootName=metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType;var childNode=this._renderService.createDisabledNodeElement(rootName);rootNode.appendChild(childNode);}}},{key:"_findEmptyNodes",value:function _findEmptyNodes(){var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var objectId in rootMetaObjects){this._findEmptyNodes2(rootMetaObjects[objectId]);}}},{key:"_findEmptyNodes2",value:function _findEmptyNodes2(metaObject){var countEntities=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var viewer=this.viewer;var scene=viewer.scene;var children=metaObject.children;var objectId=metaObject.id;var entity=scene.objects[objectId];metaObject._countEntities=0;if(entity){metaObject._countEntities++;}if(children){for(var _i545=0,len=children.length;_i545<len;_i545++){var childMetaObject=children[_i545];childMetaObject._countEntities=this._findEmptyNodes2(childMetaObject);metaObject._countEntities+=childMetaObject._countEntities;}}return metaObject._countEntities;}},{key:"_createStoreysNodes",value:function _createStoreysNodes(){var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var id in rootMetaObjects){this._createStoreysNodes2(rootMetaObjects[id],null,null,null);}}},{key:"_createStoreysNodes2",value:function _createStoreysNodes2(metaObject,buildingNode,storeyNode,typeNodes){if(this._pruneEmptyNodes&&metaObject._countEntities===0){return;}var metaObjectType=metaObject.type;var metaObjectName=metaObject.name;var children=metaObject.children;var objectId=metaObject.id;if(metaObjectType==="IfcBuilding"){buildingNode={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObject.metaModels.length===0?metaObjectName:this._rootNames[metaObject.metaModels[0].id]||(metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType),type:metaObjectType,parent:null,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};this._rootNodes.push(buildingNode);this._objectNodes[buildingNode.objectId]=buildingNode;this._nodeNodes[buildingNode.nodeId]=buildingNode;}else if(metaObjectType==="IfcBuildingStorey"){if(!buildingNode){this.error("Failed to build storeys hierarchy for model - model does not have an IfcBuilding object, or is not an IFC model");return;}storeyNode={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType,type:metaObjectType,parent:buildingNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};buildingNode.children.push(storeyNode);this._objectNodes[storeyNode.objectId]=storeyNode;this._nodeNodes[storeyNode.nodeId]=storeyNode;typeNodes={};}else{if(storeyNode){var objects=this._viewer.scene.objects;var object=objects[objectId];if(object){typeNodes=typeNodes||{};var typeNode=typeNodes[metaObjectType];if(!typeNode){typeNode={nodeId:"".concat(this._id,"-").concat(storeyNode.objectId,"-").concat(metaObjectType),objectId:"".concat(storeyNode.objectId,"-").concat(metaObjectType),title:metaObjectType,type:metaObjectType,parent:storeyNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};storeyNode.children.push(typeNode);this._objectNodes[typeNode.objectId]=typeNode;this._nodeNodes[typeNode.nodeId]=typeNode;typeNodes[metaObjectType]=typeNode;}var _node6={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType,type:metaObjectType,parent:typeNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};typeNode.children.push(_node6);this._objectNodes[_node6.objectId]=_node6;this._nodeNodes[_node6.nodeId]=_node6;}}}if(children){for(var _i546=0,len=children.length;_i546<len;_i546++){var childMetaObject=children[_i546];this._createStoreysNodes2(childMetaObject,buildingNode,storeyNode,typeNodes);}}}},{key:"_createTypesNodes",value:function _createTypesNodes(){var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var id in rootMetaObjects){this._createTypesNodes2(rootMetaObjects[id],null,null);}}},{key:"_createTypesNodes2",value:function _createTypesNodes2(metaObject,rootNode,typeNodes){if(this._pruneEmptyNodes&&metaObject._countEntities===0){return;}var metaObjectType=metaObject.type;var metaObjectName=metaObject.name;var children=metaObject.children;var objectId=metaObject.id;if(!metaObject.parent){rootNode={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObject.metaModels.length===0?metaObjectName:this._rootNames[metaObject.metaModels[0].id]||(metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType),type:metaObjectType,parent:null,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};this._rootNodes.push(rootNode);this._objectNodes[rootNode.objectId]=rootNode;this._nodeNodes[rootNode.nodeId]=rootNode;typeNodes={};}else{if(rootNode){var objects=this._viewer.scene.objects;var object=objects[objectId];if(object){var typeNode=typeNodes[metaObjectType];if(!typeNode){typeNode={nodeId:"".concat(this._id,"-").concat(rootNode.objectId,"-").concat(metaObjectType),objectId:"".concat(rootNode.objectId,"-").concat(metaObjectType),title:metaObjectType,type:metaObjectType,parent:rootNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};rootNode.children.push(typeNode);this._objectNodes[typeNode.objectId]=typeNode;this._nodeNodes[typeNode.nodeId]=typeNode;typeNodes[metaObjectType]=typeNode;}var _node7={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObjectName&&metaObjectName!==""&&metaObjectName!=="Default"?metaObjectName:metaObjectType,type:metaObjectType,parent:typeNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};typeNode.children.push(_node7);this._objectNodes[_node7.objectId]=_node7;this._nodeNodes[_node7.nodeId]=_node7;}}}if(children){for(var _i547=0,len=children.length;_i547<len;_i547++){var childMetaObject=children[_i547];this._createTypesNodes2(childMetaObject,rootNode,typeNodes);}}}},{key:"_createContainmentNodes",value:function _createContainmentNodes(){var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var id in rootMetaObjects){this._createContainmentNodes2(rootMetaObjects[id],null);}}},{key:"_createContainmentNodes2",value:function _createContainmentNodes2(metaObject,parent){if(this._pruneEmptyNodes&&metaObject._countEntities===0){return;}var metaObjectType=metaObject.type;var metaObjectName=metaObject.name||metaObjectType;var children=metaObject.children;var objectId=metaObject.id;var node={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:!parent?metaObject.metaModels.length===0?metaObjectName:this._rootNames[metaObject.metaModels[0].id]||metaObjectName:metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType,type:metaObjectType,parent:parent,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};if(parent){parent.children.push(node);}else{this._rootNodes.push(node);}this._objectNodes[node.objectId]=node;this._nodeNodes[node.nodeId]=node;if(children){for(var _i548=0,len=children.length;_i548<len;_i548++){var childMetaObject=children[_i548];this._createContainmentNodes2(childMetaObject,node);}}}},{key:"_doSortNodes",value:function _doSortNodes(){for(var _i549=0,len=this._rootNodes.length;_i549<len;_i549++){var rootNode=this._rootNodes[_i549];this._sortChildren(rootNode);}}},{key:"_sortChildren",value:function _sortChildren(node){var children=node.children;if(!children||children.length===0){return;}var firstChild=children[0];if((this._hierarchy==="storeys"||this._hierarchy==="containment")&&firstChild.type==="IfcBuildingStorey"){children.sort(this._getSpatialSortFunc());}else{children.sort(this._alphaSortFunc);}for(var _i550=0,len=children.length;_i550<len;_i550++){var _node8=children[_i550];this._sortChildren(_node8);}}},{key:"_getSpatialSortFunc",value:function _getSpatialSortFunc(){var _this161=this;var viewer=this.viewer;var scene=viewer.scene;var camera=scene.camera;return this._spatialSortFunc||(this._spatialSortFunc=function(storey1,storey2){if(camera.xUp);else if(camera.yUp);else;var metaScene=_this161.viewer.metaScene;var storey1MetaObject=metaScene.metaObjects[storey1.objectId];var storey2MetaObject=metaScene.metaObjects[storey2.objectId];if(storey1MetaObject&&storey1MetaObject.attributes&&storey1MetaObject.attributes.elevation!==undefined&&storey2MetaObject&&storey2MetaObject.attributes&&storey2MetaObject.attributes.elevation!==undefined){var elevation1=Number.parseFloat(storey1MetaObject.attributes.elevation);var elevation2=Number.parseFloat(storey2MetaObject.attributes.elevation);if(elevation1>elevation2){return-1;}if(elevation1<elevation2){return 1;}return 0;}else{return 0;}});}},{key:"_alphaSortFunc",value:function _alphaSortFunc(node1,node2){var title1=node1.title.toUpperCase();// FIXME: Should be case sensitive?
27740
+ return true;}},{key:"_createEnabledNodes",value:function _createEnabledNodes(){if(this._pruneEmptyNodes){this._findEmptyNodes();}switch(this._hierarchy){case"storeys":this._createStoreysNodes();if(this._rootNodes.length===0){this.error("Failed to build storeys hierarchy");}break;case"types":this._createTypesNodes();break;case"containment":default:this._createContainmentNodes();}if(this._sortNodes){this._doSortNodes();}this._synchNodesToEntities();this._createTrees();this.expandToDepth(this._autoExpandDepth);}},{key:"_createDisabledNodes",value:function _createDisabledNodes(){var rootNode=this._renderService.createRootNode();this._rootElement=rootNode;this._containerElement.appendChild(rootNode);var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var objectId in rootMetaObjects){var rootMetaObject=rootMetaObjects[objectId];var metaObjectType=rootMetaObject.type;var metaObjectName=rootMetaObject.name;var rootName=metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType;var childNode=this._renderService.createDisabledNodeElement(rootName);rootNode.appendChild(childNode);}}},{key:"_findEmptyNodes",value:function _findEmptyNodes(){var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var objectId in rootMetaObjects){this._findEmptyNodes2(rootMetaObjects[objectId]);}}},{key:"_findEmptyNodes2",value:function _findEmptyNodes2(metaObject){var countEntities=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var viewer=this.viewer;var scene=viewer.scene;var children=metaObject.children;var objectId=metaObject.id;var entity=scene.objects[objectId];metaObject._countEntities=0;if(entity){metaObject._countEntities++;}if(children){for(var _i545=0,len=children.length;_i545<len;_i545++){var childMetaObject=children[_i545];childMetaObject._countEntities=this._findEmptyNodes2(childMetaObject);metaObject._countEntities+=childMetaObject._countEntities;}}return metaObject._countEntities;}},{key:"_createStoreysNodes",value:function _createStoreysNodes(){var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var id in rootMetaObjects){this._createStoreysNodes2(rootMetaObjects[id],null,null,null,null);}}},{key:"_createStoreysNodes2",value:function _createStoreysNodes2(metaObject,projectNode,buildingNode,storeyNode,typeNodes){if(this._pruneEmptyNodes&&metaObject._countEntities===0){return;}var metaObjectType=metaObject.type;var metaObjectName=metaObject.name;var children=metaObject.children;var objectId=metaObject.id;if(this._showProjectNode&&metaObjectType==='IfcProject'){projectNode={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObject.metaModels.length===0?metaObjectName:this._rootNames[metaObject.metaModels[0].id]||(metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType),type:metaObjectType,parent:null,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};this._rootNodes.push(projectNode);this._objectNodes[projectNode.objectId]=projectNode;this._nodeNodes[projectNode.nodeId]=projectNode;}else if(metaObjectType==="IfcBuilding"){buildingNode={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObject.metaModels.length===0?metaObjectName:this._rootNames[metaObject.metaModels[0].id]||(metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType),type:metaObjectType,parent:projectNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};if(projectNode){projectNode.children.push(buildingNode);}else{this._rootNodes.push(buildingNode);}this._objectNodes[buildingNode.objectId]=buildingNode;this._nodeNodes[buildingNode.nodeId]=buildingNode;}else if(metaObjectType==="IfcBuildingStorey"){if(!buildingNode){this.error("Failed to build storeys hierarchy for model - model does not have an IfcBuilding object, or is not an IFC model");return;}storeyNode={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType,type:metaObjectType,parent:buildingNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};buildingNode.children.push(storeyNode);this._objectNodes[storeyNode.objectId]=storeyNode;this._nodeNodes[storeyNode.nodeId]=storeyNode;typeNodes={};}else{if(storeyNode){var objects=this._viewer.scene.objects;var object=objects[objectId];if(object){typeNodes=typeNodes||{};var typeNode=typeNodes[metaObjectType];if(!typeNode){typeNode={nodeId:"".concat(this._id,"-").concat(storeyNode.objectId,"-").concat(metaObjectType),objectId:"".concat(storeyNode.objectId,"-").concat(metaObjectType),title:metaObjectType,type:metaObjectType,parent:storeyNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};storeyNode.children.push(typeNode);this._objectNodes[typeNode.objectId]=typeNode;this._nodeNodes[typeNode.nodeId]=typeNode;typeNodes[metaObjectType]=typeNode;}var _node6={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType,type:metaObjectType,parent:typeNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};typeNode.children.push(_node6);this._objectNodes[_node6.objectId]=_node6;this._nodeNodes[_node6.nodeId]=_node6;}}}if(children){for(var _i546=0,len=children.length;_i546<len;_i546++){var childMetaObject=children[_i546];this._createStoreysNodes2(childMetaObject,projectNode,buildingNode,storeyNode,typeNodes);}}}},{key:"_createTypesNodes",value:function _createTypesNodes(){var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var id in rootMetaObjects){this._createTypesNodes2(rootMetaObjects[id],null,null);}}},{key:"_createTypesNodes2",value:function _createTypesNodes2(metaObject,rootNode,typeNodes){if(this._pruneEmptyNodes&&metaObject._countEntities===0){return;}var metaObjectType=metaObject.type;var metaObjectName=metaObject.name;var children=metaObject.children;var objectId=metaObject.id;if(!metaObject.parent){rootNode={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObject.metaModels.length===0?metaObjectName:this._rootNames[metaObject.metaModels[0].id]||(metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType),type:metaObjectType,parent:null,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};this._rootNodes.push(rootNode);this._objectNodes[rootNode.objectId]=rootNode;this._nodeNodes[rootNode.nodeId]=rootNode;typeNodes={};}else{if(rootNode){var objects=this._viewer.scene.objects;var object=objects[objectId];if(object){var typeNode=typeNodes[metaObjectType];if(!typeNode){typeNode={nodeId:"".concat(this._id,"-").concat(rootNode.objectId,"-").concat(metaObjectType),objectId:"".concat(rootNode.objectId,"-").concat(metaObjectType),title:metaObjectType,type:metaObjectType,parent:rootNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};rootNode.children.push(typeNode);this._objectNodes[typeNode.objectId]=typeNode;this._nodeNodes[typeNode.nodeId]=typeNode;typeNodes[metaObjectType]=typeNode;}var _node7={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:metaObjectName&&metaObjectName!==""&&metaObjectName!=="Default"?metaObjectName:metaObjectType,type:metaObjectType,parent:typeNode,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};typeNode.children.push(_node7);this._objectNodes[_node7.objectId]=_node7;this._nodeNodes[_node7.nodeId]=_node7;}}}if(children){for(var _i547=0,len=children.length;_i547<len;_i547++){var childMetaObject=children[_i547];this._createTypesNodes2(childMetaObject,rootNode,typeNodes);}}}},{key:"_createContainmentNodes",value:function _createContainmentNodes(){var rootMetaObjects=this._viewer.metaScene.rootMetaObjects;for(var id in rootMetaObjects){this._createContainmentNodes2(rootMetaObjects[id],null);}}},{key:"_createContainmentNodes2",value:function _createContainmentNodes2(metaObject,parent){if(this._pruneEmptyNodes&&metaObject._countEntities===0){return;}var metaObjectType=metaObject.type;var metaObjectName=metaObject.name||metaObjectType;var children=metaObject.children;var objectId=metaObject.id;var node={nodeId:"".concat(this._id,"-").concat(objectId),objectId:objectId,title:!parent?metaObject.metaModels.length===0?metaObjectName:this._rootNames[metaObject.metaModels[0].id]||metaObjectName:metaObjectName&&metaObjectName!==""&&metaObjectName!=="Undefined"&&metaObjectName!=="Default"?metaObjectName:metaObjectType,type:metaObjectType,parent:parent,numEntities:0,numVisibleEntities:0,checked:false,xrayed:false,children:[]};if(parent){parent.children.push(node);}else{this._rootNodes.push(node);}this._objectNodes[node.objectId]=node;this._nodeNodes[node.nodeId]=node;if(children){for(var _i548=0,len=children.length;_i548<len;_i548++){var childMetaObject=children[_i548];this._createContainmentNodes2(childMetaObject,node);}}}},{key:"_doSortNodes",value:function _doSortNodes(){for(var _i549=0,len=this._rootNodes.length;_i549<len;_i549++){var rootNode=this._rootNodes[_i549];this._sortChildren(rootNode);}}},{key:"_sortChildren",value:function _sortChildren(node){var children=node.children;if(!children||children.length===0){return;}var firstChild=children[0];if((this._hierarchy==="storeys"||this._hierarchy==="containment")&&firstChild.type==="IfcBuildingStorey"){children.sort(this._getSpatialSortFunc());}else{children.sort(this._alphaSortFunc);}for(var _i550=0,len=children.length;_i550<len;_i550++){var _node8=children[_i550];this._sortChildren(_node8);}}},{key:"_getSpatialSortFunc",value:function _getSpatialSortFunc(){var _this161=this;var viewer=this.viewer;var scene=viewer.scene;var camera=scene.camera;return this._spatialSortFunc||(this._spatialSortFunc=function(storey1,storey2){if(camera.xUp);else if(camera.yUp);else;var metaScene=_this161.viewer.metaScene;var storey1MetaObject=metaScene.metaObjects[storey1.objectId];var storey2MetaObject=metaScene.metaObjects[storey2.objectId];if(storey1MetaObject&&storey1MetaObject.attributes&&storey1MetaObject.attributes.elevation!==undefined&&storey2MetaObject&&storey2MetaObject.attributes&&storey2MetaObject.attributes.elevation!==undefined){var elevation1=Number.parseFloat(storey1MetaObject.attributes.elevation);var elevation2=Number.parseFloat(storey2MetaObject.attributes.elevation);if(elevation1>elevation2){return-1;}if(elevation1<elevation2){return 1;}return 0;}else{return 0;}});}},{key:"_alphaSortFunc",value:function _alphaSortFunc(node1,node2){var title1=node1.title.toUpperCase();// FIXME: Should be case sensitive?
27740
27741
  var title2=node2.title.toUpperCase();if(title1<title2){return-1;}if(title1>title2){return 1;}return 0;}},{key:"_synchNodesToEntities",value:function _synchNodesToEntities(){var objectIds=Object.keys(this.viewer.metaScene.metaObjects);var metaObjects=this._viewer.metaScene.metaObjects;var objects=this._viewer.scene.objects;for(var _i551=0,len=objectIds.length;_i551<len;_i551++){var objectId=objectIds[_i551];var metaObject=metaObjects[objectId];if(metaObject){var _node9=this._objectNodes[objectId];if(_node9){var entity=objects[objectId];if(entity){var visible=entity.visible;_node9.numEntities=1;_node9.xrayed=entity.xrayed;if(visible){_node9.numVisibleEntities=1;_node9.checked=true;}else{_node9.numVisibleEntities=0;_node9.checked=false;}var parent=_node9.parent;// Synch parents
27741
27742
  while(parent){parent.numEntities++;if(visible){parent.numVisibleEntities++;parent.checked=true;}parent=parent.parent;}}}}}}},{key:"_withNodeTree",value:function _withNodeTree(node,callback){callback(node);var children=node.children;if(!children){return;}for(var _i552=0,len=children.length;_i552<len;_i552++){this._withNodeTree(children[_i552],callback);}}},{key:"_createTrees",value:function _createTrees(){var _this162=this;if(this._rootNodes.length===0){return;}var rootNodeElements=this._rootNodes.map(function(rootNode){return _this162._createNodeElement(rootNode);});var rootNode=this._renderService.createRootNode();rootNodeElements.forEach(function(nodeElement){rootNode.appendChild(nodeElement);});this._containerElement.appendChild(rootNode);this._rootElement=rootNode;}},{key:"_createNodeElement",value:function _createNodeElement(node){var _this163=this;var contextmenuHandler=function contextmenuHandler(event){_this163.fire("contextmenu",{event:event,viewer:_this163._viewer,treeViewPlugin:_this163,treeViewNode:node});event.preventDefault();};var onclickHandler=function onclickHandler(event){_this163.fire("nodeTitleClicked",{event:event,viewer:_this163._viewer,treeViewPlugin:_this163,treeViewNode:node});event.preventDefault();};return this._renderService.createNodeElement(node,this._switchExpandHandler,this._checkboxChangeHandler,contextmenuHandler,onclickHandler);}},{key:"_expandSwitchElement",value:function _expandSwitchElement(switchElement){var _this164=this;var expanded=this._renderService.isExpanded(switchElement);if(expanded){return;}var nodeId=this._renderService.getId(switchElement);var nodeElements=this._nodeNodes[nodeId].children.map(function(node){return _this164._createNodeElement(node);});this._renderService.addChildren(switchElement,nodeElements);this._renderService.expand(switchElement,this._switchExpandHandler,this._switchCollapseHandler);}},{key:"_collapseNode",value:function _collapseNode(nodeId){var switchElement=this._renderService.getSwitchElement(nodeId);this._collapseSwitchElement(switchElement);}},{key:"_collapseSwitchElement",value:function _collapseSwitchElement(switchElement){this._renderService.collapse(switchElement,this._switchExpandHandler,this._switchCollapseHandler);}}]);return TreeViewPlugin;}(Plugin);/**
27742
27743
  * For each Entity in its Scene, efficiently combines updates from multiple culling systems into a single "culled" state.