89 lines
3.1 KiB
HTML
89 lines
3.1 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<link rel="icon" href="./demo/favicon.ico">
|
|
<link rel="stylesheet" type="text/css" href="./demo/global.css">
|
|
<style>
|
|
#myCanvas {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="app">
|
|
<div id="myCanvas" class="container"></div>
|
|
</div>
|
|
<script type="module">
|
|
import {
|
|
AxisGizmoPlugin,
|
|
BimViewer,
|
|
MeasurementPlugin,
|
|
NavCubePlugin,
|
|
SectionPlugin,
|
|
ToolbarMenuId,
|
|
} from "./demo/libs/gemini-viewer.esm.min.js";
|
|
|
|
const project = {
|
|
"id": "building1",
|
|
"name": "building1",
|
|
"models": [{
|
|
"name": "building1",
|
|
"src": "./demo/models/gltf/building1.gltf",
|
|
"edges": true,
|
|
"visible": true
|
|
}, {
|
|
"id": "building1_dxf",
|
|
"name": "building1 plan drawing",
|
|
"src": "./demo/models/dxf/building1.dxf",
|
|
"matrix": [
|
|
0.001, 0, 0, 0, // the dxf is in "mm", and gltf is in "meter", so need to set scale 0.001
|
|
0, 0, -0.001, 0,
|
|
0, 0.001, 0, 0,
|
|
-1831.340, 17, 456.910, 1 // also need to consider the base point
|
|
],
|
|
"edges": true,
|
|
"visible": true
|
|
}]
|
|
}
|
|
const viewer = new BimViewer({
|
|
containerId: "myCanvas",
|
|
});
|
|
const toolbar = viewer.toolbar;
|
|
toolbar.updateMenu(ToolbarMenuId.BimTree, { visible: false });
|
|
|
|
new AxisGizmoPlugin(viewer);
|
|
new MeasurementPlugin(viewer);
|
|
new NavCubePlugin(viewer);
|
|
new SectionPlugin(viewer);
|
|
|
|
// font file is needed for loading dxf
|
|
// const fontFiles = ["./demo/three/fonts/Microsoft_YaHei_Regular.typeface.json"];
|
|
const fontFiles = ["./demo/three/fonts/hztxt.shx", "./demo/three/fonts/simplex.shx"];
|
|
await viewer.setFont(fontFiles);
|
|
|
|
// draco decoder path is needed to load draco encoded models.
|
|
// gemini-viewer js sdk user maintains draco decoder code somewhere, and provides the path here.
|
|
const decoderPath = "./demo/three/js/libs/draco/gltf/";
|
|
viewer.setDracoDecoderPath(decoderPath);
|
|
|
|
project.models.forEach((modelCfg) => {
|
|
if (modelCfg.visible === false) {
|
|
// visible is true by default
|
|
return; // only load visible ones
|
|
}
|
|
viewer.loadModel(modelCfg, (event) => {
|
|
const progress = ((event.loaded * 100) / event.total).toFixed(1);
|
|
console.log(`[Demo] Loading '${modelCfg.id || modelCfg.name}' progress: ${progress}%`);
|
|
}, (event) => {
|
|
console.error("[Demo] Failed to load " + modelCfg.src + ". " + event.message);
|
|
}).then(() => {
|
|
console.log(`[Demo] Loaded model ${modelCfg.src}`);
|
|
viewer.setToOrthographicCamera(false);
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
|
|
</html> |