The package has no test files yet. `bun test` exits 1 ("No tests found!")
and fails CI; --pass-with-no-tests isn't honored by the bun 1.3.0 pinned
in CI. Match the convention used by @pascal-app/viewer (no test script):
turbo skips the test task for packages without one. The script comes back
when real tests land.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The package has no test files yet, so `bun test` exits 1 ("No tests
found!") and fails CI. Add --pass-with-no-tests so the task stays green
until real tests land, at which point they run normally.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two converter accuracy refinements:
- Recover plain IFCWALL height/thickness from geometry. These carry
Brep/mapped geometry that getBodyExtrusionData can't read, so measure
the mesh in the wall's own axis frame (along/across/vertical) — a
rotation-invariant projection rather than a world-space AABB (which
conflated a rotated wall's length and thickness). Gate on the measured
length matching the known wall length, and free web-ifc geometry
handles via try/finally on every path.
- Type columns from their IFC swept profile: IfcCircleProfileDef → round
+ radius, IfcRectangleProfileDef → rectangular + width/depth, falling
back to the width/depth ratio when the profile type is unknown.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brings the IFC-to-Pascal converter into the monorepo as a pure-logic
package plus a Next.js app, replacing the standalone repo that consumed
published @pascal-app/* packages (and drifted from their schemas).
packages/ifc-converter — pure conversion. Parses IFC via web-ifc and
maps elements onto @pascal-app/core node schemas (workspace-linked, so
no more version drift). Builds doors/windows, walls, slabs, columns,
roofs, stairs, sites/buildings/levels. Validates each node via the real
Zod schemas at build time (tryParse) and strips undefined metadata.
apps/ifc-converter — the UI: drop zone, example picker, element search,
JSON download, and a 3D preview rendered through the real
@pascal-app/viewer (registry bootstrap + read-only scene) with a custom
toolbar (camera/level/wall/grid/theme), level selector with
camera-focus, auto-fit, and selection bridged to an inspector.
Conversion specifics worth noting:
- Door/window vertical centering (height/2; windows + sill).
- Nearest-wall hosting fallback for files lacking IFCRELFILLSELEMENT,
preferring walls long enough to contain the opening and clamping the
along-wall position so cutouts can't overflow and break wall CSG.
- Plain IFCWALL (Brep/mapped geometry) falls back to default
height/thickness instead of collapsing to zero-height slivers.
- Columns convert as plain structural shafts (no decorative
base/capital) sized from the IFC profile.
- Beams + items are skipped for now (no Pascal beam type; items need a
catalog asset) — counted in the conversion summary.
Large example IFCs are fetched from a public bucket at runtime; the four
small ones are committed. web-ifc.wasm is copied into public/ on
install/dev/build. README flags early-alpha + invites contributions.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>