Skip to content
xeofoundryPublic

About

No description, website, or topics provided.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Latest commit

 

History

95 Commits

Folders and files

Repository files navigation

xeoIFC - the xeoFoundry IFC toolkit.

Tip

Quick start: open the live demo to try xeoIFC in your browser (powered by WebAssembly).

xeoIFC is a Rust engine for reading, querying, tessellating, converting and writing IFC (.ifc, .ifczip; IFC 2x3 to IFC 4.3). It is delivered in four forms:

  1. Command-line tool - The successor to cxconverter, offering better geometry quality and far more capabilities. It covers the standard IFC to glTF/GLB/XKT workflow with xeokit metadata, and also supports SLPK (I3S) for Esri ArcGIS and raw IFC metadata.
  2. Native library - xeoifc.dll / libxeoifc.so with a C ABI, for desktop and server applications in C++, C#, Python, Java, ...
  3. WebAssembly library - wasm modules with a JavaScript/TypeScript API, for web applications.
  4. Loader for xeokit - loads IFC directly into a xeokit viewer, without server side conversion steps.
flowchart TD
    E["xeoIFC engine (Rust)<br/>read, query, tessellate, convert, write"]
    E --> CLI["1. Command-line tool<br/>xeoifc.exe"]
    E --> NAT["2. Native library<br/>xeoifc.dll / libxeoifc.so"]
    E --> WASM["3. WebAssembly library<br/>wasm + JS/TS API"]
    WASM --> XL["4. Loader for xeokit<br/>XeoIFCLoaderPlugin"]
    CLI --> U1["Batch conversion<br/>on a server or in CI"]
    NAT --> U2["Desktop and server apps<br/>C++, C#, Python, Java"]
    WASM --> U3["Web apps that process<br/>IFC in the browser"]
    XL --> U4["xeokit viewers that load<br/>IFC with no conversion step"]
Loading

Example use cases: xeoIFC showcase.

1. Command-line converter

The native converter turns .ifc and .ifczip files into glTF 2.0 (.glb, .gltf) with xeokit metadata, xeokit .xkt, Esri .slpk (I3S) or a self-contained .html viewer. It keeps the cxconverter command-line flags and cxconverter.json configuration shape.

.\xeoifc.exe -i Duplex.ifc -o test\duplex.glb
flowchart LR
    IFC[".ifc / .ifczip"] --> CLI["xeoifc CLI"]
    CLI --> GLB[".glb / .gltf<br/>+ xeokit metadata"] --> V1["xeokit, three.js,<br/>other glTF viewers"]
    CLI --> XKT[".xkt"] --> V2["xeokit viewer"]
    CLI --> SLPK[".slpk (I3S)"] --> V3["Esri ArcGIS"]
    CLI --> HTML[".html"] --> V4["Any web browser,<br/>no server needed"]
Loading

Features, options, output files and license key: converter/README.md

2. Native library

xeoifc.dll (libxeoifc.so on Linux) exposes the engine through a C ABI for desktop and server applications in C++, C#, Python, Java and other languages.

flowchart LR
    IFC[".ifc / .ifczip"] --> LIB["xeoifc.dll / libxeoifc.so<br/>C ABI"]
    LIB --> D["Desktop app<br/>C++ / Qt, C#"]
    LIB --> S["Server or pipeline<br/>Python, Java"]
    D --> R1["View, query and<br/>edit models"]
    S --> R2["Convert, validate and<br/>extract data at scale"]
Loading

Library details, examples and the Qt, gpui and WPF demo viewers: Native library.

3. WebAssembly library

The WebAssembly library is the xeoIFC engine for web applications: wasm modules with JavaScript bindings and TypeScript declarations. IFC files are processed in the browser; nothing is uploaded.

flowchart LR
    U["User drops<br/>.ifc file"] --> B
    subgraph B["Browser"]
        W["xeoIFC wasm module"] --> APP["Your web app<br/>(JS / TS)"]
    end
    APP --> R["Viewer, property query,<br/>model edit, export"]
Loading

Library details, demo viewer, features and downloads: WebAssembly library.

4. Loader for xeokit (XeoIFCLoaderPlugin)

The WebAssembly library also feeds a xeokit viewer directly, without a conversion step: the plugin runs xeoIFC in a Web Worker, unpacks its geometry buffer into a xeokit SceneModel, builds the MetaModel from the object tree and queries property sets from the loaded model. It loads .ifc and .ifczip files (no upload of any data).

flowchart LR
    IFC[".ifc / .ifczip"] --> WK
    subgraph Browser
        WK["Web Worker<br/>xeoIFC wasm"] -- geometry buffer --> SM["xeokit SceneModel"]
        WK -- object tree --> MM["xeokit MetaModel"]
        SM --> V["xeokit Viewer"]
        MM --> V
    end
Loading

Documentation and live examples: https://xeofoundry.github.io/xeoIFC/xeokit-direct-ifc-loading/

The examples: a xeokit viewer that loads dropped files, and metadata from IFC for geometry from XKT.

Authoring

Warning

New and experimental: IFC authoring is still under active development.

The document API creates IFC models from scratch, including geometry, materials and property sets. The command-line tool runs authoring scripts. See Authoring for examples, screenshots and code.

Architecture

One Rust engine powers the WebAssembly library, the command-line converter and the native library, with a shared document API and geometry engine. See Architecture for details.

Third-party software

The xeoIFC libraries and the converter include open-source components (Rust crates under MIT, Apache-2.0, ISC, Zlib and similar permissive licences, among them laz for LAZ point clouds, wgpu, i_overlay, earcutr and delaunator), plus code derived from jcadlib and csg.js. The full list with all licence texts ships as THIRD-PARTY-NOTICES.txt in every release package and with xeoIFC Web: THIRD-PARTY-NOTICES.txt

The xeoIFC gpui packages add THIRD-PARTY-NOTICES-gpui.txt for the Rust crates of that application (gpui and its dependencies, under Apache-2.0, MIT and similar permissive licences).

About

No description, website, or topics provided.

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors