src/explorer/Classes.js
import {Controller} from "../Controller.js";
import {TreeViewPlugin} from "@xeokit/xeokit-sdk/src/plugins/TreeViewPlugin/TreeViewPlugin.js";
import {ContextMenu} from "@xeokit/xeokit-sdk/src/extras/ContextMenu/ContextMenu.js";
import {TreeViewContextMenuItems} from "../contextMenuItems/TreeViewContextMenuItems.js";
/** @private */
class Classes extends Controller {
constructor(parent, cfg = {}) {
super(parent);
if (!cfg.classesTabElement) {
throw "Missing config: classesTabElement";
}
if (!cfg.showAllClassesButtonElement) {
throw "Missing config: showAllClassesButtonElement";
}
if (!cfg.hideAllClassesButtonElement) {
throw "Missing config: hideAllClassesButtonElement";
}
if (!cfg.classesElement) {
throw "Missing config: classesElement";
}
this._classesTabElement = cfg.classesTabElement;
this._showAllClassesButtonElement = cfg.showAllClassesButtonElement;
this._hideAllClassesButtonElement = cfg.hideAllClassesButtonElement;
this._classesTabButtonElement = this._classesTabElement.querySelector(".xeokit-tab-btn");
if (!this._classesTabButtonElement) {
throw "Missing DOM element: xeokit-tab-btn";
}
const classesElement = cfg.classesElement;
this._treeView = new TreeViewPlugin(this.viewer, {
containerElement: classesElement,
hierarchy: "types",
autoAddModels: false
});
this._treeViewContextMenu = new ContextMenu({
items: TreeViewContextMenuItems
});
this._treeView.on("contextmenu", (e) => {
this._treeViewContextMenu.show(e.event.pageX, e.event.pageY);
this._treeViewContextMenu.context = {
viewer: e.viewer,
treeViewPlugin: e.treeViewPlugin,
treeViewNode: e.treeViewNode
};
});
this._onModelLoaded = this.viewer.scene.on("modelLoaded", (modelId) =>{
if (this.viewer.metaScene.metaModels[modelId]) {
const modelInfo = this.viewerUI._controllers.models.getModelInfo(modelId);
if (!modelInfo) {
return;
}
this._treeView.addModel(modelId, {
rootName: modelInfo.name
});
}
});
this._onModelUnloaded = this.viewer.scene.on("modelUnloaded", (modelId) => {
if (this.viewer.metaScene.metaModels[modelId]) {
this._treeView.removeModel(modelId);
}
});
this.viewerUI.on("reset", () => {
this._treeView.collapse();
});
}
setEnabled(enabled) {
if (!enabled) {
this._classesTabButtonElement.classList.add("disabled");
this._showAllClassesButtonElement.classList.add("disabled");
this._hideAllClassesButtonElement.classList.add("disabled");
} else {
this._classesTabButtonElement.classList.remove("disabled");
this._showAllClassesButtonElement.classList.remove("disabled");
this._hideAllClassesButtonElement.classList.remove("disabled");
}
}
showNodeInTreeView(objectId) {
this._treeView.collapse();
this._treeView.showNode(objectId);
}
destroy() {
super.destroy();
this._treeView.destroy();
this._treeViewContextMenu.destroy();
this.viewer.scene.off(this._onModelLoaded);
this.viewer.scene.off(this._onModelUnloaded);
}
}
export {Classes};