Using xeokit SDK to view an IFC model, loaded from JSON
Click on the preview below to run the example. Scroll down to learn how it's made.
Using xeokit SDK to view an IFC model, loaded from JSON
HTML
Listed below is the HTML for this example.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Using xeokit SDK to view an IFC model, loaded from JSON</title>
<style>
body {
background-color: white;
overflow: hidden;
margin: 0;
user-select: none;
}
#demoCanvas {
width: 100%;
height: 100%;
position: absolute;
background: white;
border: 0;
}
</style>
</head>
<body>
<canvas id="demoCanvas"></canvas>
</body>
<script type="module" src="./index.js"></script>
</html>
JavaScript
Listed below is the JavaScript for this example, which we'll break down into steps.
import {log} from "../../js/logger.js";
import * as xeokit from "../../js/xeokit-demo-bundle.js";
import {DemoHelper} from "../../js/DemoHelper.js";
1. Create a Scene
@xeokit/sdk / scene / Scene / Class Scene Container of model geometry and materials.
const scene = new xeokit.scene.Scene();
2. Create a Data
@xeokit/sdk / data / Data / Class Data Container of model semantic data.
const data = new xeokit.data.Data();
3. Create a WebGLRenderer
@xeokit/sdk / webglrenderer / WebGLRenderer / Class WebGLRenderer WebGL rendering strategy for a Viewer.
const renderer = new xeokit.webglrenderer.WebGLRenderer({});
4. Create a Viewer
@xeokit/sdk / viewer / Viewer / Class Viewer 3D model viewer.
const viewer = new xeokit.viewer.Viewer({
id: "demoViewer",
scene,
renderer
});
5. Give the Viewer a single View
@xeokit/sdk / viewer / View / Class View An independent view within a Viewer, with its own canvas, Camera and object visual states.
const view = viewer.createView({
id: "demoView",
elementId: "demoCanvas"
});
6. Position the View's Camera
@xeokit/sdk / viewer / Camera / Class Camera Controls the viewpoint and projection for a View.
view.camera.eye = [-3.933, 2.855, 27.018];
view.camera.look = [4.400, 3.724, 8.899];
view.camera.up = [-0.018, 0.999, 0.039];
view.camera.zoom(5);
view.camera.orbitPitch(20);
7. Add a CameraControl
@xeokit/sdk / cameracontrol / CameraControl / Class CameraControl Mouse and touch controller for a Viewer's Camera.
new xeokit.cameracontrol.CameraControl(view, {});
8. Create a SceneModel
@xeokit/sdk / scene / SceneModel / Class SceneModel Contains a model's geometry and materials.
const sceneModel = scene.createModel({
id: "demoModel"
});
9. Ignore the DemHelper
const demoHelper = new DemoHelper({
viewer,
data
});
demoHelper.init()
.then(() => {
10. Create a DataModel
@xeokit/sdk / data / DataModel / Class DataModel Contains a model's semantic data, as an entity-relationship graph.
const dataModel = data.createModel({
id: "demoModel"
});
if (sceneModel instanceof xeokit.core.SDKError) {
log(`Error creating SceneModel: ${sceneModel.message}`);
} else {
11. Load JSON parameters into our SceneModel. The parameters follow the schema defined by SceneModelParams
@xeokit/sdk / scene / SceneModelParams / Interface SceneModelParams Parameters for a SceneModel.
fetch("../../models/Duplex/json/sceneModel.json").then(response => {
response.json().then(sceneModelParams => {
12. Load JSON parameters into our DataModel. The parameters follow the schema defined by DataModelParams
@xeokit/sdk / data / DataModelParams / Interface DataModelParams Parameters used to define a DataModel.
fetch("../../models/Duplex/json/dataModel.json").then(response => {
response.json().then(dataModelParams => {
dataModel.fromParams(dataModelParams);
sceneModel.fromParams(sceneModelParams);
13. Build the SceneModel and DataModel. The View will now contain a ViewObject
@xeokit/sdk / viewer / ViewObject / Class ViewObject An object within a View. @xeokit/sdk / scene / SceneObject / Class SceneObject An object within a SceneModel.
dataModel.build();
sceneModel.build();
demoHelper.finished();
});
});
});
});
}
});