Place furniture, doors and windows
placePlace furniture, doors, windows, and custom 3D models in a floor plan. Control position, orientation, wall snapping, ceiling mounting, and size.
Instructions
Place catalog items, or copy= of a piece already in the project (its model — even one embedded from an old import —, finish and parts, the id catalog(scope=project) gives): at=[x,y] center (doors/windows near a wall snap into it; into=[x,y] picks the swing side), or wall=id (+along cm) to put doors/windows in a wall or furniture against it, back to the wall and front to the room. Sizes w/d/h override defaults; pitch/roll tilt. Ceiling pieces (spots, LED panels, pendants, ceiling points) always hang from the ceiling the 3D draws — flat, sloping or under a roof — and follow it when they move or it changes: never compute their elev; for a pendant give elev = height of the shade's bottom (over a table ~150-160) or h = its drop, and the cord takes the rest. Which way it looks: facing=+x|-x|+y|-y, [x,y] or an element id to turn its front toward (armchair facing the TV) — prefer it to angle, clockwise degrees on a plan whose y grows down: 0 front to +y, 90 to -x, 180 to -y, 270 to +x (the catalog tool names each front: seat, doors, foot of the bed). A piece whose back belongs on a wall, put at=[x,y] within 30 cm of one with neither angle nor facing, is turned back to that wall on its own. The reply says where each front ended up: faces=f3:+y(seat), turned=f3:back to w2 — read it before building on the piece; mat finish (wood, marble, img:…; 'img:facade.png fit' stretches one image: a reference board to compare with render_3d view=front) and opacity (glass 0.3); defaults {…} fills every item; px=true reads coordinates as background pixels. cat=beam with a,b=[x,y,z] (z above the floor) and w×h section makes rafters, posts and braces; a beam reaching into a roof stops under it. Pools: pool or pool-oval. dry=true answers what it would do — what it would add, the clearances around it, the findings it would settle or create — without writing; dry="summary" answers short.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| v | No | Plan version (tab) to write to; switches to it first | |
| px | No | Coordinates (`at`, `into`, `a`, `b`, `along`) are pixels of the background image | |
| dry | No | Try it without applying; see `update`. `"summary"` answers short | |
| items | Yes | The pieces to place, one object each: `id` from the catalog (or `copy`), and where (`at`, or `wall` + `along`) | |
| defaults | No | Fields every item takes unless it sets them (cat, w, d, h, color, mat…) |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| v | No | Plan version written to, when there are several | |
| ok | No | Always true | |
| dry | No | Nothing was written | |
| ids | No | Ids created or touched | |
| rev | No | Plan revision | |
| gone | No | Ids removed, or their count | |
| text | No | The reply as written | |
| added | No | Ids added, or their count | |
| faces | No | Where each front looks: <id>:<side>(<front>) | |
| score | No | Score [before, after] | |
| turned | No | Pieces turned back to a wall: <id>:back to <wall> | |
| changed | No | {id, from, to} per element changed; a count past 20 | |
| resolved | No | Findings settled | |
| clearances | No | Free floor around touched pieces, by id | |
| issues_new | No | Layout issues created | |
| properties | No | Project properties changed | |
| added_count | No | Roots added | |
| annotations | No | Annotation switches {from, to} | |
| score_scope | No | Disciplines scored | |
| new_findings | No | Findings created | |
| changed_count | No | Roots changed | |
| issues_changed | No | Layout issues resized | |
| issues_resolved | No | Layout issues settled | |
| findings_changed | No | Findings changed | |
| acceptance_cleanup | No | Acceptances orphaned, and the calls that clear them |