feat: IFC → Pascal converter (package + app)#324
Merged
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
Contributor
|
Build failure addressed by #325 |
1d0f2fb to
ef255b1
Compare
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>
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>
ef255b1 to
7d9c89c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Adds an IFC → Pascal converter to the monorepo, replacing a standalone repo that consumed published
@pascal-app/*packages and drifted from their schemas.packages/ifc-converter— pure conversion logic (no DOM/React). Parses IFC via web-ifc and maps elements onto@pascal-app/corenode schemas (workspace-linked, so no version drift). Each node is built through the real Zod schemas (tryParse) and undefined metadata is stripped.apps/ifc-converter— Next.js UI: drop zone, example picker, element search/filters, 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), a level selector with camera-focus, auto-fit, and click-to-inspect.Conversion specifics:
height/2; windowsill + height/2).IFCRELFILLSELEMENT, preferring a wall long enough to contain the opening and clamping the along-wall position so cutouts can't overflow and break wall CSG.IFCWALL(Brep/mapped geometry) falls back to default height/thickness instead of collapsing to zero-height slivers.Large example IFCs are fetched from a public bucket at runtime; the 4 small ones are committed.
web-ifc.wasmis copied intopublic/on install/dev/build. README flags early alpha and invites contributions.How to test
bun install(copiesweb-ifc.wasmintoapps/ifc-converter/public/via postinstall).apps/ifc-converter:bun dev→ open http://localhost:3003.bun run check-typesat the repo root → green across all packages.Screenshots / screen recording
N/A in the PR description — happy to attach a short clip. The converter page itself is the visual surface (drop zone + 3D preview).
Checklist
bun devbun checkto verify)mainbranch🤖 Generated with Claude Code