← Files Planner5D: Plan, Build, CreateARCHIVED FILE

skills/planner5d-webmcp/references/room-construction.md

8.88 KB · Oct 10, 2026 · 18:24 UTC

↓ Download file

See the change to this file →

# Native room construction

Before drawing, keep a small layout specification: room functions, floors, dimension basis and provenance, required adjacencies/openings, wall heights/thicknesses, and circulation constraints. Resolve ordinary design choices from the brief; ask only when missing measurements prevent a required exact result.

## Geometry

- Construct simple closed room polygons with at least three distinct vertices and positive area. Avoid self-intersections, repeated zero-length edges, accidental slivers, and rooms lying on top of rooms. Open paths belong to partitions, not enclosed rooms.
- Plan shared boundaries in one coordinate system. Native rooms own their perimeter wall records; those records may share physical space. Use native snapping/join behavior and inspect the result. Do not force uniqueness by deleting a wall from one room or hiding every room wall.
- `editorGetContext` and `editorInspectObjects.geometry.outline` describe world paths, not guaranteed inner floor contours. List the relevant walls, then batch `editorInspectObjects` with `fields:["geometry","properties"]` to pair paths with native `length` values and returned units. `editorGetSceneMeasurements` returns flooring areas and counts, not width/depth. Do not infer usable dimensions from that tool name or blindly subtract nominal thickness: joins affect the result.
- Native room-wall `length` comes from the inline-length or rounded path-length getter. Missing dimension annotations in a preview do not identify which getter supplied it. For a verified straight-sided rectangle, establish the inline basis by checking **both opposing side chains**: their reported lengths agree, their product (cm² ÷ 10000) matches native flooring area within measurement rounding, and those lengths are materially smaller than the independently measured wall paths (beyond path rounding). Record this geometric cross-check; labels are useful additional evidence, not required when this pattern is decisive. Do not repeat previews just to obtain labels after that check passes. Area alone, irregular/clipped floors, mismatched units or ambiguous path/inline differences do not establish clear spans; obtain other native evidence or mark the basis unverified before resizing or claiming a match.
- For a plain rectangle with source outer dimensions `W × D` and equal wall thickness `t`, the derived nominal inner target is `(W − 2t) × (D − 2t)`. Cross-check it against any supplied net area. Separately compare the native span product (cm² ÷ 10000) with native flooring area and available 2D dimensions to establish the observed basis. Matching the source body numbers to native clear spans builds an oversized room. A disagreement remains unresolved until geometry/basis evidence or a correction resolves it; do not invent a gross-area interpretation merely to excuse it. This rectangle check does not generalize to irregular outlines or unequal walls.
- For rectangular rooms, cover both opposing sides of each requested axis. Sum contiguous collinear segments of the same side, retaining IDs/endpoints; do not require exactly four wall records or pick one segment as the full room span. Use explicit source tolerance. Curved or nonrectangular boundaries need their own measured anchors.
- A reproducible production fixture on 2026-09-12 used a 500 × 400 cm room path with 20 cm walls. Native usable lengths were 469.8 × 369.8 cm and floor area 17.373204 m². This is a regression example, not a universal offset formula.
- Read `placement.translationCm` after scene creation. The default `canvas_center` moves every floor by the same translation. Re-read actual IDs and world geometry; never place openings or furniture using untranslated input points.

## Openings and usability

Read wall paths and map a semantic edge such as “Living → Hall” to actual wall IDs. `wallOffsetCm`/`offsetCm` locates the opening center, measured along the returned path from its first endpoint. Reversed paths reverse the offset. For a centered opening on a straight wall use half the geometric path length; for a polyline sum its segment lengths first. The usable wall `length` property measures a different contour and is not this offset's distance basis. Do not subtract half the opening width: that would position its center as if it were the near edge. Compare the applied center with the requested midpoint and check full model/frame ends against corners/usable boundary; those bounds do not certify a clear aperture. Use one opening for the physical passage, then inspect the adjoining room's side. An attached wall ID alone does not prove correct placement.

Check ordinary door/window fit vertically as well as horizontally. Compare loaded world Z bounds with the actual wall's bottom/top in the same coordinate system, including the floor elevation. Height plus sill/levitation is a useful preliminary check when both values share the floor-relative basis. A model reaching above a wall or through its roof requires correction or supported evidence for an intentional special construction. Verify glazing from the actual asset parts and image, not from the search query that returned it.

After shell creation verify:

1. All required rooms have the intended function and usable dimensions.
2. Intended rooms touch without area overlap or unintended gaps.
3. Each enclosed usable room has a route to the entrance through an actual door/open passage.
4. Door direction, opening width, corridor space, windows, and sill heights match the brief or are explicitly approximated.
5. A 3D view shows real connected walls/openings, without stray partitions or visible competing surfaces.

For a source scan, preserve measurement provenance and distinguish a scan-faithful model from a normally editable architectural project. An irregular wall height may justify a local special construction; it does not justify converting the whole house into disconnected partitions.

## Corrections

Inspect the affected room/walls and current native properties before editing. Fix one diagnosis at a time: uniform scale, wrong wall thickness, wrong room span, displaced opening, or local topology. Global floor scaling is appropriate only when multiple independent same-basis anchors support the same factor and the requested scope permits it. Scaling cannot fix crossed walls or nonuniform dimension drift.

After a wall-length edit, re-read adjacent rooms and openings, since native constraints can propagate. After a room move, re-read its members. Avoid raw scene replacement and deleting/recreating the whole room when a native property or move solves the issue.

For a rectangular edge that must remain parallel while changing a usable span, a coordinated move of its two native corner points can be clearer than changing one wall length. Discover current `Point` IDs with their `parentId` and world coordinates; a corner can have two wall-owned point records. Move one native point per physical corner through `editorUpdateObjects`, using current hash/revision, and verify that linked records followed. Keep the fixed/shared edge unchanged. Derive the displacement from the measured current-versus-target span only when thickness and angles remain fixed; do not generalize this to curved or arbitrary polygons.

A production test moved both unshared hall corners by 10.2 cm in one update batch. Both usable side lengths changed from 109.8 to exactly 120 cm and the shared boundary stayed fixed. This alone passed only the geometry goal: an earlier attempt following partial Undo still had room-membership and door-attachment errors. A later run from a clean loaded scene also passed structural/spatial validation and moved the entry door with the outer wall. Always inspect both dimensions and the validator's errors; do not generalize a geometry pass to a valid project. The batch reported `history=per_command`: one batch is not necessarily one Undo step.

After any edge correction, inspect affected openings and membership, including an entrance in the moved edge. If an attachment is stale, inspect its current wall and use the supported native opening-placement action where appropriate, then validate again. Do not manufacture a clean result by hiding or ignoring an opening error.

In the same test, a single wall-length change reached 120 cm but skewed the adjacent bedroom. Undo restored the hall while leaving the bedroom corner displaced. Do not assume `FixedPoint` names identify the same orientation as the returned wall path or that a successful Undo restores every propagated change. Compare all affected outlines with the before-state. If native Undo is incomplete, use freshly discovered IDs for a targeted supported recovery, then recheck neighbors and retain the reproduction as a runtime issue.

Spatial validation deliberately leaves wall-thickness clearance and door swing/circulation unchecked. Treat reported overlapping furniture boxes as candidate problems requiring localized inspection, especially for chairs under tables and objects intentionally supported by other objects.

SHA-256: 31593f6b6286f60f23a790dce225645ec51960f10776ce95787ddf4cac34c709