Floor plan
About floor plans
A floor plan is the standard 2D architectural view of a space: rooms with real dimensions, walls drawn as solid poché bands, doors with quarter-circle swing arcs, windows as glazing lines, and furniture as plan-view symbols — the visual language documented in Architectural Graphic Standards and used by every professional plan set. Schematex renders it from text: you declare rooms, openings, and furniture with real measurements; the engine merges shared walls, computes room areas, draws dimension lines, auto-seats tables, and validates the geometry.
Unlike image generators, the output is measurable and editable — every room is a labeled element with its computed area, and adding a fourth row of desks is a one-line edit.
1. Your first floor plan
A header, one room, a door, and a window:
floorplan "Studio"
room main "Studio" at 0,0 size 4x3
door main south at 20%
window main north at 50%Three rules cover most usage:
- Start with
floorplan, an optional quoted title, andunit m(default) orunit ft. All numbers are in this unit. - Rooms are rectangles:
room id "Label" at x,y size WxH. The label and computed area render centered in the room. - Openings hang on walls: a wall reference (
main south) positions along that wall at a percentage;between A Bfinds the shared wall automatically.
2. Rooms and placement
Place the first room at 0,0 and chain the rest relatively — adjacent rooms share an edge exactly, and their walls merge into a single band:
room living "Living Room" at 0,0 size 5.2x4.2
room kitchen "Kitchen" right-of living size 3.0x4.2
room hall "Hallway" below living size 2.0x2.6
room bed1 "Bedroom 1" right-of hall size 3.2x2.6right-of/left-of/above/belowsnap to the reference room's edge.align start|center|endaligns the cross axis (defaultstart= top/left edges flush);offset nshifts it.fill #e0f2fetints the floor;nolabelsuppresses the name + area label (single-space plans like classrooms).- Coordinates are y-down:
at 0,0is the top-left corner.
L/T/U-shaped rooms use extend — declare the main rectangle, then grow it with edge-sharing rectangles. The walls merge along the seam, the area is summed into one number (exactly how professionals measure L-rooms), and the label centers on the largest part:
room living "Living Room" at 0,0 size 5x4
extend living at 5,2 size 2x2 # L-shape: notch at top-rightAn extension that doesn't touch the room, or overlaps it, is rejected with a quantified error. north (optionally north 30 for rotated plans) adds the compass at the top right.
3. Doors, windows, openings
door hall west at 50% width 1.0 swing in # exterior door on a wall
door between hall bed1 at 50% hinge right # interior door on the shared wall
door between bed1 bath at 30% type sliding # sliding door — no arc
opening between living kitchen at 35% width 1.2 # archway, no leaf
window living north at 30% width 1.8between A Bresolves the shared wall segment and positions at the percentage along the overlap — no coordinates needed. Non-adjacent rooms are rejected with the measured gap.- Doors default to 0.9 m wide on exterior walls, 0.8 m on
betweenwalls; windows default to 1.2 m. hinge left|rightpicks the jamb;swing in|outflips the quarter-arc (default swings into the owning room — the first room named).- Door
type single|double|sliding|pocket|bifold: double draws two mirrored arcs; sliding/pocket draw offset leaf lines without an arc; bifold draws the two closet-door tent peaks. - Window
type fixed|sliding|casement|bay: sliding = two offset panels, casement adds the outward swing arc, bay projects a splayed trapezoid outside the wall. - Openings clamp to fit their wall segment (with a warning) rather than overflowing.
4. Furniture
Furniture is placed relative to its room's interior top-left corner, with optional size, rotate, and a label:
furniture sofa in living at 0.25,2.9
furniture desk "Teacher" in class at 2,1.5 size 5x2.5 rotate 20
furniture counter "Cubbies" in class at 6,24.4 size 10x1.2The catalog spans residential, commercial, and site work (sizes default to industry-standard footprints):
| Cluster | Types |
|---|---|
| Residential | bed-double bed-single bed-queen bed-king bunk-bed crib sofa loveseat sectional armchair ottoman coffee-table side-table tv tv-stand fireplace floor-lamp rug wardrobe dresser nightstand bookshelf plant piano piano-upright pool-table ceiling-fan dining-table |
| Kitchen / bath | counter wall-cabinet kitchen-sink stove range-hood fridge dishwasher island bar-stool toilet sink vanity bidet urinal bathtub shower washer dryer |
| Classroom / office | desk-chair desk desk-l chair whiteboard smartboard bookcase cubbies filing-cabinet lockers kidney-table round-table-4/6/8/10 conference-table |
| Event / banquet | banquet-table head-table stage dance-floor bar dj-booth cocktail-table podium row-chairs |
| Retail / warehouse | shelving checkout clothing-rack fitting-room pallet-rack loading-dock forklift |
| Salon / gym | salon-chair shampoo-bowl manicure-table treadmill weight-bench power-rack yoga-mat |
| Stairs / structural | stairs stairs-l stairs-u spiral-stairs elevator column |
| Site / outdoor | tree car |
Auto-seating is built in: round-table-8 draws 8 chairs on its circumference (60″ top; round-table-10 uses 72″), dining-table / banquet-table / conference-table seat both long edges at one chair per 0.65 m, head-table seats one side facing the room, manicure-table seats a client and technician chair, and row-chairs places a theater strip at 0.55 m pitch. rug, dance-floor, yoga-mat, counter, island, wall-cabinet, range-hood, and ceiling-fan are underlays/overheads — other furniture can overlap them without a collision warning.
tree and car are sized for the outdoors (canopy disc, parking-stall footprint), so a site plan is just zones tiled as adjacent rooms — front yard, house footprint, driveway, back yard — with trees and parked cars placed on top.
Stairs follow the drafting conventions: tread lines at 0.28 m (11″), a direction arrow starting at the lowest tread labeled UP (give the item a "DN" label for a descending run), and the 45° zigzag break line at the imaginary 4-ft cut plane, with dashed treads beyond. stairs is a straight run (orient with size/rotate), stairs-l turns 90° over a landing, stairs-u switches back 180°, spiral-stairs is a circle with radial treads and a center pole.
5. Arrays — grid, row, arc
Repeated furniture is one statement, not thirty:
grid desk-chair in class rows 5 cols 6 count 27 area 5,8 25,24 itemsize 2x2.5
row round-table-8 in hall cols 3 area 8.8,13.4 15.2,13.4 itemsize 2.3x2.3
arc chair in hall count 13 center 12,8 radius 5 from 200 to 340area x1,y1 x2,y2gives the first and last item centers; items spread evenly between them.counttruncates row-major — 27 desks in a 5×6 grid drops the last row's tail, exactly like a real classroom.arcplaces items on a circular arc facing the center — semicircle classrooms, ceremony seating.
6. Units, areas, dimension lines
unit ftmakes every number feet; dimension lines format as32'/15'1"and areas assq ft. Internally everything is metric (1 ft = 0.3048 m).- Room areas are computed by the engine from the declared geometry, never typed by hand.
- Dimension lines render outside the plan with architectural slash ticks: overall width + height always, plus per-room segments along the top and left exteriors.
7. Validation
The engine validates what LLMs (and humans) actually get wrong, with errors that name the offending elements and a fix direction:
Errors (block rendering, shown in an error panel):
- Room overlap —
rooms "bed1" and "bath" overlap by 0.40×2.60 m — move "bath" right-of "bed1" or shrink size - Door between non-adjacent rooms —
door between "kitchen" and "bed2": rooms share no wall (gap 2 m on x-axis) - Furniture outside its room —
furniture sofa #1 extends 1.7 m outside room "c" — move it or shrink size
Warnings (render anyway, listed under the plan):
- Furniture collision — bounding boxes including chair-ring envelopes, so two banquet rounds whose chairs touch get flagged even when the table tops don't.
- Opening clamped to fit its wall segment.
8. Grammar (EBNF)
plan ::= "floorplan" string? ("unit" ("m"|"ft"))? NL statement*
statement ::= room | extend | north | door | window | opening | furniture | array
room ::= "room" id string? placement "size" dims ("fill" color)? ("nolabel")?
extend ::= "extend" id placement "size" dims
north ::= "north" num?
placement ::= "at" coord
| ("right-of"|"left-of"|"above"|"below") id ("offset" num)?
("align" ("start"|"center"|"end"))?
door ::= "door" (wallref | "between" id id) "at" pct
("width" num)? ("hinge" ("left"|"right"))? ("swing" ("in"|"out"))?
("type" ("single"|"double"|"sliding"|"pocket"|"bifold"))?
window ::= "window" wallref "at" pct ("width" num)?
("type" ("fixed"|"sliding"|"casement"|"bay"))?
opening ::= "opening" (wallref | "between" id id) "at" pct ("width" num)?
furniture ::= "furniture" type ("in" id) "at" coord ("size" dims)? ("rotate" num)? string?
array ::= ("grid"|"row"|"arc") type "in" id
("rows" int)? ("cols" int)? ("count" int)?
("area" coord coord)? ("itemsize" dims)? ("rotate" num)?
("center" coord)? ("radius" num)? ("from" num "to" num)?
wallref ::= id ("north"|"south"|"east"|"west")
coord ::= num "," num dims ::= num "x" num pct ::= num "%"?Comments run from # to end of line. CJK quotes (“”) are accepted as ASCII quotes.
Related examples
- Two-bedroom apartment — relative placement, 7 doors, full furnishing
- 27-desk classroom —
grid … counttruncation,unit ft - Wedding reception for 120 — auto-seated banquet rounds, dance floor