Skip to content

fix(ifc): avoid merging adjacent wall assemblies - #603

Open
yorhodes wants to merge 2 commits into
pascalorg:mainfrom
yorhodes:codex/ifc-wall-cleanup
Open

fix(ifc): avoid merging adjacent wall assemblies#603
yorhodes wants to merge 2 commits into
pascalorg:mainfrom
yorhodes:codex/ifc-wall-cleanup

Conversation

@yorhodes

@yorhodes yorhodes commented Aug 5, 2026

Copy link
Copy Markdown

Summary

  • tighten the wall-fragment centerline tolerance so adjacent parallel walls are not collapsed
  • require material associations to match before collinear fragments merge
  • treat a tagged wall and an untagged wall as incompatible instead of silently allowing the merge
  • add focused regression coverage for offset centerlines and material boundaries

Scope

This is the cleanup-only follow-up requested in the review of #553. It changes only the IFC cleanup implementation and its tests.

Fixture wall counts

The same unsimplified converted nodes were passed through main and this branch:

Fixture Input walls main output this PR output
01-duplex.ifc 57 53 57
04-ifc-open-house.ifc 4 4 4
05-paris-ground-floor.ifc 114 85 100
10-sample-house.ifc 5 5 5

For Paris, merged groups change from 15 to 8 and removed merged walls from 28 to 13. The stricter behavior intentionally preserves ambiguous wall assemblies for later inspection instead of joining nearby centerlines.

Verification

  • bun test packages/ifc-converter/tests/cleanup.test.ts — 6 passed
  • Biome check on both changed files
  • before/after conversion counts recorded for all four bundled fixtures

Note

Medium Risk
Changes post-conversion scene topology (fewer merged walls on real fixtures like Paris), which can affect downstream geometry and editing but is confined to the IFC simplification step with explicit regression tests.

Overview
IFC scene-graph cleanup now merges collinear wall fragments less aggressively, so adjacent parallel assemblies and mismatched materials stay separate.

Centerline tolerance in wallLineTolerance drops from ~half wall thickness to ~10% (capped ~5–25 mm), so fragments offset by a couple of inches no longer collapse into one wall.

Material gating adds wallMaterialSignature / wallMaterialCompatible on metadata.material and metadata.materialLayers; tagged vs untagged walls are incompatible, while identical layer assemblies can still merge. wallsCanMerge enforces this before interval checks.

Regression tests cover offset centerlines, material/layer boundaries, and matching-layer merges.

Reviewed by Cursor Bugbot for commit 0024b1e. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want reviews to match your repository better? Bugbot Learning can learn team-specific rules from PR activity. A team admin can enable Learning in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d1cbf8d. Configure here.

Comment thread packages/ifc-converter/src/cleanup.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant