Skip to content

Editor punch list: walls, rooms, porches and decks, railings, stairs, foundations and roofs - #1193

Open
Steven-Tibbs wants to merge 31 commits into
pascalorg:mainfrom
Steven-Tibbs:steve/editor-punch-list
Open

Steven-Tibbs wants to merge 31 commits into
pascalorg:mainfrom
Steven-Tibbs:steve/editor-punch-list

Conversation

@Steven-Tibbs

@Steven-Tibbs Steven-Tibbs commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

What does this PR do?

The editor side of the punch list: wall editing, rooms and invisible walls, porches and decks, railings, beams, posts and stairs, foundations, roofs, and wall and roof assemblies.

Walls

  • Pushing or dragging a wall leaves no doubled or leftover walls; a wall continued over another takes over the stretch it covers
  • Exterior corners miter; interior walls meet the inside face and leave the outer wall whole
  • Pull to continue from a selected wall's end; line-up snap and arrow-key nudge
  • Tab steps through stacked objects; open wall ends select their wall
  • Temporary dimensions on a selected wall (inside and outside faces), editable

Rooms, porches and decks

  • Invisible walls (room dividers): they close rooms, never cut walls, stay joined when moved and snap at their ends
  • Room types Room, Porch, Deck and Patio; a room closed off outside the house steps down and takes its type's defaults
  • Push and pull arrows on invisible-wall and railing edges
  • Porch posts and beam, automatic or by hand (post size, spacing, beam size); optional on decks and patios
  • Decks drawn as 3D boards (5/4x6, 2x6, 2x4, composite; 1/8 to 1/4 in gaps; along, diagonal or out from the house) on their framing: ledger, joists, rims, beam, posts on piers
  • Porch and patio slabs run down to the ground, graded round them

Railings, beams, posts and stairs

  • Railing wall type: styles, post spacing and size, openings; rooms close on railings
  • Beam and Post tools with their panels and plan symbols
  • Stairs with wood stringers, concrete or steel, with code checks

Foundations

  • Designed foundation: slab on grade with a turned-down edge, raised floor (stem wall, footing, cripple wall) or piles and grade beams; stepped footings
  • Footing tool (strip and pad)
  • Ground graded to the foundation; foundation row and foundation view
  • Floor build-up layers; slab rooms (a garage) on a raised house; basements

Roofs

  • Roof plan with the eave outline and live updates
  • A moved roof and its side arrows catch the wall lines; gable and heel walls match the walls below
  • Roofs snap to porch, deck and invisible-wall edges; railings never carry a roof

Assemblies and display

  • Wall stud spacing; roof and ceiling layers
  • Door and window casing on the finished wall faces; cutouts at the unit's own size
  • Ceilings display setting; walls below and above; framing view hooks
  • A box selection leaves rooms' automatic floors and ceilings out

Translations

  • New copy goes through the i18n catalog; es, fr, ja and zh-CN drafts are marked for review

Checklist

  • I've tested this locally
  • My code follows the existing code style (run bun check to verify)
  • This PR targets the main branch

🤖 Generated with Claude Code

- Walls: push and overlap fixes, square T and corner joins, pull to
  continue from a wall end, line-up snap, arrow nudge, Tab through stacked
  selections
- Rooms: invisible walls; Room, Porch, Deck and Patio room types; outdoor
  rooms step down from the house and take their defaults
- Porches: automatic posts and beam (sizes, spacing, Automatic or Manual),
  optional on decks and patios
- Decks: 3D boards (size, gap, direction) on a framed deck drawn in the
  model; one framing layout shared with the framing plugin
- Railings: railing wall type with styles, posts and openings; rooms close
  on railings
- Beams and posts: beam and post tools, panels and plan symbols
- Stairs: wood stringers, concrete or steel, with code checks
- Foundations: designed slab, raised floor and piles; stepped and drawn
  footings; ground graded round slabs; porch and patio slabs run to grade
- Roofs: roof plan, wall catch, gable walls; snapping to porch, deck and
  invisible-wall edges
- Assemblies: wall stud spacing, roof and ceiling layers, floor build-up
- Display: framing plan hooks, foundation view, ceilings and walls below
- Box selection leaves rooms' automatic floors and ceilings out

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 28, 2026

