Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
3be1abe
feat: zero-copy NGEOM stream buffers + IfcNgeomStream
Krande Jul 3, 2026
bfd9645
fix: shrink NGEOM stream buffers before handing to Python
Krande Jul 3, 2026
6ce57fb
fix: IfcNgeomStream must not yield procedural roots as empty buffers
Krande Jul 4, 2026
af055b0
feat: [STEPPROF] coverage for all emit legs + machine-readable summary
Krande Jul 4, 2026
927a479
perf: fix the degenerate-domain B-spline grid explosion + face-parall…
Krande Jul 5, 2026
535c941
fix: tessellate curved shapes with a 0.2 rad angular deflection, not …
Krande Jul 6, 2026
c713cec
fix: NGEOM partial revolve — add end caps + guarantee outward winding
Krande Jul 6, 2026
3f0bc94
fix: NGEOM extrusion — guarantee outward winding (was inside-out, dar…
Krande Jul 6, 2026
85de331
feat: per-surface size-adaptive angular tessellation density (TessPar…
Krande Jul 7, 2026
a9ad926
fix: chain face-loop edges end-to-end + trim reversed B-spline bounda…
Krande Jul 7, 2026
b21fbb8
fix: angle_step used the 2-degree floor (not max_angle) when deflecti…
Krande Jul 7, 2026
bc59089
fix: IfcResolver honors IndexedPolyCurve arc segments (fillets no lon…
Krande Jul 9, 2026
1fa8f72
feat: NGEOM encoder emits analytic solids; IfcNgeomStream streams pro…
Krande Jul 9, 2026
09b08ed
feat: IfcResolver product-by-representation + IfcRoundedRectangleProf…
Krande Jul 9, 2026
524240b
feat: NGEOM encoder emits swept solids (tag 54); completes solid enco…
Krande Jul 9, 2026
e138e60
feat: IfcResolver reads face sets + surface models + plain IfcFace (1…
Krande Jul 9, 2026
f6f58d9
feat: IfcResolver reads IfcSweptDiskSolid (rebar/pipes) -> SweepN
Krande Jul 9, 2026
1ac3da6
feat: IfcResolver reads FixedReferenceSweptAreaSolid + SectionedSolid…
Krande Jul 9, 2026
86ba34a
feat: IfcResolver samples IFC alignment directrixes (clothoid/cant) +…
Krande Jul 9, 2026
3d6e62d
feat: NGEOM curve-only bodies -> GL_LINES (alignment axes, trimmed/se…
Krande Jul 9, 2026
666e4cb
feat: representation-class filter + 2D trimmed/composite curve profil…
Krande Jul 9, 2026
f429a01
fix: don't count degenerate/container products as unsupported skips (…
Krande Jul 9, 2026
40d4fa6
feat: C++ crows-nest distortion scanner (Mesh.spike_stats + mesh_spik…
Krande Jul 9, 2026
29f50c0
feat: IfcResolver resolves presentation colour (IfcStyledItem -> IfcC…
Krande Jul 9, 2026
aa806e9
feat: IfcResolver emits spatial-structure path (instance_paths) for t…
Krande Jul 9, 2026
4a4e5e0
feat: native IFC writer emits presentation colour (IfcStyledItem -> I…
Krande Jul 9, 2026
acc76a3
feat: read gzip-compressed IFC/STEP input (StreamIndex inflates befor…
Krande Jul 9, 2026
06ba4c1
feat: native pure-C++ IFC -> GLB (stream_ifc_to_glb), no ifcopenshell…
Krande Jul 9, 2026
c0266cc
fix: native IFC hierarchy/picking uses GlobalId when Name is empty (m…
Krande Jul 9, 2026
3392242
feat: weld vertices + crease-angle smooth normals per root (all geom …
Krande Jul 9, 2026
f9a3416
fix: circle profile density from the angular tolerance, not a fixed 6…
Krande Jul 9, 2026
944e6b7
feat: adacpp.cad.blobs_to_ifc — native IFC writer from NGEOM blobs + …
Krande Jul 9, 2026
e01c99d
feat: native IFC writer emits ANALYTIC solids (inverse of the IFC rea…
Krande Jul 9, 2026
0e577d3
feat: IFC->STEP emits analytic swept-disk + sphere (AP242 SWEPT_DISK_…
Krande Jul 9, 2026
0717715
feat: IFC writer uses generic IfcSpatialZone hierarchy (not IfcBuildi…
Krande Jul 9, 2026
d9cd25d
feat: IFC->STEP emits a NEXT_ASSEMBLY_USAGE_OCCURRENCE assembly tree …
Krande Jul 9, 2026
f9c7fd3
feat: native STEP reader reads SWEPT_DISK_SOLID -> ng::SweepN (IFC->S…
Krande Jul 9, 2026
b90d338
STEP reader: read NAUO product tree into instance_paths
Krande Jul 9, 2026
06e3eef
IFC reader: round IfcIShapeProfileDef web/flange corners with FilletR…
Krande Jul 10, 2026
11aaae2
feat: OCC-free no-pyodide IFC→GLB embind wasm module (adacpp_ifc_glb)
Krande Jul 10, 2026
c4bc745
feat: OCC-free no-pyodide B-rep writer wasm module (STEP↔IFC)
Krande Jul 10, 2026
69aedec
ci: publish adacpp_ifc_glb + adacpp_brep_writer in the wasm-base image
Krande Jul 10, 2026
4af3d99
fix: gate STEP NAUO path override to the flat-path (no-CDSR) fallback…
Krande Jul 10, 2026
415c5cc
perf: trim streaming-tessellation peak RSS via a moderate malloc mmap…
Krande Jul 10, 2026
a2af315
perf: B-spline-weighted LPT cost estimate + per-solid audit instrumen…
Krande Jul 10, 2026
d7c2748
feat: parallelize native IFC->GLB (LPT-ordered, per-thread resolvers)
Krande Jul 10, 2026
5a7100a
fix: smooth-shade explicit IFC face-sets (IfcFacetedBrep / face-sets)
Krande Jul 10, 2026
46fe318
fix: explicit IFC face-sets were flattened to z=0 (fit the real plane…
Krande Jul 10, 2026
f502ab5
revert: drop the smooth_faceset weld-crease change (5a7100a)
Krande Jul 10, 2026
9d0149e
perf: CSR grouping in weld_mesh (drop the map-of-vectors)
Krande Jul 11, 2026
ae8fb6b
perf: bound parse_cache_ on the phase-A resolver (STEP->GLB)
Krande Jul 11, 2026
5fe25ba
perf: bound parse_cache_ on the phase-A resolver (STEP->mesh)
Krande Jul 11, 2026
267e0b7
perf: mid-product cache_ bounding in IfcResolver (huge single-product…
Krande Jul 12, 2026
b83a8f9
fix: spawned face-worker threads lost adaptive density (thread-local …
Krande Jul 12, 2026
fb9284a
perf: buffer GLB spill lanes in RAM until a threshold (cut nvme write…
Krande Jul 13, 2026
237a7d5
fix: IFC linear placement + opening voids in the native reader
Krande Jul 13, 2026
50e8148
fix: ignore bogus large SI unit prefixes in the native STEP reader (e…
Krande Jul 13, 2026
3baa1fe
feat: count silently-dropped faces in tessellation (audit health flag)
Krande Jul 13, 2026
eceedbd
fix: tessellate SURFACE_OF_LINEAR_EXTRUSION faces (dropped ventilator…
Krande Jul 13, 2026
826e347
fix: keep extrusion UV inversion on one profile fold (hint-first)
Krande Jul 13, 2026
dc41923
feat: opt-in per-face clickable regions in STEP->GLB (face_ranges_node)
Krande Jul 13, 2026
8c1cafc
feat: face_regions arg on the stream_step_to_glb python binding
Krande Jul 13, 2026
e00d0ef
fix: respect curved trim on near-rectangular B-spline faces (bevels)
Krande Jul 13, 2026
3e18e9f
fix: angular (normal-deviation) refinement so curved surfaces aren't …
Krande Jul 13, 2026
5a84825
fix(step): convert cone semi-angle from the file's plane-angle unit
Krande Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions .github/workflows/publish-wasm-base.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -78,19 +78,33 @@ jobs:
# diff utility. OCC-free -> a quick emcc build.
run: pixi run -e wasm wbuild-glbdiff

- name: Stage /out (wheel + manifest + sha + step-glb + glb-diff wasm)
- name: Build the no-pyodide IFC->GLB wasm module
# Standalone embind module (no OCCT, no pyodide, no ifcopenshell) for the viewer's in-browser
# IFC->GLB (IfcResolver -> libtess2 -> GLB). OCC-free -> a quick emcc build.
run: pixi run -e wasm wbuild-ifcglb

- name: Build the no-pyodide B-rep writer wasm module
# Standalone embind module (no OCCT, no pyodide, no ifcopenshell) for the viewer's in-browser
# STEP<->IFC writers (no tessellation). OCC-free -> a quick emcc build.
run: pixi run -e wasm wbuild-brepwriter

- name: Stage /out (wheel + manifest + sha + step-glb + glb-diff + ifc-glb + brep-writer wasm)
run: |
mkdir -p out out/wasm
cp dist/ada_cpp-*.whl out/
cp build-wasm-stepglb/wasm_output/adacpp_step_glb.js out/wasm/
cp build-wasm-stepglb/wasm_output/adacpp_step_glb.wasm out/wasm/
cp build-wasm-glbdiff/wasm_output/adacpp_glb_diff.js out/wasm/
cp build-wasm-glbdiff/wasm_output/adacpp_glb_diff.wasm out/wasm/
cp build-wasm-ifcglb/wasm_output/adacpp_ifc_glb.js out/wasm/
cp build-wasm-ifcglb/wasm_output/adacpp_ifc_glb.wasm out/wasm/
cp build-wasm-brepwriter/wasm_output/adacpp_brep_writer.js out/wasm/
cp build-wasm-brepwriter/wasm_output/adacpp_brep_writer.wasm out/wasm/
cd out
wheel=$(ls ada_cpp-*.whl)
printf '{"adacpp":"%s"}\n' "$wheel" > manifest.json
printf '%s\n' "${GITHUB_SHA}" > adacpp.sha
echo "Staged $wheel + out/wasm/ (adacpp_step_glb + adacpp_glb_diff .js/.wasm)"
echo "Staged $wheel + out/wasm/ (adacpp_step_glb + adacpp_glb_diff + adacpp_ifc_glb + adacpp_brep_writer .js/.wasm)"

- uses: docker/setup-buildx-action@v4

Expand Down
22 changes: 20 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ endif()
OPTION(BUILD_WASM "Build the project for WebAssembly" OFF)
OPTION(BUILD_STEP_GLB_WASM "Build ONLY the OCC-free STEP->GLB wasm module (embind, no OCCT/pyodide/Python)" OFF)
OPTION(BUILD_GLB_DIFF_WASM "Build ONLY the OCC-free GLB-diff wasm module (embind, no OCCT/pyodide/Python)" OFF)
OPTION(BUILD_IFC_GLB_WASM "Build ONLY the OCC-free IFC->GLB wasm module (embind, no OCCT/pyodide/Python)" OFF)
OPTION(BUILD_BREP_WRITER_WASM "Build ONLY the OCC-free B-rep writer wasm module (STEP<->IFC, embind, no OCCT/pyodide/Python)" OFF)
OPTION(BUILD_STP2GLB_STANDALONE "Build ONLY the OCC-free STP2GLB CLI — skip OCCT/CGAL/gmsh/IFC/Python" OFF)
OPTION(BUILD_PYTHON "Build the project for Python" ON)
OPTION(BUILD_STP2GLB "Build the STP2GLB executable" ON)
Expand Down Expand Up @@ -149,8 +151,9 @@ if (BUILD_WASM)
# Cross-compile a minimal OCCT to wasm via FetchContent. Sets WASM_OCCT_TARGETS
# for the nanobind module / executables to link against. First spike is
# FoundationClasses only; module set widens as features land.
# Skipped for the OCC-free STEP->GLB / GLB-diff modules — they need no OCCT, so we avoid the heavy cross-build.
if (NOT BUILD_STEP_GLB_WASM AND NOT BUILD_GLB_DIFF_WASM)
# Skipped for the OCC-free standalone embind modules (STEP->GLB / IFC->GLB / GLB-diff / B-rep
# writer) — they need no OCCT, so we avoid the heavy cross-build.
if (NOT BUILD_STEP_GLB_WASM AND NOT BUILD_GLB_DIFF_WASM AND NOT BUILD_IFC_GLB_WASM AND NOT BUILD_BREP_WRITER_WASM)
include(cmake/wasm_occt.cmake)
endif ()
endif ()
Expand Down Expand Up @@ -201,6 +204,21 @@ include(cmake/deps_manifold.cmake)
list(APPEND ADA_CPP_LINK_LIBS manifold)
add_compile_definitions(ADACPP_HAVE_MANIFOLD)

# zlib for gzip-compressed IFC/STEP input (StreamIndex inflates before indexing). Native only — the
# pixi test/prod envs carry zlib; the wasm build skips gzip (gunzip() is a no-op without the define,
# returning 0 statements rather than crashing). The ADACPP_HAVE_ZLIB define is applied ONLY to the
# Python ext target (build_python.cmake, guarded on ZLIB_FOUND) — NOT globally — so the minimal
# STP2GLB CLI and the C++ test targets (which don't link zlib) compile gunzip() as the no-op stub.
if (NOT BUILD_WASM)
find_package(ZLIB)
if (ZLIB_FOUND)
list(APPEND ADA_CPP_LINK_LIBS ZLIB::ZLIB)
message(STATUS "zlib found: gzip-compressed IFC/STEP input enabled (Python ext)")
else ()
message(STATUS "zlib NOT found: gzip-compressed input disabled")
endif ()
endif ()

if (BUILD_STP2GLB)
message(STATUS "Building the STP2GLB executable")
include(cmake/build_stp2glb.cmake)
Expand Down
7 changes: 7 additions & 0 deletions cmake/build_python.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ nanobind_add_module(_ada_cpp_ext_impl STABLE_ABI ${ADA_CPP_SOURCES} ${ADA_CPP_PY
# Link libraries to the module
target_link_libraries(_ada_cpp_ext_impl PRIVATE ${ADA_CPP_LINK_LIBS})

# gzip-compressed IFC/STEP input: enable StreamIndex's zlib inflate ONLY on this target (it links
# ZLIB::ZLIB via ADA_CPP_LINK_LIBS). Other targets compile gunzip() as the no-op stub, so the
# minimal STP2GLB CLI / C++ tests need no zlib link. ZLIB_FOUND is set in the top-level CMakeLists.
if (ZLIB_FOUND)
target_compile_definitions(_ada_cpp_ext_impl PRIVATE ADACPP_HAVE_ZLIB)
endif ()

# Wasm builds: statically link the OCCT toolkits cross-built by wasm_occt.cmake.
# The OCCT IMPORTED targets carry their include dir as INTERFACE_INCLUDE_DIRECTORIES,
# so adding them here also makes <BRepPrimAPI_MakeBox.hxx> & friends resolve.
Expand Down
50 changes: 50 additions & 0 deletions cmake/wasm_build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,56 @@ if (BUILD_STEP_GLB_WASM)
return() # standalone target; skip the legacy WASM_UTILS stub below
endif ()

# The OCC-free native IFC->GLB pipeline as a STANDALONE embind wasm module — no OCCT, no pyodide, no
# ifcopenshell, no nanobind, no Python. The IFC counterpart of adacpp_step_glb: same neutral-geometry
# tessellation + GLB stack (ngeom + libtess2 + meshopt + manifold), IfcResolver front-end. Streams
# the IFC from OPFS via WASMFS so large files never have to fit the wasm heap.
if (BUILD_IFC_GLB_WASM)
add_executable(adacpp_ifc_glb
${CMAKE_SOURCE_DIR}/src/cad/ifc_glb_wasm.cpp
${CMAKE_SOURCE_DIR}/src/geom/neutral/ngeom_tessellate.cpp
${CMAKE_SOURCE_DIR}/src/geom/neutral/ngeom_boolean.cpp
${CMAKE_SOURCE_DIR}/src/geom/neutral/ngeom_meshopt.cpp
${LIBTESS2_SOURCES}
${MESHOPT_SOURCES})
target_link_libraries(adacpp_ifc_glb PRIVATE manifold)
set_target_properties(adacpp_ifc_glb PROPERTIES OUTPUT_NAME "adacpp_ifc_glb" SUFFIX ".js")
target_link_options(adacpp_ifc_glb PRIVATE
"-lembind"
"-sWASMFS=1" # WASMFS + OPFS backend (file-backed pread, not heap)
"-sFORCE_FILESYSTEM=1"
"-sEXPORTED_RUNTIME_METHODS=['FS']" # JS-side FS for OPFS mount + node smoke test
"-sALLOW_MEMORY_GROWTH=1"
"-sMODULARIZE=1"
"-sEXPORT_ES6=1"
"-sEXPORT_NAME=createAdacppIfcGlb"
"-sENVIRONMENT=web,worker,node"
"-sSTACK_SIZE=1048576")
return() # standalone target; skip the legacy WASM_UTILS stub below
endif ()

# The OCC-free native B-rep WRITER (STEP→IFC + IFC→STEP) as a STANDALONE embind wasm module — no
# OCCT, no pyodide, no ifcopenshell, no nanobind, no Python. No tessellation (writers operate on the
# analytic NgeomRoot), so unlike the →GLB modules it needs NO libtess2 / meshopt / manifold. Shares one
# implementation with the nanobind module via brep_file_convert.h. Streams source from OPFS via WASMFS.
if (BUILD_BREP_WRITER_WASM)
add_executable(adacpp_brep_writer
${CMAKE_SOURCE_DIR}/src/cad/brep_writer_wasm.cpp)
set_target_properties(adacpp_brep_writer PROPERTIES OUTPUT_NAME "adacpp_brep_writer" SUFFIX ".js")
target_link_options(adacpp_brep_writer PRIVATE
"-lembind"
"-sWASMFS=1" # WASMFS + OPFS backend (file-backed pread, not heap)
"-sFORCE_FILESYSTEM=1"
"-sEXPORTED_RUNTIME_METHODS=['FS']" # JS-side FS for OPFS mount + node smoke test
"-sALLOW_MEMORY_GROWTH=1"
"-sMODULARIZE=1"
"-sEXPORT_ES6=1"
"-sEXPORT_NAME=createAdacppBrepWriter"
"-sENVIRONMENT=web,worker,node"
"-sSTACK_SIZE=1048576")
return() # standalone target; skip the legacy WASM_UTILS stub below
endif ()

set(WASM_SOURCES src/wasm_utils.cpp)
set(WASM_HEADERS src/wasm_utils.h)

Expand Down
6 changes: 4 additions & 2 deletions deploy/Dockerfile.wasm-base
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
# ada_cpp-<ver>-cp313-cp313-pyodide_2025_0_wasm32.whl
# manifest.json {"adacpp": "<wheel filename>"}
# adacpp.sha the resolved adacpp commit
# wasm/adacpp_step_glb.{js,wasm} no-pyodide STEP->GLB embind module (viewer in-browser convert)
# wasm/adacpp_glb_diff.{js,wasm} no-pyodide GLB-diff embind module (viewer in-browser diff utility)
# wasm/adacpp_step_glb.{js,wasm} no-pyodide STEP->GLB embind module (viewer in-browser convert)
# wasm/adacpp_glb_diff.{js,wasm} no-pyodide GLB-diff embind module (viewer in-browser diff utility)
# wasm/adacpp_ifc_glb.{js,wasm} no-pyodide IFC->GLB embind module (viewer in-browser convert)
# wasm/adacpp_brep_writer.{js,wasm} no-pyodide STEP<->IFC B-rep writer embind module
#
# busybox (not scratch) so `docker create` + `docker cp` work for consumers
# that extract /out/ without a running command.
Expand Down
2 changes: 2 additions & 0 deletions pixi.toml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ clean = { cmd = "rm -rf build-wasm && mkdir -p build-wasm" }
wbuild = { cmd = "emcmake cmake . -B build-wasm -G Ninja -DBUILD_WASM=ON -DBUILD_PYTHON=OFF -DBUILD_TESTS=OFF -DBUILD_STP2GLB=OFF && cmake --build build-wasm", depends-on = ["clean"] }
wbuild-stepglb = { cmd = "emcmake cmake . -B build-wasm-stepglb -G Ninja -DBUILD_WASM=ON -DBUILD_STEP_GLB_WASM=ON -DBUILD_PYTHON=OFF -DBUILD_TESTS=OFF -DBUILD_STP2GLB=OFF && cmake --build build-wasm-stepglb", description = "Build the OCC-free no-pyodide STEP->GLB embind wasm module (adacpp_step_glb.js + .wasm)" }
wbuild-glbdiff = { cmd = "emcmake cmake . -B build-wasm-glbdiff -G Ninja -DBUILD_WASM=ON -DBUILD_GLB_DIFF_WASM=ON -DBUILD_PYTHON=OFF -DBUILD_TESTS=OFF -DBUILD_STP2GLB=OFF && cmake --build build-wasm-glbdiff", description = "Build the OCC-free in-browser GLB diff embind wasm module (adacpp_glb_diff.js + .wasm)" }
wbuild-ifcglb = { cmd = "emcmake cmake . -B build-wasm-ifcglb -G Ninja -DBUILD_WASM=ON -DBUILD_IFC_GLB_WASM=ON -DBUILD_PYTHON=OFF -DBUILD_TESTS=OFF -DBUILD_STP2GLB=OFF && cmake --build build-wasm-ifcglb", description = "Build the OCC-free no-pyodide IFC->GLB embind wasm module (adacpp_ifc_glb.js + .wasm)" }
wbuild-brepwriter = { cmd = "emcmake cmake . -B build-wasm-brepwriter -G Ninja -DBUILD_WASM=ON -DBUILD_BREP_WRITER_WASM=ON -DBUILD_PYTHON=OFF -DBUILD_TESTS=OFF -DBUILD_STP2GLB=OFF && cmake --build build-wasm-brepwriter", description = "Build the OCC-free no-pyodide B-rep writer embind wasm module (STEP<->IFC: adacpp_brep_writer.js + .wasm)" }
xbuildenv-install = { cmd = "pyodide xbuildenv install 0.29.4", description = "Install the pyodide cross-build environment (Python 3.13 + emscripten 4.0.9)" }
build-occt-wasm = { cmd = "emcmake cmake --preset wasm-pyodide -DPython_INCLUDE_DIR=\"$(pyodide config get python_include_dir)\" && cmake --build build/wasm-pyodide --target occt_external", description = "Cross-build + install ONLY the OCCT-wasm toolkits → build/wasm-pyodide/_deps/occt-install (the reusable base-image input)" }
wbuild-pyodide = { cmd = "emcmake cmake --preset wasm-pyodide -DPython_INCLUDE_DIR=\"$(pyodide config get python_include_dir)\" && cmake --build build/wasm-pyodide", description = "Build the adacpp nanobind module for pyodide" }
Expand Down
5 changes: 5 additions & 0 deletions src/adacpp/cad/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,24 @@
tessellate_stream = _cad.tessellate_stream
stream_step_to_meshes = _cad.stream_step_to_meshes
stream_step_to_glb = _cad.stream_step_to_glb
stream_ifc_to_glb = _cad.stream_ifc_to_glb
stream_step_to_mesh = _cad.stream_step_to_mesh
step_emit_ifc_brep = _cad.step_emit_ifc_brep
stream_step_to_step = _cad.stream_step_to_step
stream_ifc_to_step = _cad.stream_ifc_to_step
stream_step_to_ifc = _cad.stream_step_to_ifc
blobs_to_ifc = _cad.blobs_to_ifc
step_parity = _cad.step_parity
glb_diff = _cad.glb_diff
stream_step_to_glb_st = _cad.stream_step_to_glb_st
stream_step_to_ngeom = _cad.stream_step_to_ngeom
StepRootMeta = _cad.StepRootMeta
StepNgeomStream = _cad.StepNgeomStream
IfcNgeomStream = _cad.IfcNgeomStream
_step_index_parity = _cad._step_index_parity
ifc_taxonomy_settings = _cad.ifc_taxonomy_settings
meshopt_simplify_mesh = _cad.meshopt_simplify_mesh
mesh_spike_stats = _cad.mesh_spike_stats
meshopt_encode_vertex_buffer = _cad.meshopt_encode_vertex_buffer
meshopt_encode_index_sequence = _cad.meshopt_encode_index_sequence
meshopt_decode_vertex_buffer = _cad.meshopt_decode_vertex_buffer
Expand Down Expand Up @@ -143,6 +147,7 @@
"step_parity",
"StepRootMeta",
"StepNgeomStream",
"IfcNgeomStream",
"meshopt_simplify_mesh",
"bbox",
"obb",
Expand Down
Loading
Loading