Skip to content

feat(fence): horizontal-board fence style with capped posts#432

Merged
wass08 merged 1 commit into
mainfrom
feat/fence-creation
Jun 19, 2026
Merged

feat(fence): horizontal-board fence style with capped posts#432
wass08 merged 1 commit into
mainfrom
feat/fence-creation

Conversation

@wass08

@wass08 wass08 commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

What

Adds a horizontal fence style — the composite-cladding look (horizontal boards stacked between square, capped posts) that none of the existing styles could produce. Until now slat, rail, and privacy were all vertical pickets between two end posts; they differed only in spacing/thickness factors.

Reference
Horizontal composite boards spanning between capped posts now selectable via Style → Horizontal

Changes

  • New style: 'horizontal'FenceStyle enum + inspector Style control.
  • Geometry (viewer/.../fence-system.tsx): new createHorizontalFenceParts — full-height square posts at every postSpacing (not just the ends), horizontal boards run full-length (so they follow curved fences), reusing the existing kickboard + top-rail spans and the 4 paint slots (posts/infill/base/rail).
  • postCap control — none / flat / pyramid (default pyramid, matching typical post caps). Pyramid caps render as a 4-sided cone via a new shape on the fence part. Rendered as a labelled dropdown so the options aren't a context-free switch.
  • slatGap control — reveal between boards. At 0 the infill collapses to one flush panel so the stacked-board edge seams don't read as faint lines.
  • postCap + slatGap are horizontal-only (visibleIf).
  • Post spacing minimum lowered 0.2 → 0.05 m (step 0.05 → 0.01), all styles.
  • 2D floor plan reuses the solid-panel marker for horizontal.

Notes

  • New schema fields (slatGap, postCap) carry Zod defaults, so existing scenes load unchanged; the defaults only affect the horizontal builder, so slat/rail/privacy fences are visually untouched.
  • The MCP fence-style variant randomizer is left as-is (still privacy/slat/rail) — intentionally out of scope.

Testing

  • tsc --noEmit clean on core, nodes, viewer.
  • biome check introduces no new warnings (the 2 remaining useOptionalChain hints pre-date this PR).
  • Verified live in the community app: drew a fence, switched to Horizontal, exercised post cap / slat gap / spacing.

🤖 Generated with Claude Code

Adds a `horizontal` fence style that builds composite-cladding panels —
horizontal boards stacked between square intermediate posts — instead of
the vertical pickets that slat/rail/privacy all produce today.

- New `style: 'horizontal'` (core schema + inspector Style control).
- Posts march along the whole span at `postSpacing`, each with a cap.
- New `postCap` control (none/flat/pyramid, default pyramid); pyramid
  caps render as a 4-sided cone fence part.
- New `slatGap` control for the board reveal — 0 collapses to one flush
  panel so the stacked-board seams don't read as lines.
- `postCap` + `slatGap` are horizontal-only (visibleIf); postCap uses a
  labelled dropdown so its options aren't a context-free switch.
- Lower the `postSpacing` inspector minimum from 0.2 to 0.05 m.
- 2D floor plan reuses the solid-panel marker for horizontal.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@wass08 wass08 merged commit affe09d into main Jun 19, 2026
2 checks passed
@mintlify

mintlify Bot commented Jun 19, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
pascal 🔴 Failed Jun 19, 2026, 5:28 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

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