Copy link
Copy Markdown

This PR is too large for Bugbot to review. It changes 59,852 lines and 3,318,517 characters. Split the change into smaller pull requests to get a review.

@Steven-Tibbs Steven-Tibbs changed the title Porches, decks, railings, stairs, foundations and framing tools Editor punch list: walls, rooms, porches and decks, railings, stairs, foundations and roofs Oct 28, 2026
Steven-Tibbs and others added 27 commits October 28, 2026 14:23
- New UI text goes through the i18n catalog
- es, fr, ja and zh-CN drafts for the new messages, marked for review
- The literal baseline shrinks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- es, fr, ja and zh-CN catalogs back in the order i18n:extract writes them; no message changes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The open-source editor's Display menu shows Walls below and Walls above in the 2D view; it had no button for them
- Uses the existing translations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Share lap and batten PBR maps across all 18 painted siding finishes. Preflip sources for compressed texture storage and preserve the existing tint, sheen and board spacing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Convert grey shingles base color and supply classic/weathered map sets and thumbnails. Preserve their existing compressed-texture orientation, remove superseded WebP maps, and require KTX2 maps plus thumbnails for textured catalog entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n the action menu

- Door "Swap hinge side" / "Swap swing side" now open a closed door through
  its mechanism (the action menu's Open preview), so the new side shows. The
  swap stays one undo step; the open state is not saved.
- Windows get "Swap hinge side" in the action bar (2D and 3D) for a single
  casement, the only type hung from a side jamb; the swap opens a closed
  sash the same way. Windows have no inward/outward notion, so no swing swap.
- Plugin inspector extensions (e.g. Bones' Engineering) leave the panel
  header: each is now an action-menu button with the extension's icon and
  its title as tooltip, opening or keeping the card on that extension. The
  active extension moves from PanelWrapper-local state into the inspector
  store so the menu can drive it; the header keeps back, reset, collapse and
  close.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Display is grouped as Show / Dimensions / Plan (2D only) / Scene (3D only) /
  Editing, with a scope line and view tags in split; other levels (walls
  below / above) are Below / Above chips shown where the plan is
- New Dimensions switch (persisted, default on) hides the selected wall's
  temporary dimensions in 2D and 3D and the plan's automatic and contextual
  dimensions, in the editor and the PDF export
- Measure walls (Inside ID / Outside OD / Both, default Both) replaces the
  Expert "Wall dimensions" reference (finished faces / centerline / face of
  stud) and the wall action menu's ID+OD button; the Expert strings always
  measure finished faces and the choice keeps their interior chains, their
  facade chains or both; a stale stored value reads as Both
- Split wall and Merge walls use the action menu's tooltip button
- Wiki: selection-managers "Selected-wall dimensions"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wall panel

- Rooms tiles are Rectangle / Polygon / Walls only. The Exterior wall,
  Interior wall, Invisible wall and Railing tiles are gone; while Walls is
  armed a segmented row picks Standard / Invisible / Railing with one help
  line (`WALL_KINDS`, `selectWallKind`, session-only).
- The wall type and finish pickers under the tiles are gone and new walls
  are plain again, as on main: `DrawnWallTypes`, the wall types / finishes
  preferences, the type override and the draft-time finish helpers are
  deleted. Foundation walls copied up a storey are plain walls.
- Project wall types are made, edited, duplicated and deleted from the wall
  panel's Assembly Preset (`WallTypeMenu`, reusing the type editor dialog,
  moved to components/ui/wall-type); a saved type is applied to the wall in
  the same undo step.
- Walls draws one wall per two clicks and stops, with main's angle and
  magnetic snapping, in the 3D tool and the plan. Polygon sides and pulled
  runs keep the square-holding run snap (`wallDraftIsRun`).
- B arms the wall tool on the Rooms shape picked last (persisted), Rectangle
  the first time.
- Shift+E and I are removed with their tiles.
- tools.md: wall lifecycle and tool keys updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The shadow revert left the PR's assertions that hidden upper levels drop out
of the shadow map; they now check main's shadow-only casting again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restores main's click-to-move: a plain click on the already-selected sole
movable node starts its move (3D selection manager), and a plain click on a
multi-selection member or on the group's dashed box, in 2D and 3D, starts
the group pick-up. The PR's other fixes in those files stay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A group move whose participants are all walls (body drag in 2D or 3D, or
the pick-up) now moves each wall as its own push arrow would:
planWallGroupPush projects the drag on each wall's normal so it stays
parallel, moves an end shared with another moved, non-parallel wall by the
whole drag so they stay joined, and lets the junction planner carry the
walls joined to them. The preview rides the push's live overrides and
ghosts, release commits one undo step, and the room widths each wall's push
shows appear live in both views (wall-group-push drag). Mixed selections and
pasted or duplicated carries keep the rigid slide.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Catalogs re-extracted after the Display, Build panel, wall-type and window
  action changes; strings the fixes removed drop out
- es, fr, ja and zh-CN drafts for the 35 new messages, marked for review

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The product decision for this branch is to keep main's floor plates and
slabs as the single source of truth. This takes out what the branch built
beside them and restores main's code:

- the designed foundation (slab with turned-down edge, raised floor, piles,
  stepped footings, designed basements) and the building foundation record;
  main's generic foundation, ground seat, ground level and floor datum are
  back exactly;
- the Foundation and Footing kinds, their tools, panels, plan symbols,
  Build-panel tiles and action-menu entries;
- the level list's Foundation row, the foundation view and its panel;
- ground grading round the foundation (terrain, ground surface, first-person
  collider);
- floor layers on slabs (`buildUp`), the automatic framed thickness of new
  upper floors, the framed lift of "+ below" and the delete-level re-seat;
- slab rooms (a garage carved out of a raised house) and the door sills and
  plate rules that served them.

The deck's posts and the porch slab's edge now run down to the site's own
terrain instead of the graded ground. A slab or wall that still names a
removed field, and a footing or foundation node, load as before: plates are
rebuilt without the field, and the removed kinds stay as unregistered nodes,
as an uninstalled plugin's do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Porch, deck and patio rooms keep their plates from main's generator: the
room's `floor.drop` gives it a step-down plate of its own, tagged for the
slab geometry and the framing plugin, and the kernel keeps a covered porch's
posts and beam with it. A deck's posts stand on concrete piers of its own and
a porch or patio slab runs its edge down to the site's terrain, now that no
grading reshapes the ground round them.

A deck's railings still carry no footing under main's generic foundation:
a test pins it, and the space-detection page says how outdoor rooms sit on
the plates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A ceiling's cap stands on its layers, stopped short of the floor above.
The floor above is main's plate again, resting on the walls below with its
underside at their top, so the test reads the clamp against that plate
rather than a framed floor hanging into the storey.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dragging a stair previews its cuts as live overrides on the floor plate
above and the ceiling below. The preview's re-entry guard was lifted on a
microtask, so the refresh the drop asks for in the same handler (the stair's
live transform cleared) was swallowed, and so was the opening system's own
refresh after it re-cut the surfaces: the preview's old and new holes stayed
drawn over the stored ones until a reload. The guard now covers only the
preview's own writes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
wass08 and others added 3 commits October 30, 2026 14:14
With walls selected in Select mode, alone or among other things, both views
now show every selected wall's temporary room widths and outside sizes, and
the plan keeps each wall's own length (ID/OD) through a multi-selection.
A room width or outside size two selected walls both measure shows once,
by the multi-wall move's own test (now `sameRoomDimension`); the outside
size is placed from the same end of its stretch whichever way the wall was
drawn, so opposite walls put it in one place. Display → Dimensions and
Measure walls apply as before.

Every value stays typeable and moves the wall it runs from. In the plan,
a press on a value under the dashed group box, or on a member's, opens the
type-a-value box instead of starting a group move or pick-up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Catalogs re-extracted: strings for the removed foundation, footing,
  floor-layer and slab-room UI drop out
- Floor thickness takes main's translations back

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Material maps resolve to the asset CDN, which only has a new map once it is
deployed; until then the load failed and the surface fell back to its flat
tint (the KTX2 siding on this branch). A CDN miss now retries the app's own
public copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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.

2 participants