Initial import of NODEDC BIM Viewer
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/Classes.js | xeokit-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="BIM viewer built on xeokit"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-viewer"><meta property="og:site_name" content="xeokit-viewer"><meta property="og:title" content="xeokit-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="BIM viewer built on xeokit"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-viewer"><meta property="twitter:description" content="BIM viewer built on xeokit"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/ViewerUI.js~ViewerUI.html">ViewerUI</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#ifcobjectdefaults">IFCObjectDefaults</a><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-IFCObjectDefaults">IFCObjectDefaults</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/Classes.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">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};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,192 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/ClassesExplorer.js | xeokit-bim-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="BIM viewer built on xeokit"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-bim-viewer"><meta property="og:site_name" content="xeokit-bim-viewer"><meta property="og:title" content="xeokit-bim-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="BIM viewer built on xeokit"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-bim-viewer"><meta property="twitter:description" content="BIM viewer built on xeokit"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-bim-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/BIMViewer.js~BIMViewer.html">BIMViewer</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#collision">collision</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/collision/ObjectsKdTree3.js~ObjectsKdTree3.html">ObjectsKdTree3</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/ClassesExplorer.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import {TreeViewPlugin, math} from "@xeokit/xeokit-sdk/dist/xeokit-sdk.es.js";
|
||||
import {Controller} from "../Controller.js";
|
||||
import {TreeViewContextMenu} from "../contextMenus/TreeViewContextMenu.js";
|
||||
|
||||
/** @private */
|
||||
class ClassesExplorer 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,
|
||||
pruneEmptyNodes: true
|
||||
});
|
||||
|
||||
this._treeViewContextMenu = new TreeViewContextMenu(this.bimViewer, {
|
||||
hideOnAction: true
|
||||
});
|
||||
|
||||
this._treeView.on("contextmenu", (e) => {
|
||||
this._treeViewContextMenu.context = {
|
||||
bimViewer: this.bimViewer,
|
||||
viewer: e.viewer,
|
||||
treeViewPlugin: e.treeViewPlugin,
|
||||
treeViewNode: e.treeViewNode
|
||||
};
|
||||
this._treeViewContextMenu.show(e.event.pageX, e.event.pageY);
|
||||
});
|
||||
|
||||
this._treeView.on("nodeTitleClicked", (e) => {
|
||||
const scene = this.viewer.scene;
|
||||
const objectIds = [];
|
||||
e.treeViewPlugin.withNodeTree(e.treeViewNode, (treeViewNode) => {
|
||||
if (treeViewNode.objectId) {
|
||||
objectIds.push(treeViewNode.objectId);
|
||||
}
|
||||
});
|
||||
const checked = e.treeViewNode.checked;
|
||||
if (checked) {
|
||||
scene.setObjectsXRayed(objectIds, false);
|
||||
scene.setObjectsVisible(objectIds, false);
|
||||
scene.setObjectsPickable(objectIds, true);
|
||||
} else {
|
||||
scene.setObjectsXRayed(objectIds, false);
|
||||
scene.setObjectsVisible(objectIds, true);
|
||||
scene.setObjectsPickable(objectIds, true);
|
||||
}
|
||||
});
|
||||
|
||||
this._onModelLoaded = this.viewer.scene.on("modelLoaded", (modelId) => {
|
||||
if (this.viewer.metaScene.metaModels[modelId]) {
|
||||
const modelInfo = this.bimViewer._modelsExplorer.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.bimViewer.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");
|
||||
}
|
||||
}
|
||||
|
||||
expandTreeViewToDepth(depth) {
|
||||
this._treeView.expandToDepth(depth);
|
||||
}
|
||||
|
||||
showNodeInTreeView(objectId) {
|
||||
this._treeView.collapse();
|
||||
this._treeView.showNode(objectId);
|
||||
}
|
||||
|
||||
unShowNodeInTreeView() {
|
||||
this._treeView.unShowNode();
|
||||
}
|
||||
|
||||
destroy() {
|
||||
super.destroy();
|
||||
this._treeView.destroy();
|
||||
this._treeViewContextMenu.destroy();
|
||||
this.viewer.scene.off(this._onModelLoaded);
|
||||
this.viewer.scene.off(this._onModelUnloaded);
|
||||
}
|
||||
}
|
||||
|
||||
export {ClassesExplorer};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,191 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/Explorer.js | xeokit-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="View large 3D BIM models in all major browsers and collaborate on issues using BCF"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-viewer"><meta property="og:site_name" content="xeokit-viewer"><meta property="og:title" content="xeokit-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="View large 3D BIM models in all major browsers and collaborate on issues using BCF"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-viewer"><meta property="twitter:description" content="View large 3D BIM models in all major browsers and collaborate on issues using BCF"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/Controller.js~Controller.html">Controller</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/ViewerUI.js~ViewerUI.html">ViewerUI</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#explorer">explorer</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/explorer/Classes.js~Classes.html">Classes</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/explorer/Explorer.js~Explorer.html">Explorer</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/explorer/Models.js~Models.html">Models</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/explorer/Objects.js~Objects.html">Objects</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/explorer/Storeys.js~Storeys.html">Storeys</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#toolbar">toolbar</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/BCFMode.js~BCFMode.html">BCFMode</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/FirstPersonMode.js~FirstPersonMode.html">FirstPersonMode</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/FitAction.js~FitAction.html">FitAction</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/HideMode.js~HideMode.html">HideMode</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/NavCubeMode.js~NavCubeMode.html">NavCubeMode</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/OrthoMode.js~OrthoMode.html">OrthoMode</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/QueryMode.js~QueryMode.html">QueryMode</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/ResetAction.js~ResetAction.html">ResetAction</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/SectionMode.js~SectionMode.html">SectionMode</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/SelectMode.js~SelectMode.html">SelectMode</a></span></span></li>
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/toolbar/Toolbar.js~Toolbar.html">Toolbar</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/Explorer.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import {Controller} from "../Controller.js";
|
||||
import {Classes} from "./Classes.js";
|
||||
import {Objects} from "./Objects.js";
|
||||
import {Models} from "./Models.js";
|
||||
|
||||
/**
|
||||
* Manages the explorer trees.
|
||||
*
|
||||
* Located at {@link Toolbar#explorer}.
|
||||
*/
|
||||
class Explorer extends Controller {
|
||||
|
||||
/** @private */
|
||||
constructor(parent, cfg = {}) {
|
||||
|
||||
super(parent);
|
||||
|
||||
/**
|
||||
*
|
||||
* @type {Models}
|
||||
*/
|
||||
this.models = new Models(this, cfg);
|
||||
|
||||
/**
|
||||
*
|
||||
* @type {Objects}
|
||||
*/
|
||||
this.objects = new Objects(this, cfg);
|
||||
|
||||
/**
|
||||
*
|
||||
* @type {Classes}
|
||||
*/
|
||||
this.classes = new Classes(this, cfg);
|
||||
|
||||
// /**
|
||||
// *
|
||||
// * @type {Storeys}
|
||||
// */
|
||||
// this.storeys = new Storeys(this, cfg);
|
||||
|
||||
$("#unloadAllModels").on('click', (event) => {
|
||||
this._unloadAllModels();
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
$("#showAllObjects").on('click', (event) => {
|
||||
this._showAllObjects();
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
$("#hideAllObjects").on('click', (event) => {
|
||||
this._hideAllObjects();
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
$("#showAllClasses").on('click', (event) => {
|
||||
this._showAllObjects();
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
$("#hideAllClasses").on('click', (event) => {
|
||||
this._hideAllObjects();
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
// Handling model load events here ensures that we
|
||||
// are able to fire "modelLoaded" after both trees updated.
|
||||
|
||||
this.models.on("modelLoaded", (modelId) => {
|
||||
this.objects._addModel(modelId);
|
||||
this.classes._addModel(modelId);
|
||||
this.fire("modelLoaded", modelId);
|
||||
});
|
||||
|
||||
this.models.on("modelUnloaded", (modelId) => {
|
||||
this.objects._removeModel(modelId);
|
||||
this.classes._removeModel(modelId);
|
||||
this.fire("modelUnloaded", modelId);
|
||||
});
|
||||
}
|
||||
|
||||
_unloadAllModels() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
_showAllObjects() {
|
||||
|
||||
this.objects.muteEvents();
|
||||
this.classes.muteEvents();
|
||||
|
||||
this.viewer.scene.setObjectsVisible(this.viewer.scene.objectIds, true);
|
||||
|
||||
this.objects.selectAll();
|
||||
this.classes.selectAll();
|
||||
|
||||
this.objects.unmuteEvents();
|
||||
this.classes.unmuteEvents();
|
||||
}
|
||||
|
||||
_hideAllObjects() {
|
||||
|
||||
this.objects.muteEvents();
|
||||
this.classes.muteEvents();
|
||||
|
||||
this.viewer.scene.setObjectsVisible(this.viewer.scene.visibleObjectIds, false);
|
||||
|
||||
this.objects.deselectAll();
|
||||
this.classes.deselectAll();
|
||||
|
||||
this.objects.unmuteEvents();
|
||||
this.classes.unmuteEvents();
|
||||
}
|
||||
|
||||
destroy() {
|
||||
super.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
export {Explorer};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,264 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/Models.js | xeokit-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="BIM viewer built on xeokit"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-viewer"><meta property="og:site_name" content="xeokit-viewer"><meta property="og:title" content="xeokit-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="BIM viewer built on xeokit"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-viewer"><meta property="twitter:description" content="BIM viewer built on xeokit"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/ViewerUI.js~ViewerUI.html">ViewerUI</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#ifcobjectdefaults">IFCObjectDefaults</a><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-IFCObjectDefaults">IFCObjectDefaults</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/Models.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import {Controller} from "../Controller.js";
|
||||
import {XKTLoaderPlugin} from "@xeokit/xeokit-sdk/src/plugins/XKTLoaderPlugin/XKTLoaderPlugin.js";
|
||||
import {math} from "@xeokit/xeokit-sdk/src/viewer/scene/math/math.js";
|
||||
import {IFCObjectDefaults} from "../IFCObjectDefaults/IFCObjectDefaults.js";
|
||||
|
||||
const tempVec3 = math.vec3();
|
||||
|
||||
/** @private */
|
||||
class Models extends Controller {
|
||||
|
||||
constructor(parent, cfg) {
|
||||
|
||||
super(parent, cfg);
|
||||
|
||||
if (!cfg.modelsTabElement) {
|
||||
throw "Missing config: modelsTabElement";
|
||||
}
|
||||
|
||||
if (!cfg.unloadModelsButtonElement) {
|
||||
throw "Missing config: unloadModelsButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.modelsElement) {
|
||||
throw "Missing config: modelsElement";
|
||||
}
|
||||
|
||||
this._modelsTabElement = cfg.modelsTabElement;
|
||||
this._unloadModelsButtonElement = cfg.unloadModelsButtonElement;
|
||||
this._modelsElement = cfg.modelsElement;
|
||||
this._modelsTabButtonElement = this._modelsTabElement.querySelector(".xeokit-tab-btn");
|
||||
|
||||
if (!this._modelsTabButtonElement) {
|
||||
throw "Missing DOM element: ,xeokit-tab-btn";
|
||||
}
|
||||
|
||||
this._xktLoader = new XKTLoaderPlugin(this.viewer, {
|
||||
// objectDefaults: IFCObjectDefaults
|
||||
});
|
||||
this._modelsInfo = {};
|
||||
this._numModelsLoaded = 0;
|
||||
this._projectId = null;
|
||||
}
|
||||
|
||||
_loadProject(projectId, done, error) {
|
||||
const params = {};
|
||||
this.server.getProject(projectId, (projectInfo) => {
|
||||
this._projectId = projectId;
|
||||
var html = "";
|
||||
const modelsInfo = projectInfo.models || [];
|
||||
this._modelsInfo = {};
|
||||
for (let i = 0, len = modelsInfo.length; i < len; i++) {
|
||||
const modelInfo = modelsInfo[i];
|
||||
this._modelsInfo[modelInfo.id] = modelInfo;
|
||||
html += "<div class='xeokit-form-check'>";
|
||||
html += "<input id='" + modelInfo.id + "' type='checkbox' value=''>" + modelInfo.name;
|
||||
html += "</div>";
|
||||
}
|
||||
this._modelsElement.innerHTML = html;
|
||||
for (let i = 0, len = modelsInfo.length; i < len; i++) {
|
||||
const modelInfo = modelsInfo[i];
|
||||
const modelId = modelInfo.id;
|
||||
const checkBox = document.getElementById("" + modelId);
|
||||
checkBox.addEventListener("click", () => {
|
||||
if (checkBox.checked) {
|
||||
this._loadModel(modelId);
|
||||
} else {
|
||||
this._unloadModel(modelInfo.id);
|
||||
}
|
||||
});
|
||||
if (modelInfo.default) {
|
||||
checkBox.checked = true;
|
||||
this._loadModel(modelId, done, error); // TODO: buffer and load at end
|
||||
}
|
||||
}
|
||||
}, (errMsg) => {
|
||||
this.error(errMsg);
|
||||
if (error) {
|
||||
error(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_loadModel(modelId, done, error) {
|
||||
const modelInfo = this._modelsInfo[modelId];
|
||||
if (!modelInfo) {
|
||||
if (error) {
|
||||
error("Model not in current project");
|
||||
}
|
||||
return;
|
||||
}
|
||||
this.viewerUI._controllers.busyModal.show("Loading " + modelInfo.name);
|
||||
this.server.getMetadata(this._projectId, modelId,
|
||||
(json) => {
|
||||
this.server.getGeometry(this._projectId, modelId,
|
||||
(arraybuffer) => {
|
||||
const model = this._xktLoader.load({
|
||||
id: modelId,
|
||||
metaModelData: json,
|
||||
xkt: arraybuffer,
|
||||
excludeUnclassifiedObjects: true,
|
||||
edges: true,
|
||||
position: modelInfo.position,
|
||||
scale: modelInfo.scale,
|
||||
rotation: modelInfo.rotation,
|
||||
matrix: modelInfo.matrix
|
||||
});
|
||||
model.on("loaded", () => {
|
||||
const scene = this.viewer.scene;
|
||||
const aabb = scene.getAABB(scene.visibleObjectIds);
|
||||
this._numModelsLoaded++;
|
||||
this._unloadModelsButtonElement.classList.remove("disabled");
|
||||
if (this._numModelsLoaded === 1) { // Jump camera when only one model
|
||||
this.viewer.cameraFlight.jumpTo({
|
||||
aabb: aabb
|
||||
});
|
||||
this.viewer.cameraControl.pivotPos = math.getAABB3Center(aabb, tempVec3);
|
||||
this.fire("modelLoaded", modelId);
|
||||
this.viewerUI._controllers.busyModal.hide();
|
||||
if (done) {
|
||||
done();
|
||||
}
|
||||
} else { // Fly camera when multiple models
|
||||
this.viewer.cameraFlight.flyTo({
|
||||
aabb: aabb
|
||||
}, () => {
|
||||
this.viewer.cameraControl.pivotPos = math.getAABB3Center(aabb, tempVec3);
|
||||
this.fire("modelLoaded", modelId);
|
||||
this.viewerUI._controllers.busyModal.hide();
|
||||
if (done) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
(errMsg) => {
|
||||
this.error(errMsg);
|
||||
this.viewerUI._controllers.busyModal.hide();
|
||||
});
|
||||
},
|
||||
(errMsg) => {
|
||||
this.error(errMsg);
|
||||
this.viewerUI._controllers.busyModal.hide();
|
||||
});
|
||||
}
|
||||
|
||||
_unloadModel(modelId) {
|
||||
const model = this.viewer.scene.models[modelId];
|
||||
if (!model) {
|
||||
this.error("Model not loaded: " + modelId);
|
||||
return;
|
||||
}
|
||||
model.destroy();
|
||||
const scene = this.viewer.scene;
|
||||
const aabb = scene.getAABB(scene.visibleObjectIds);
|
||||
document.getElementById("" + modelId).checked = false;
|
||||
this._numModelsLoaded--;
|
||||
if (this._numModelsLoaded > 0) {
|
||||
this._unloadModelsButtonElement.classList.remove("disabled");
|
||||
} else {
|
||||
this._unloadModelsButtonElement.classList.add("disabled");
|
||||
}
|
||||
this.viewer.cameraFlight.flyTo({
|
||||
aabb: aabb
|
||||
}, () => {
|
||||
this.viewer.cameraControl.pivotPos = math.getAABB3Center(aabb, tempVec3);
|
||||
this.fire("modelUnloaded", modelId);
|
||||
});
|
||||
}
|
||||
|
||||
_unloadModels() {
|
||||
const models = this.viewer.scene.models;
|
||||
const modelIds = Object.keys(models);
|
||||
for (var i = 0, len = modelIds.length; i < len; i++) {
|
||||
const modelId = modelIds[i];
|
||||
this._unloadModel(modelId);
|
||||
}
|
||||
}
|
||||
|
||||
getNumModelsLoaded() {
|
||||
return this._numModelsLoaded;
|
||||
}
|
||||
|
||||
getModelsInfo() {
|
||||
return this._modelsInfo;
|
||||
}
|
||||
|
||||
getModelInfo(modelId) {
|
||||
return this._modelsInfo[modelId];
|
||||
}
|
||||
|
||||
setEnabled(enabled) {
|
||||
if (!enabled) {
|
||||
this._modelsTabButtonElement.classList.add("disabled");
|
||||
this._unloadModelsButtonElement.classList.add("disabled");
|
||||
} else {
|
||||
this._modelsTabButtonElement.classList.remove("disabled");
|
||||
this._unloadModelsButtonElement.classList.remove("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
/** @private */
|
||||
destroy() {
|
||||
super.destroy();
|
||||
this._xktLoader.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
export {Models};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,533 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/ModelsExplorer.js | xeokit-bim-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="BIM viewer built on xeokit"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-bim-viewer"><meta property="og:site_name" content="xeokit-bim-viewer"><meta property="og:title" content="xeokit-bim-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="BIM viewer built on xeokit"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-bim-viewer"><meta property="twitter:description" content="BIM viewer built on xeokit"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-bim-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/BIMViewer.js~BIMViewer.html">BIMViewer</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#collision">collision</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/collision/ObjectsKdTree3.js~ObjectsKdTree3.html">ObjectsKdTree3</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/ModelsExplorer.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import {math, XKTLoaderPlugin} from "@xeokit/xeokit-sdk/dist/xeokit-sdk.es.js";
|
||||
import {Controller} from "../Controller.js";
|
||||
import {ModelsContextMenu} from "../contextMenus/ModelsContextMenu.js";
|
||||
|
||||
const tempVec3a = math.vec3();
|
||||
|
||||
|
||||
/**
|
||||
* Custom data access strategy for {@link XKTLoaderPlugin}.
|
||||
* @private
|
||||
*/
|
||||
class BIMViewerDataSource {
|
||||
|
||||
constructor(server) {
|
||||
this._server = server;
|
||||
}
|
||||
|
||||
setProjectId(projectId) {
|
||||
this._projectId = projectId;
|
||||
}
|
||||
|
||||
setModelId(modelId) {
|
||||
this._modelId = modelId;
|
||||
}
|
||||
|
||||
getManifest(src, ok, error) {
|
||||
this._server.getSplitModelManifest(this._projectId, this._modelId, src, ok, error);
|
||||
}
|
||||
|
||||
getMetaModel(src, ok, error) {
|
||||
this._server.getSplitModelMetadata(this._projectId, this._modelId, src, ok, error);
|
||||
}
|
||||
|
||||
getXKT(src, ok, error) {
|
||||
this._server.getSplitModelGeometry(this._projectId, this._modelId, src, ok, error)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** @private */
|
||||
class ModelsExplorer extends Controller {
|
||||
|
||||
constructor(parent, cfg) {
|
||||
|
||||
super(parent, cfg);
|
||||
|
||||
if (!cfg.modelsTabElement) {
|
||||
throw "Missing config: modelsTabElement";
|
||||
}
|
||||
|
||||
if (!cfg.unloadModelsButtonElement) {
|
||||
throw "Missing config: unloadModelsButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.modelsElement) {
|
||||
throw "Missing config: modelsElement";
|
||||
}
|
||||
|
||||
this._enableAddModels = !!cfg.enableEditModels;
|
||||
this._modelsTabElement = cfg.modelsTabElement;
|
||||
this._loadModelsButtonElement = cfg.loadModelsButtonElement;
|
||||
this._unloadModelsButtonElement = cfg.unloadModelsButtonElement;
|
||||
this._addModelButtonElement = cfg.addModelButtonElement;
|
||||
this._modelsElement = cfg.modelsElement;
|
||||
this._modelsTabButtonElement = this._modelsTabElement.querySelector(".xeokit-tab-btn");
|
||||
|
||||
if (!this._modelsTabButtonElement) {
|
||||
throw "Missing DOM element: ,xeokit-tab-btn";
|
||||
}
|
||||
|
||||
this._dataSource = new BIMViewerDataSource(this.server);
|
||||
|
||||
this._xktLoader = new XKTLoaderPlugin(this.viewer, {
|
||||
dataSource: this._dataSource
|
||||
});
|
||||
|
||||
this._modelsContextMenu = new ModelsContextMenu({
|
||||
enableEditModels: cfg.enableEditModels,
|
||||
hideOnAction: true
|
||||
});
|
||||
|
||||
this._modelsInfo = {};
|
||||
this._numModels = 0;
|
||||
this._numModelsLoaded = 0;
|
||||
this._projectId = null;
|
||||
}
|
||||
|
||||
setObjectColors(objectColors) {
|
||||
this._xktLoader.objectDefaults = objectColors;
|
||||
}
|
||||
|
||||
loadProject(projectId, done, error) {
|
||||
this.server.getProject(projectId, (projectInfo) => {
|
||||
this.unloadProject();
|
||||
this._projectId = projectId;
|
||||
this._modelsInfo = {};
|
||||
this._numModels = 0;
|
||||
this._parseProject(projectInfo, done);
|
||||
if (this._numModelsLoaded < this._numModels) {
|
||||
this._loadModelsButtonElement.classList.remove("disabled");
|
||||
}
|
||||
if (this._numModelsLoaded > 0) {
|
||||
this._unloadModelsButtonElement.classList.remove("disabled");
|
||||
}
|
||||
if (this._enableAddModels) {
|
||||
this._addModelButtonElement.classList.remove("disabled");
|
||||
}
|
||||
}, (errMsg) => {
|
||||
this.error(errMsg);
|
||||
if (error) {
|
||||
error(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_parseProject(projectInfo, done) {
|
||||
this._buildModelsMenu(projectInfo);
|
||||
this._parseViewerConfigs(projectInfo);
|
||||
this._parseViewerContent(projectInfo, () => {
|
||||
this._parseViewerState(projectInfo, () => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
_buildModelsMenu(projectInfo) {
|
||||
var html = "";
|
||||
const modelsInfo = projectInfo.models || [];
|
||||
this._modelsInfo = {};
|
||||
this._numModels = modelsInfo.length;
|
||||
for (let i = 0, len = modelsInfo.length; i < len; i++) {
|
||||
const modelInfo = modelsInfo[i];
|
||||
this._modelsInfo[modelInfo.id] = modelInfo;
|
||||
html += "<div class='xeokit-form-check'>";
|
||||
html += "<input id='" + modelInfo.id + "' type='checkbox' value=''><span id='span-" + modelInfo.id + "' class='disabled'>" + modelInfo.name + "</span>";
|
||||
html += "</div>";
|
||||
}
|
||||
this._modelsElement.innerHTML = html;
|
||||
for (let i = 0, len = modelsInfo.length; i < len; i++) {
|
||||
const modelInfo = modelsInfo[i];
|
||||
const modelId = modelInfo.id;
|
||||
const checkBox = document.getElementById("" + modelId);
|
||||
const span = document.getElementById("span-" + modelId);
|
||||
checkBox.addEventListener("click", () => {
|
||||
if (checkBox.checked) {
|
||||
this.loadModel(modelId);
|
||||
} else {
|
||||
this.unloadModel(modelInfo.id);
|
||||
}
|
||||
});
|
||||
span.addEventListener("click", () => {
|
||||
const model = this.viewer.scene.models[modelId];
|
||||
const modelLoaded = (!!model);
|
||||
if (!modelLoaded) {
|
||||
this.loadModel(modelId);
|
||||
} else {
|
||||
this.unloadModel(modelInfo.id);
|
||||
}
|
||||
});
|
||||
span.oncontextmenu = (e) => {
|
||||
this._modelsContextMenu.context = {
|
||||
bimViewer: this.bimViewer,
|
||||
viewer: this.viewer,
|
||||
modelId: modelId
|
||||
};
|
||||
this._modelsContextMenu.show(e.pageX, e.pageY);
|
||||
e.preventDefault();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
_parseViewerConfigs(projectInfo) {
|
||||
const viewerConfigs = projectInfo.viewerConfigs;
|
||||
if (viewerConfigs) {
|
||||
this.bimViewer.setConfigs(viewerConfigs);
|
||||
}
|
||||
}
|
||||
|
||||
_parseViewerContent(projectInfo, done) {
|
||||
const viewerContent = projectInfo.viewerContent;
|
||||
if (!viewerContent) {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
this._parseModelsLoaded(viewerContent, () => {
|
||||
done();
|
||||
});
|
||||
}
|
||||
|
||||
_parseModelsLoaded(viewerContent, done) {
|
||||
const modelsLoaded = viewerContent.modelsLoaded;
|
||||
if (!modelsLoaded || (modelsLoaded.length === 0)) {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
this._loadNextModel(modelsLoaded.slice(0), done);
|
||||
}
|
||||
|
||||
_loadNextModel(modelsLoaded, done) {
|
||||
if (modelsLoaded.length === 0) {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
const modelId = modelsLoaded.pop();
|
||||
this.loadModel(modelId,
|
||||
() => { // Done
|
||||
this._loadNextModel(modelsLoaded, done);
|
||||
},
|
||||
() => { // Error - recover and attempt to load next model
|
||||
this._loadNextModel(modelsLoaded, done);
|
||||
});
|
||||
}
|
||||
|
||||
_parseViewerState(projectInfo, done) {
|
||||
const viewerState = projectInfo.viewerState;
|
||||
if (!viewerState) {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
this.bimViewer.setViewerState(viewerState, done);
|
||||
}
|
||||
|
||||
unloadProject() {
|
||||
if (!this._projectId) {
|
||||
return;
|
||||
}
|
||||
const models = this.viewer.scene.models;
|
||||
for (var modelId in models) {
|
||||
if (models.hasOwnProperty(modelId)) {
|
||||
const model = models[modelId];
|
||||
model.destroy();
|
||||
}
|
||||
}
|
||||
this._modelsElement.innerHTML = "";
|
||||
this._numModelsLoaded = 0;
|
||||
|
||||
this._loadModelsButtonElement.classList.add("disabled");
|
||||
this._unloadModelsButtonElement.classList.add("disabled");
|
||||
if (this._enableAddModels) {
|
||||
this._addModelButtonElement.classList.add("disabled");
|
||||
}
|
||||
const lastProjectId = this._projectId;
|
||||
this._projectId = null;
|
||||
this.fire("projectUnloaded", {
|
||||
projectId: lastProjectId
|
||||
});
|
||||
}
|
||||
|
||||
getLoadedProjectId() {
|
||||
return this._projectId;
|
||||
}
|
||||
|
||||
getModelIds() {
|
||||
return Object.keys(this._modelsInfo);
|
||||
}
|
||||
|
||||
loadModel(modelId, done, error) {
|
||||
if (!this._projectId) {
|
||||
const errMsg = "No project currently loaded";
|
||||
this.error(errMsg);
|
||||
if (error) {
|
||||
error(errMsg);
|
||||
}
|
||||
return;
|
||||
}
|
||||
const modelInfo = this._modelsInfo[modelId];
|
||||
if (!modelInfo) {
|
||||
const errMsg = "Model not in currently loaded project";
|
||||
this.error(errMsg);
|
||||
if (error) {
|
||||
error(errMsg);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
this.bimViewer._busyModal.show(`${this.viewer.localeService.translate("busyModal.loading") || "Loading"} ${modelInfo.name}`);
|
||||
|
||||
const externalMetadata = this.bimViewer.getConfig("externalMetadata");
|
||||
|
||||
if (externalMetadata && !modelInfo.manifest) {
|
||||
this.server.getMetadata(this._projectId, modelId, (json) => {
|
||||
this._loadGeometry(modelId, modelInfo, json, done, error);
|
||||
},
|
||||
(errMsg) => {
|
||||
this.bimViewer._busyModal.hide();
|
||||
this.error(errMsg);
|
||||
if (error) {
|
||||
error(errMsg);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this._loadGeometry(modelId, modelInfo, null, done, error);
|
||||
}
|
||||
}
|
||||
|
||||
_loadGeometry(modelId, modelInfo, json, done, error) {
|
||||
|
||||
const modelLoaded = () => {
|
||||
const checkbox = document.getElementById("" + modelId);
|
||||
checkbox.checked = true;
|
||||
this._numModelsLoaded++;
|
||||
this._unloadModelsButtonElement.classList.remove("disabled");
|
||||
if (this._numModelsLoaded < this._numModels) {
|
||||
this._loadModelsButtonElement.classList.remove("disabled");
|
||||
} else {
|
||||
this._loadModelsButtonElement.classList.add("disabled");
|
||||
}
|
||||
if (this._numModelsLoaded === 1) { // Jump camera to view-fit first model loaded
|
||||
this._jumpToInitialCamera();
|
||||
this.fire("modelLoaded", modelId);
|
||||
this.bimViewer._busyModal.hide();
|
||||
if (done) {
|
||||
done();
|
||||
}
|
||||
} else {
|
||||
this.fire("modelLoaded", modelId);
|
||||
this.bimViewer._busyModal.hide();
|
||||
if (done) {
|
||||
done();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const loadError = (errMsg) => {
|
||||
this.bimViewer._busyModal.hide();
|
||||
this.error(errMsg);
|
||||
if (error) {
|
||||
error(errMsg);
|
||||
}
|
||||
};
|
||||
|
||||
if (modelInfo.manifest) {
|
||||
|
||||
// Load multi-part split model;
|
||||
// Uses the BIMViewerDataSource, which then uses the BIMViewer's Server strategy
|
||||
|
||||
this._dataSource.setProjectId(this._projectId);
|
||||
this._dataSource.setModelId(modelId);
|
||||
|
||||
const model = this._xktLoader.load({
|
||||
id: modelId,
|
||||
manifestSrc: modelInfo.manifest,
|
||||
excludeUnclassifiedObjects: true,
|
||||
origin: modelInfo.origin || modelInfo.position,
|
||||
scale: modelInfo.scale,
|
||||
rotation: modelInfo.rotation,
|
||||
matrix: modelInfo.matrix,
|
||||
edges: (modelInfo.edges !== false),
|
||||
saoEnabled: modelInfo.saoEnabled,
|
||||
pbrEnabled: modelInfo.pbrEnabled,
|
||||
backfaces: modelInfo.backfaces,
|
||||
globalizeObjectIds: modelInfo.globalizeObjectIds,
|
||||
reuseGeometries: (modelInfo.reuseGeometries !== false)
|
||||
});
|
||||
|
||||
model.on("loaded", modelLoaded);
|
||||
model.on("error", loadError);
|
||||
|
||||
} else {
|
||||
|
||||
// Load single XKT/Metamodel file model;
|
||||
// Uses the BIMViewer's Server strategy directly
|
||||
|
||||
this.server.getGeometry(this._projectId, modelId, (arraybuffer) => {
|
||||
const model = this._xktLoader.load({
|
||||
id: modelId,
|
||||
metaModelData: json,
|
||||
xkt: arraybuffer,
|
||||
excludeUnclassifiedObjects: true,
|
||||
origin: modelInfo.origin || modelInfo.position,
|
||||
scale: modelInfo.scale,
|
||||
rotation: modelInfo.rotation,
|
||||
matrix: modelInfo.matrix,
|
||||
edges: (modelInfo.edges !== false),
|
||||
saoEnabled: modelInfo.saoEnabled,
|
||||
pbrEnabled: modelInfo.pbrEnabled,
|
||||
backfaces: modelInfo.backfaces,
|
||||
globalizeObjectIds: modelInfo.globalizeObjectIds,
|
||||
reuseGeometries: (modelInfo.reuseGeometries !== false)
|
||||
});
|
||||
model.on("loaded", modelLoaded);
|
||||
model.on("error", loadError);
|
||||
}, loadError);
|
||||
}
|
||||
}
|
||||
|
||||
_jumpToInitialCamera() {
|
||||
const viewer = this.viewer;
|
||||
const scene = viewer.scene;
|
||||
const aabb = scene.getAABB(scene.visibleObjectIds);
|
||||
const diag = math.getAABB3Diag(aabb);
|
||||
const center = math.getAABB3Center(aabb, tempVec3a);
|
||||
const camera = scene.camera;
|
||||
const fitFOV = camera.perspective.fov;
|
||||
const dist = Math.abs(diag / Math.tan(45 * math.DEGTORAD));
|
||||
const dir = math.normalizeVec3((camera.yUp) ? [-0.5, -0.7071, -0.5] : [-1, 1, -1]);
|
||||
const up = math.normalizeVec3((camera.yUp) ? [-0.5, 0.7071, -0.5] : [-1, 1, 1]);
|
||||
viewer.cameraControl.pivotPos = center;
|
||||
viewer.cameraControl.planView = false;
|
||||
viewer.cameraFlight.jumpTo({
|
||||
look: center,
|
||||
eye: [center[0] - (dist * dir[0]), center[1] - (dist * dir[1]), center[2] - (dist * dir[2])],
|
||||
up: up,
|
||||
orthoScale: diag * 1.1
|
||||
});
|
||||
}
|
||||
|
||||
unloadModel(modelId) {
|
||||
const model = this.viewer.scene.models[modelId];
|
||||
if (!model) {
|
||||
this.error("Model not loaded: " + modelId);
|
||||
return;
|
||||
}
|
||||
model.destroy();
|
||||
const checkbox = document.getElementById("" + modelId);
|
||||
checkbox.checked = false;
|
||||
const span = document.getElementById("span-" + modelId);
|
||||
this._numModelsLoaded--;
|
||||
if (this._numModelsLoaded > 0) {
|
||||
this._unloadModelsButtonElement.classList.remove("disabled");
|
||||
} else {
|
||||
this._unloadModelsButtonElement.classList.add("disabled");
|
||||
}
|
||||
if (this._numModelsLoaded < this._numModels) {
|
||||
this._loadModelsButtonElement.classList.remove("disabled");
|
||||
} else {
|
||||
this._loadModelsButtonElement.classList.add("disabled");
|
||||
}
|
||||
this.fire("modelUnloaded", modelId);
|
||||
}
|
||||
|
||||
unloadAllModels() {
|
||||
const models = this.viewer.scene.models;
|
||||
const modelIds = Object.keys(models);
|
||||
for (var i = 0, len = modelIds.length; i < len; i++) {
|
||||
const modelId = modelIds[i];
|
||||
this.unloadModel(modelId);
|
||||
}
|
||||
}
|
||||
|
||||
getNumModelsLoaded() {
|
||||
return this._numModelsLoaded;
|
||||
}
|
||||
|
||||
_getLoadedModelIds() {
|
||||
return Object.keys(this.viewer.scene.models);
|
||||
}
|
||||
|
||||
isModelLoaded(modelId) {
|
||||
return (!!this.viewer.scene.models[modelId]);
|
||||
}
|
||||
|
||||
getModelsInfo() {
|
||||
return this._modelsInfo;
|
||||
}
|
||||
|
||||
getModelInfo(modelId) {
|
||||
return this._modelsInfo[modelId];
|
||||
}
|
||||
|
||||
setEnabled(enabled) {
|
||||
if (!enabled) {
|
||||
this._modelsTabButtonElement.classList.add("disabled");
|
||||
this._unloadModelsButtonElement.classList.add("disabled");
|
||||
} else {
|
||||
this._modelsTabButtonElement.classList.remove("disabled");
|
||||
this._unloadModelsButtonElement.classList.remove("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
/** @private */
|
||||
destroy() {
|
||||
super.destroy();
|
||||
this._xktLoader.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
export {ModelsExplorer};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,163 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/Objects.js | xeokit-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="BIM viewer built on xeokit"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-viewer"><meta property="og:site_name" content="xeokit-viewer"><meta property="og:title" content="xeokit-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="BIM viewer built on xeokit"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-viewer"><meta property="twitter:description" content="BIM viewer built on xeokit"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/ViewerUI.js~ViewerUI.html">ViewerUI</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#ifcobjectdefaults">IFCObjectDefaults</a><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-IFCObjectDefaults">IFCObjectDefaults</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/Objects.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import {Controller} from "../Controller.js";
|
||||
import {TreeViewPlugin} from "@xeokit/xeokit-sdk/src/plugins/TreeViewPlugin/TreeViewPlugin.js";
|
||||
import {TreeViewContextMenuItems} from "../contextMenuItems/TreeViewContextMenuItems.js";
|
||||
import {ContextMenu} from "@xeokit/xeokit-sdk/src/extras/ContextMenu/ContextMenu.js";
|
||||
|
||||
/** @private */
|
||||
class Objects extends Controller {
|
||||
|
||||
constructor(parent, cfg = {}) {
|
||||
|
||||
super(parent);
|
||||
|
||||
if (!cfg.objectsTabElement) {
|
||||
throw "Missing config: objectsTabElement";
|
||||
}
|
||||
|
||||
if (!cfg.showAllObjectsButtonElement) {
|
||||
throw "Missing config: showAllObjectsButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.hideAllObjectsButtonElement) {
|
||||
throw "Missing config: hideAllObjectsButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.objectsElement) {
|
||||
throw "Missing config: objectsElement";
|
||||
}
|
||||
|
||||
this._objectsTabElement = cfg.objectsTabElement;
|
||||
this._showAllObjectsButtonElement = cfg.showAllObjectsButtonElement;
|
||||
this._hideAllObjectsButtonElement = cfg.hideAllObjectsButtonElement;
|
||||
this._objectsTabButtonElement = this._objectsTabElement.querySelector(".xeokit-tab-btn");
|
||||
|
||||
if (!this._objectsTabButtonElement) {
|
||||
throw "Missing DOM element: ,xeokit-tab-btn";
|
||||
}
|
||||
|
||||
const objectsElement = cfg.objectsElement;
|
||||
|
||||
this._treeView = new TreeViewPlugin(this.viewer, {
|
||||
containerElement: objectsElement,
|
||||
hierarchy: "containment",
|
||||
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._objectsTabButtonElement.classList.add("disabled");
|
||||
this._showAllObjectsButtonElement.classList.add("disabled");
|
||||
this._hideAllObjectsButtonElement.classList.add("disabled");
|
||||
} else {
|
||||
this._objectsTabButtonElement.classList.remove("disabled");
|
||||
this._showAllObjectsButtonElement.classList.remove("disabled");
|
||||
this._hideAllObjectsButtonElement.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 {Objects};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,192 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/ObjectsExplorer.js | xeokit-bim-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="BIM viewer built on xeokit"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-bim-viewer"><meta property="og:site_name" content="xeokit-bim-viewer"><meta property="og:title" content="xeokit-bim-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="BIM viewer built on xeokit"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-bim-viewer"><meta property="twitter:description" content="BIM viewer built on xeokit"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-bim-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/BIMViewer.js~BIMViewer.html">BIMViewer</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#collision">collision</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/collision/ObjectsKdTree3.js~ObjectsKdTree3.html">ObjectsKdTree3</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/ObjectsExplorer.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import {TreeViewPlugin} from "@xeokit/xeokit-sdk/dist/xeokit-sdk.es.js";
|
||||
import {TreeViewContextMenu} from "../contextMenus/TreeViewContextMenu.js";
|
||||
import {Controller} from "../Controller.js";
|
||||
|
||||
/** @private */
|
||||
class ObjectsExplorer extends Controller {
|
||||
|
||||
constructor(parent, cfg = {}) {
|
||||
|
||||
super(parent);
|
||||
|
||||
if (!cfg.objectsTabElement) {
|
||||
throw "Missing config: objectsTabElement";
|
||||
}
|
||||
|
||||
if (!cfg.showAllObjectsButtonElement) {
|
||||
throw "Missing config: showAllObjectsButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.hideAllObjectsButtonElement) {
|
||||
throw "Missing config: hideAllObjectsButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.objectsElement) {
|
||||
throw "Missing config: objectsElement";
|
||||
}
|
||||
|
||||
this._objectsTabElement = cfg.objectsTabElement;
|
||||
this._showAllObjectsButtonElement = cfg.showAllObjectsButtonElement;
|
||||
this._hideAllObjectsButtonElement = cfg.hideAllObjectsButtonElement;
|
||||
this._objectsTabButtonElement = this._objectsTabElement.querySelector(".xeokit-tab-btn");
|
||||
|
||||
if (!this._objectsTabButtonElement) {
|
||||
throw "Missing DOM element: ,xeokit-tab-btn";
|
||||
}
|
||||
|
||||
const objectsElement = cfg.objectsElement;
|
||||
|
||||
this._treeView = new TreeViewPlugin(this.viewer, {
|
||||
containerElement: objectsElement,
|
||||
hierarchy: "containment",
|
||||
autoAddModels: false,
|
||||
pruneEmptyNodes: true
|
||||
});
|
||||
|
||||
this._treeViewContextMenu = new TreeViewContextMenu(this.bimViewer, {
|
||||
hideOnAction: true
|
||||
});
|
||||
|
||||
this._treeView.on("contextmenu", (e) => {
|
||||
this._treeViewContextMenu.context = {
|
||||
bimViewer: this.bimViewer,
|
||||
viewer: e.viewer,
|
||||
treeViewPlugin: e.treeViewPlugin,
|
||||
treeViewNode: e.treeViewNode
|
||||
};
|
||||
this._treeViewContextMenu.show(e.event.pageX, e.event.pageY);
|
||||
});
|
||||
|
||||
this._treeView.on("nodeTitleClicked", (e) => {
|
||||
const scene = this.viewer.scene;
|
||||
const objectIds = [];
|
||||
e.treeViewPlugin.withNodeTree(e.treeViewNode, (treeViewNode) => {
|
||||
if (treeViewNode.objectId) {
|
||||
objectIds.push(treeViewNode.objectId);
|
||||
}
|
||||
});
|
||||
const checked = e.treeViewNode.checked;
|
||||
if (checked) {
|
||||
scene.setObjectsXRayed(objectIds, false);
|
||||
scene.setObjectsVisible(objectIds, false);
|
||||
scene.setObjectsPickable(objectIds, true);
|
||||
} else {
|
||||
scene.setObjectsXRayed(objectIds, false);
|
||||
scene.setObjectsVisible(objectIds, true);
|
||||
scene.setObjectsPickable(objectIds, true);
|
||||
}
|
||||
});
|
||||
|
||||
this._onModelLoaded = this.viewer.scene.on("modelLoaded", (modelId) => {
|
||||
if (this.viewer.metaScene.metaModels[modelId]) {
|
||||
const modelInfo = this.bimViewer._modelsExplorer.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.bimViewer.on("reset", () => {
|
||||
this._treeView.collapse();
|
||||
});
|
||||
}
|
||||
|
||||
setEnabled(enabled) {
|
||||
if (!enabled) {
|
||||
this._objectsTabButtonElement.classList.add("disabled");
|
||||
this._showAllObjectsButtonElement.classList.add("disabled");
|
||||
this._hideAllObjectsButtonElement.classList.add("disabled");
|
||||
} else {
|
||||
this._objectsTabButtonElement.classList.remove("disabled");
|
||||
this._showAllObjectsButtonElement.classList.remove("disabled");
|
||||
this._hideAllObjectsButtonElement.classList.remove("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
expandTreeViewToDepth(depth) {
|
||||
this._treeView.expandToDepth(depth);
|
||||
}
|
||||
|
||||
showNodeInTreeView(objectId) {
|
||||
this._treeView.collapse();
|
||||
this._treeView.showNode(objectId);
|
||||
}
|
||||
|
||||
unShowNodeInTreeView() {
|
||||
this._treeView.unShowNode();
|
||||
}
|
||||
|
||||
destroy() {
|
||||
super.destroy();
|
||||
this._treeView.destroy();
|
||||
this._treeViewContextMenu.destroy();
|
||||
this.viewer.scene.off(this._onModelLoaded);
|
||||
this.viewer.scene.off(this._onModelUnloaded);
|
||||
}
|
||||
}
|
||||
|
||||
export {ObjectsExplorer};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,162 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/Storeys.js | xeokit-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="BIM viewer built on xeokit"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-viewer"><meta property="og:site_name" content="xeokit-viewer"><meta property="og:title" content="xeokit-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="BIM viewer built on xeokit"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-viewer"><meta property="twitter:description" content="BIM viewer built on xeokit"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/ViewerUI.js~ViewerUI.html">ViewerUI</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#ifcobjectdefaults">IFCObjectDefaults</a><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-IFCObjectDefaults">IFCObjectDefaults</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/Storeys.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">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 Storeys extends Controller {
|
||||
|
||||
constructor(parent, cfg = {}) {
|
||||
|
||||
super(parent);
|
||||
|
||||
if (!cfg.storeysTabElement) {
|
||||
throw "Missing config: storeysTabElement";
|
||||
}
|
||||
|
||||
if (!cfg.showAllStoreysButtonElement) {
|
||||
throw "Missing config: showAllStoreysButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.hideAllStoreysButtonElement) {
|
||||
throw "Missing config: hideAllStoreysButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.storeysElement) {
|
||||
throw "Missing config: storeysElement";
|
||||
}
|
||||
|
||||
this._storeysTabElement = cfg.storeysTabElement;
|
||||
this._showAllStoreysButtonElement = cfg.showAllStoreysButtonElement;
|
||||
this._hideAllStoreysButtonElement = cfg.hideAllStoreysButtonElement;
|
||||
this._storeysTabButtonElement = this._storeysTabElement.querySelector(".xeokit-tab-btn");
|
||||
|
||||
if (!this._storeysTabButtonElement) {
|
||||
throw "Missing DOM element: .xeokit-tab-btn";
|
||||
}
|
||||
|
||||
const storeysElement = cfg.storeysElement;
|
||||
|
||||
this._treeView = new TreeViewPlugin(this.viewer, {
|
||||
containerElement: storeysElement,
|
||||
autoAddModels: false,
|
||||
hierarchy: "storeys"
|
||||
});
|
||||
|
||||
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) =>{
|
||||
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();
|
||||
this._treeView.expandToDepth(1);
|
||||
});
|
||||
}
|
||||
|
||||
setEnabled(enabled) {
|
||||
if (!enabled) {
|
||||
this._storeysTabButtonElement.classList.add("disabled");
|
||||
this._showAllStoreysButtonElement.classList.add("disabled");
|
||||
this._hideAllStoreysButtonElement.classList.add("disabled");
|
||||
} else {
|
||||
this._storeysTabButtonElement.classList.remove("disabled");
|
||||
this._showAllStoreysButtonElement.classList.remove("disabled");
|
||||
this._hideAllStoreysButtonElement.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 {Storeys};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,250 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<base data-ice="baseUrl" href="../../../">
|
||||
<title data-ice="title">src/explorer/StoreysExplorer.js | xeokit-bim-viewer</title>
|
||||
<link type="text/css" rel="stylesheet" href="css/style.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
|
||||
<script src="script/prettify/prettify.js"></script>
|
||||
<script src="script/manual.js"></script>
|
||||
<meta name="description" content="BIM viewer built on xeokit"><meta property="og:type" content="website"><meta property="og:url" content="https://github.com/xeokit/xeokit-bim-viewer"><meta property="og:site_name" content="xeokit-bim-viewer"><meta property="og:title" content="xeokit-bim-viewer"><meta property="og:image" content="./images/logo.jpg"><meta property="og:description" content="BIM viewer built on xeokit"><meta property="og:author" content="http://xeolabs.com"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="xeokit-bim-viewer"><meta property="twitter:description" content="BIM viewer built on xeokit"><meta property="twitter:image" content="./images/logo.jpg"></head>
|
||||
<body class="layout-container" data-ice="rootContainer">
|
||||
|
||||
<header>
|
||||
<a href="./" style="display: flex; align-items: center;"><img src="./image/brand_logo.jpg" style="width:34px;"></a>
|
||||
|
||||
<a href="identifiers.html">Reference</a>
|
||||
<a href="source.html">Source</a>
|
||||
|
||||
<div class="search-box">
|
||||
<span>
|
||||
<img src="./image/search.png">
|
||||
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
|
||||
</span>
|
||||
<ul class="search-result"></ul>
|
||||
</div>
|
||||
<a style="position:relative; top:3px;" href="https://github.com/xeokit/xeokit-bim-viewer"><img width="20px" src="./image/github.png"></a></header>
|
||||
|
||||
<nav class="navigation" data-ice="nav"><div>
|
||||
<ul>
|
||||
|
||||
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/BIMViewer.js~BIMViewer.html">BIMViewer</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#collision">collision</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/collision/ObjectsKdTree3.js~ObjectsKdTree3.html">ObjectsKdTree3</a></span></span></li>
|
||||
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#server">server</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/server/Server.js~Server.html">Server</a></span></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="content" data-ice="content"><h1 data-ice="title">src/explorer/StoreysExplorer.js</h1>
|
||||
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import {TreeViewPlugin, math} from "@xeokit/xeokit-sdk/dist/xeokit-sdk.es.js";
|
||||
import {Controller} from "../Controller.js";
|
||||
import {TreeViewContextMenu} from "../contextMenus/TreeViewContextMenu.js";
|
||||
|
||||
const tempVec3 = math.vec3();
|
||||
|
||||
/** @private */
|
||||
class StoreysExplorer extends Controller {
|
||||
|
||||
constructor(parent, cfg = {}) {
|
||||
|
||||
super(parent);
|
||||
|
||||
if (!cfg.storeysTabElement) {
|
||||
throw "Missing config: storeysTabElement";
|
||||
}
|
||||
|
||||
if (!cfg.showAllStoreysButtonElement) {
|
||||
throw "Missing config: showAllStoreysButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.hideAllStoreysButtonElement) {
|
||||
throw "Missing config: hideAllStoreysButtonElement";
|
||||
}
|
||||
|
||||
if (!cfg.storeysElement) {
|
||||
throw "Missing config: storeysElement";
|
||||
}
|
||||
|
||||
this._storeysTabElement = cfg.storeysTabElement;
|
||||
this._showAllStoreysButtonElement = cfg.showAllStoreysButtonElement;
|
||||
this._hideAllStoreysButtonElement = cfg.hideAllStoreysButtonElement;
|
||||
this._storeysTabButtonElement = this._storeysTabElement.querySelector(".xeokit-tab-btn");
|
||||
|
||||
if (!this._storeysTabButtonElement) {
|
||||
throw "Missing DOM element: .xeokit-tab-btn";
|
||||
}
|
||||
|
||||
const storeysElement = cfg.storeysElement;
|
||||
|
||||
this._treeView = new TreeViewPlugin(this.viewer, {
|
||||
containerElement: storeysElement,
|
||||
autoAddModels: false,
|
||||
hierarchy: "storeys",
|
||||
autoExpandDepth: 1
|
||||
});
|
||||
|
||||
this._treeViewContextMenu = new TreeViewContextMenu(this.bimViewer, {
|
||||
hideOnAction: true
|
||||
});
|
||||
|
||||
this._treeView.on("contextmenu", (e) => {
|
||||
this._treeViewContextMenu.context = {
|
||||
bimViewer: this.bimViewer,
|
||||
viewer: e.viewer,
|
||||
treeViewPlugin: e.treeViewPlugin,
|
||||
treeViewNode: e.treeViewNode,
|
||||
pruneEmptyNodes: true
|
||||
};
|
||||
this._treeViewContextMenu.show(e.event.pageX, e.event.pageY);
|
||||
});
|
||||
|
||||
this._treeView.on("nodeTitleClicked", (e) => {
|
||||
const scene = this.viewer.scene;
|
||||
const objectIds = [];
|
||||
e.treeViewPlugin.withNodeTree(e.treeViewNode, (treeViewNode) => {
|
||||
if (treeViewNode.objectId) {
|
||||
objectIds.push(treeViewNode.objectId);
|
||||
}
|
||||
});
|
||||
const checked = e.treeViewNode.checked;
|
||||
if (checked) {
|
||||
scene.setObjectsXRayed(objectIds, false);
|
||||
scene.setObjectsVisible(objectIds, false);
|
||||
scene.setObjectsPickable(objectIds, true);
|
||||
} else {
|
||||
scene.setObjectsXRayed(objectIds, false);
|
||||
scene.setObjectsVisible(objectIds, true);
|
||||
scene.setObjectsPickable(objectIds, true);
|
||||
}
|
||||
});
|
||||
|
||||
this._onModelLoaded = this.viewer.scene.on("modelLoaded", (modelId) =>{
|
||||
const modelInfo = this.bimViewer._modelsExplorer.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.bimViewer.on("reset", () => {
|
||||
this._treeView.collapse();
|
||||
this._treeView.expandToDepth(1);
|
||||
});
|
||||
}
|
||||
|
||||
setEnabled(enabled) {
|
||||
if (!enabled) {
|
||||
this._storeysTabButtonElement.classList.add("disabled");
|
||||
this._showAllStoreysButtonElement.classList.add("disabled");
|
||||
this._hideAllStoreysButtonElement.classList.add("disabled");
|
||||
} else {
|
||||
this._storeysTabButtonElement.classList.remove("disabled");
|
||||
this._showAllStoreysButtonElement.classList.remove("disabled");
|
||||
this._hideAllStoreysButtonElement.classList.remove("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
expandTreeViewToDepth(depth) {
|
||||
this._treeView.expandToDepth(depth);
|
||||
}
|
||||
|
||||
showNodeInTreeView(objectId) {
|
||||
this._treeView.collapse();
|
||||
this._treeView.showNode(objectId);
|
||||
}
|
||||
|
||||
unShowNodeInTreeView() {
|
||||
this._treeView.unShowNode();
|
||||
}
|
||||
|
||||
selectStorey(storeyObjectId, done) {
|
||||
const metaScene = this.viewer.metaScene;
|
||||
const storeyMetaObject = metaScene.metaObjects[storeyObjectId];
|
||||
if (!storeyMetaObject) {
|
||||
this.error("selectStorey() - object is not found: '" + storeyObjectId + "'");
|
||||
return;
|
||||
}
|
||||
if (storeyMetaObject.type !== "IfcBuildingStorey") {
|
||||
this.error("selectStorey() - object is not found: '" + storeyObjectId + "'");
|
||||
return;
|
||||
}
|
||||
const objectIds = storeyMetaObject.getObjectIDsInSubtree();
|
||||
this._selectObjects(objectIds, done);
|
||||
}
|
||||
|
||||
_selectObjects(objectIds, done) {
|
||||
const scene = this.viewer.scene;
|
||||
const aabb = scene.getAABB(objectIds);
|
||||
|
||||
this.viewer.cameraControl.pivotPos = math.getAABB3Center(aabb, tempVec3);
|
||||
|
||||
if (done) {
|
||||
|
||||
scene.setObjectsXRayed(scene.objectIds, true);
|
||||
scene.setObjectsVisible(scene.objectIds, true);
|
||||
scene.setObjectsPickable(scene.objectIds, false);
|
||||
scene.setObjectsSelected(scene.selectedObjectIds, false);
|
||||
|
||||
scene.setObjectsXRayed(objectIds, false);
|
||||
scene.setObjectsVisible(objectIds, true);
|
||||
scene.setObjectsPickable(objectIds, true);
|
||||
|
||||
this.viewer.cameraFlight.flyTo({
|
||||
aabb: aabb
|
||||
}, () => {
|
||||
setTimeout(function () {
|
||||
scene.setObjectsVisible(scene.xrayedObjectIds, false);
|
||||
scene.setObjectsXRayed(scene.xrayedObjectIds, false);
|
||||
}, 500);
|
||||
done();
|
||||
});
|
||||
} else {
|
||||
|
||||
scene.setObjectsVisible(scene.objectIds, false);
|
||||
scene.setObjectsPickable(scene.xrayedObjectIds, true);
|
||||
scene.setObjectsXRayed(scene.xrayedObjectIds, false);
|
||||
scene.setObjectsSelected(scene.selectedObjectIds, false);
|
||||
|
||||
scene.setObjectsVisible(objectIds, true);
|
||||
|
||||
this.viewer.cameraFlight.jumpTo({
|
||||
aabb: aabb
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
destroy() {
|
||||
super.destroy();
|
||||
this._treeView.destroy();
|
||||
this._treeViewContextMenu.destroy();
|
||||
this.viewer.scene.off(this._onModelLoaded);
|
||||
this.viewer.scene.off(this._onModelUnloaded);
|
||||
}
|
||||
}
|
||||
|
||||
export {StoreysExplorer};</code></pre>
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
|
||||
</footer>
|
||||
|
||||
<script src="script/search_index.js"></script>
|
||||
<script src="script/search.js"></script>
|
||||
<script src="script/pretty-print.js"></script>
|
||||
<script src="script/inherited-summary.js"></script>
|
||||
<script src="script/test-summary.js"></script>
|
||||
<script src="script/inner-link.js"></script>
|
||||
<script src="script/patch-for-local.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user