npm.io
2.3.1 • Published 1 week ago

@ifc-lite/ifcx

Licence
MPL-2.0
Version
2.3.1
Deps
4
Size
309 kB
Vulns
0
Weekly
0
Stars
279

@ifc-lite/ifcx

IFC5 (IFCX) parser for IFClite. Parses the JSON-based IFCX format with ECS composition, USD geometry, and federated layer support — and writes IFCX too. Compatible with the existing IFClite data pipeline so you can mix IFC4 STEP and IFC5 IFCX in the same scene.

Installation

npm install @ifc-lite/ifcx

Parse an IFCX file

import { parseIfcx } from '@ifc-lite/ifcx';

const buffer = await fetch('model.ifcx').then(r => r.arrayBuffer());

const result = await parseIfcx(buffer, {
  onProgress: ({ phase, percent }) => console.log(`${phase}: ${percent}%`),
});

console.log(`${result.entityCount} entities, ${result.meshes.length} pre-tessellated meshes`);
console.log(`Schema: ${result.schemaVersion}`); // 'IFC5'
// result also carries properties, quantities, relationships, spatial
// hierarchy, and decoded point clouds (result.pointClouds)

// Same MeshData[] shape as @ifc-lite/parser — feed straight into renderer
renderer.loadGeometry(result.meshes);

Auto-detect format

import { detectFormat } from '@ifc-lite/ifcx';

const format = detectFormat(buffer);
// 'ifcx' | 'ifc' | 'glb' | 'unknown'

if (format === 'ifcx') {
  await parseIfcx(buffer);
} else if (format === 'ifc') {
  await ifcParser.parse(buffer); // @ifc-lite/parser
}

Federated layers

IFCX supports overlays — a base file with the geometry, plus one or more layers that add or override properties. The package merges them in priority order:

import { parseFederatedIfcx } from '@ifc-lite/ifcx';

const result = await parseFederatedIfcx([
  { buffer: baseBytes, name: 'architecture.ifcx' },
  { buffer: psetOverlayBytes, name: 'fire-safety-overlay.ifcx' },
  { buffer: scheduleOverlayBytes, name: 'construction-schedule.ifcx' },
]);

// Properties from later layers take precedence over earlier ones —
// fire-safety FireRating values overwrite anything in the base.

Write IFCX

The low-level writer (IfcxWriter / exportToIfcx) lives in this package. For the full IFC-to-IFC5 conversion path (cross-schema, geometry as USD, mutations applied), use Ifc5Exporter from @ifc-lite/export:

import { Ifc5Exporter } from '@ifc-lite/export';

const exporter = new Ifc5Exporter(store, geometryResult);
const ifcx = exporter.export({ includeGeometry: true });
// ifcx.content → IFCX JSON string, save as .ifcx

API

See the Parsing Guide and API Reference.

License

MPL-2.0

Keywords