Namespace dotbim

xeokit .BIM Importer and Exporter


Import and export the open, free, and simple .BIM model format


The xeokit SDK enables seamless import and export of 3D models using the .BIM format — a lightweight, open-source, JSON-based format designed for easy sharing and human readability.

.BIM is minimalist by design. It contains triangulated meshes and a dictionary of related metadata, making it ideal for streamlined BIM workflows.

Use the DotBIMLoader class to load .BIM files into:

Use the DotBIMExporter class to export:

into .BIM file data.


%%{init:{"theme":"dark"}}%% classDiagram direction LR class SceneModel { id objects createObject() build() destroy() } class DataModel { id objects relationships propertySets createObject() createRelationship() createPropertySet() build() destroy() } class ModelLoadParams { <<parameter>> fileData sceneModel dataModel } class ModelExportParams { <<parameter>> sceneModel dataModel version } class DotBIMLoader { load() } class DotBIMExporter { export(): Promise<any> } ModelLoadParams "0" --> "1" SceneModel ModelLoadParams "0" --> "1" DataModel DotBIMLoader --> ModelLoadParams DotBIMExporter --> ModelExportParams ModelExportParams "0" --> "1" SceneModel ModelExportParams "0" --> "1" DataModel
%%{init:{"theme":"default"}}%% classDiagram direction LR class SceneModel { id objects createObject() build() destroy() } class DataModel { id objects relationships propertySets createObject() createRelationship() createPropertySet() build() destroy() } class ModelLoadParams { <<parameter>> fileData sceneModel dataModel } class ModelExportParams { <<parameter>> sceneModel dataModel version } class DotBIMLoader { load() } class DotBIMExporter { export(): Promise<any> } ModelLoadParams "0" --> "1" SceneModel ModelLoadParams "0" --> "1" DataModel DotBIMLoader --> ModelLoadParams DotBIMExporter --> ModelExportParams ModelExportParams "0" --> "1" SceneModel ModelExportParams "0" --> "1" DataModel
classDiagram
    direction LR
    class SceneModel {
        id
        objects
        createObject()
        build()
        destroy()
    }
    class DataModel {
        id
        objects
        relationships
        propertySets
        createObject()
        createRelationship()
        createPropertySet()
        build()
        destroy()
    }
    class ModelLoadParams {
        <<parameter>>
        fileData
        sceneModel
        dataModel
    }
    class ModelExportParams {
        <<parameter>>
        sceneModel
        dataModel
        version
    }
    class DotBIMLoader {
        load()
    }
    class DotBIMExporter {
        export(): Promise<any>
    }
    ModelLoadParams "0" --> "1" SceneModel
    ModelLoadParams "0" --> "1" DataModel
    DotBIMLoader --> ModelLoadParams
    DotBIMExporter --> ModelExportParams
    ModelExportParams "0" --> "1" SceneModel
    ModelExportParams "0" --> "1" DataModel

npm install @xeokit/sdk

Below is an example of loading and displaying a .BIM model in a Viewer:

import { Scene } from "@xeokit/sdk/scene";
import { Data } from "@xeokit/sdk/data";
import { WebGLRenderer } from "@xeokit/sdk/webglrenderer";
import { Viewer } from "@xeokit/sdk/viewer";
import { CameraControl } from "@xeokit/sdk/cameracontrol";
import { DotBIMLoader, DotBIMExporter } from "@xeokit/sdk/dotbim";

const scene = new Scene();
const data = new Data();
const renderer = new WebGLRenderer({});

const viewer = new Viewer({
id: "myViewer",
scene,
renderer
});

const view = viewer.createView({
id: "myView",
elementId: "myCanvas"
});

view.camera.eye = [1841982.93, 10.03, -5173286.74];
view.camera.look = [1842009.49, 9.68, -5173295.85];
view.camera.up = [0.0, 1.0, 0.0];

new CameraControl(view, {});

const sceneModel = scene.createModel({ id: "myModel" });
const dataModel = data.createModel({ id: "myModel" });

const dotBIMLoader = new DotBIMLoader();

fetch("model.bim")
.then(response => response.json())
.then(fileData => {
dotBIMLoader.load({ fileData, sceneModel, dataModel })
.then(() => {
sceneModel.build();
dataModel.build();
})
.catch(err => {
sceneModel.destroy();
dataModel.destroy();
console.error(`Error loading .BIM: ${err}`);
});
})
.catch(err => {
console.error(`Error fetching .BIM file: ${err}`);
});
const exporter = new DotBIMExporter();

exporter.write({
sceneModel,
dataModel,
version: "1.1.0", // Optional, defaults to latest
}).then(fileData => {
// Use fileData as needed
}).catch(err => {
console.error(err);
});

Classes

DotBIMExporter
DotBIMLoader