Skip to content

Commit e734b0c

Browse files
authored
Merge branch 'main' into fix-4108-all-skipped-baseline
2 parents 56b89b7 + bea417a commit e734b0c

133 files changed

Lines changed: 1989 additions & 12971 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.changeset/lucky-donkeys-play.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
'@ifc-lite/cli': patch
3+
---
4+
5+
`extract-entities`: keep spatial containment when extracting a strict subset.
6+
7+
A real exporter writes ONE `IfcRelContainedInSpatialStructure` per storey listing
8+
every product in it, so the previous keep-the-relation-only-when-every-member-is-kept
9+
rule dropped containment on every `--product` / `--type` extraction from a real
10+
model: the extracted products landed outside the spatial tree and a viewer showed
11+
the storey with nothing under it. The relation's `RelatedElements` set is now
12+
rewritten down to the kept members instead, and `IfcRelReferencedInSpatialStructure`
13+
joins `IfcRelAggregates` and `IfcRelContainedInSpatialStructure` in the same
14+
handling. Relations still emit no dangling reference: the relating spatial parent
15+
and every non-set reference must be kept, and an empty intersection drops the
16+
relation. A relation that loses no member emits byte-identical to its source line.

.github/workflows/test.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,10 +276,11 @@ jobs:
276276
# scripts/lib/revert-oracle.mjs byte-for-byte (any `test_*.py` /
277277
# `*_test.py`, any depth) rather than naming known marker
278278
# directories by hand, so a NEW Python test tree can never fall
279-
# outside this filter the way rust/python's and
280-
# scripts/perf/evidence's Python test fixtures did before this
279+
# outside this filter the way rust/python's and the since-removed
280+
# scripts/perf/evidence tree's Python test fixtures did before this
281281
# fix — both already existed unfiltered when this comment was
282-
# written.
282+
# written. That evidence tree was retired in #4112; the path no
283+
# longer exists and nothing needs to be looked for there.
283284
python:
284285
- '**/test_*.py'
285286
- '**/*_test.py'

AGENTS.md

Lines changed: 10 additions & 15 deletions
Large diffs are not rendered by default.
-16.1 KB
Binary file not shown.
-101 KB
Binary file not shown.
-5.06 KB
Binary file not shown.
-384 KB
Binary file not shown.

apps/viewer/public/favicon.png

-1.39 MB
Binary file not shown.

docs/architecture/geometry-pipeline.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ Opening voids (`IfcRelVoidsElement`) go through ONE exact path: the prepass reso
347347
Every element's meshes pass through a single funnel (`build_mesh_data` in `ifc-lite-processing::element`) that applies:
348348

349349
- **Degenerate/sliver drops**: `drop_degenerate_triangles` and `drop_thin_triangles` remove zero-area and needle triangles at every output chokepoint (kernel output, funnel backstop), so CSG residue never reaches the GPU.
350-
- **Source vertex weld** (`mesh_weld::weld_indexed`): collapses vertices with identical f32 position AND coinciding quantized normal (and UV). The faceted-brep mesher emits per-face geometry that duplicates every shared corner 3-6x; the weld undoes that while keeping creases split, because the normal is part of the merge key. Flat shading is preserved by construction (a cube keeps its 24 vertices), and texture seams stay split via the UV key. A naive position-only weld is deliberately NOT used, since it would smooth creases and break flat shading.
350+
- **Source vertex weld** (`mesh_weld`, since #4103 run from the router's placement appliers in the OBJECT frame, and at this funnel only for geometry with no cross-occurrence identity to protect — see the `mesh_weld` module doc): collapses vertices with identical f32 position AND coinciding quantized normal (and UV). The faceted-brep mesher emits per-face geometry that duplicates every shared corner 3-6x; the weld undoes that while keeping creases split, because the normal is part of the merge key. Flat shading is preserved by construction (a cube keeps its 24 vertices), and texture seams stay split via the UV key. A naive position-only weld is deliberately NOT used, since it would smooth creases and break flat shading.
351351

352352
The weld and drops are deterministic across native and wasm32 targets.
353353

packages/cli/src/commands/extract-entities.test.ts

Lines changed: 357 additions & 23 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)