Real IFC2X3/IFC4 import tested. Full BIM authoring/export remains out of scope; 349-second building import performance remains to optimize.
84 lines
4.4 KiB
Markdown
84 lines
4.4 KiB
Markdown
# Real IFC Native Import Build
|
|
|
|
This work does not replace the existing `ifcopenshell` declaration module with a
|
|
fake success path. A separately named `IfcOpenShellNative` import binding uses
|
|
the real IfcOpenShell parser, IFC2X3/IFC4 geometry mappings, and the supplied OCCT
|
|
7.6.3 static libraries. The complete upstream Python API, BIM authoring/export,
|
|
IFC4X3 and other schemas are not enabled by this binding.
|
|
|
|
## Reused Work
|
|
|
|
- Existing FreeCAD Part document owner, Std_Open file selection/cache, native
|
|
file-type registry, scene dispatcher and FCStd persistence.
|
|
- Local pthread OCCT, Boost 1.83, Python 3.12 and FreeCAD static libraries.
|
|
- Local IFC building fixture from the supplied Qt/Assimp source tree.
|
|
- Existing manual browser tests, structured results and screenshot folders.
|
|
|
|
The older `Web_FreeCAD_Bitbybit/src/facade/bim.ts` implements metadata/proxy
|
|
roundtrips, not a real IFC geometry backend. It was inspected but not substituted
|
|
for native parsing. No existing compatible IfcOpenShell binding was located in
|
|
the indexed local sources. The missing source was obtained from the official
|
|
repository, not recreated from scratch.
|
|
|
|
## Source and Artifacts
|
|
|
|
- Upstream: https://github.com/IfcOpenShell/IfcOpenShell
|
|
- Observed commit: `f8da61bf9249126c3ce41e7b995c68ae3ab520d9`.
|
|
- Source VERSION: 0.8.6 (downloaded from the v0.8.0 development branch).
|
|
- Download archive SHA-256: `c4e1efb7910dede9fabb5003e6599b52528220bf8309c00c196741e7933176fc`.
|
|
- Durable local source: `freecad-source/build-web/ifcopenshell-native/source`.
|
|
- Durable archives: `freecad-source/build-web/ifcopenshell-native/build`.
|
|
- Compiler/dependency/archive hashes: `freecad-source/build-web/ifcopenshell-native/provenance.json`.
|
|
- License: LGPL-3.0-or-later; license texts and attribution included in web/public.
|
|
|
|
The 238 upstream build steps completed successfully in approximately 833 seconds
|
|
with two compilation jobs. IfcParse is approximately 32 MiB, IfcGeom 6.7 MiB and
|
|
geometry_kernel_opencascade 3 MiB. Subsequent fixes relink only the existing Part
|
|
owner. RAM-backed initial source/build remains a temporary optimization; the
|
|
runtime no longer depends on those RAM paths.
|
|
|
|
```bash
|
|
FREECAD_IFC_SOURCE="$PWD/freecad-source/build-web/ifcopenshell-native/source" \
|
|
FREECAD_IFC_BUILD="$PWD/freecad-source/build-web/ifcopenshell-native/build" \
|
|
node tools/build_ifcopenshell_native.mjs
|
|
node tools/run_user_repair_checks.mjs
|
|
timeout 120s node tools/test_ifc_native_contract.mjs
|
|
FREECAD_MANUAL_IDS=FILE-02 node tools/run_user_manual_tests.mjs
|
|
```
|
|
|
|
The cached archive-only build directory is sufficient for FreeCAD linking. To
|
|
rebuild the dependency itself, the script configures that directory afresh; it
|
|
will compile source objects that are not in the durable cache. The main FreeCAD
|
|
CMake options are `FREECAD_WEB_IFCOPENSHELL_SOURCE` and
|
|
`FREECAD_WEB_IFCOPENSHELL_BUILD`. No system Python wheel is assumed compatible
|
|
with this static WebAssembly runtime.
|
|
|
|
## Implementation Boundaries
|
|
|
|
Import calls the official iterator with the OpenCascade backend and one thread.
|
|
It preserves native BRep, converts SI metres to FreeCAD millimetres, assigns IFC
|
|
GlobalId/type/STEP identity, builds spatial groups, maps property definitions
|
|
including IFC4 definition sets, and embeds the original IFC inside FCStd.
|
|
Opening/space analytical volumes remain native objects but start hidden.
|
|
|
|
Invalid geometry is repaired with OCCT ShapeFix and checked again. Conversion
|
|
errors roll back the newly created document, rather than silently omitting
|
|
failed geometry. Metadata outside the typed scalar/property-set presentation is
|
|
retained in the original attached IFC, not claimed to be editable via the full
|
|
IfcOpenShell API.
|
|
|
|
The scene avoids duplicate group meshes and uses 2 mm display tessellation for
|
|
documents with the native IfcSource object. This changes display precision only,
|
|
not stored BRep. Std_Open passes its prepared scene to the mounted view to avoid
|
|
duplicate full-building meshing.
|
|
|
|
## Verification Scope
|
|
|
|
Native building import and FCStd save passed with 147 document objects. A browser
|
|
reopen test recovered 134 Part features, 12 spatial groups and the source IFC
|
|
attachment. Official IFC4 property-set fixtures and invalid-file preservation
|
|
are separately tested. Exact final browser results and timings live in the
|
|
user-tests-20260915 timestamped runs; consult those records before declaring a
|
|
release accepted. Large furniture geometry repair still takes minutes and is a
|
|
performance limitation, not a zero-latency import path.
|