Schematex

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.

floorplan·§
↘ preview
100%
Studio Apartment 3 rooms, 28.8 m² total. 6 furniture items. Studio Apartment Living / Sleeping 20.8 m² Bath 4.4 m² Kitchenette 3.6 m² 7.2 m 4 m 5.2 m 2 m
UTF-8 · LF · 14 lines · 588 chars✓ parsed·9.8 ms·9.8 KB SVG

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:

  1. Start with floorplan, an optional quoted title, and unit m (default) or unit ft. All numbers are in this unit.
  2. Rooms are rectangles: room id "Label" at x,y size WxH. The label and computed area render centered in the room.
  3. Openings hang on walls: a wall reference (main south) positions along that wall at a percentage; between A B finds 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.6
  • right-of / left-of / above / below snap to the reference room's edge.
  • align start|center|end aligns the cross axis (default start = top/left edges flush); offset n shifts it.
  • fill #e0f2fe tints the floor; nolabel suppresses the name + area label (single-space plans like classrooms).
  • Coordinates are y-down: at 0,0 is 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-right

An 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.8
  • between A B resolves 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 between walls; windows default to 1.2 m.
  • hinge left|right picks the jamb; swing in|out flips 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.2

The catalog spans residential, commercial, and site work (sizes default to industry-standard footprints):

ClusterTypes
Residentialbed-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 / bathcounter wall-cabinet kitchen-sink stove range-hood fridge dishwasher island bar-stool toilet sink vanity bidet urinal bathtub shower washer dryer
Classroom / officedesk-chair desk desk-l chair whiteboard smartboard bookcase cubbies filing-cabinet lockers kidney-table round-table-4/6/8/10 conference-table
Event / banquetbanquet-table head-table stage dance-floor bar dj-booth cocktail-table podium row-chairs
Retail / warehouseshelving checkout clothing-rack fitting-room pallet-rack loading-dock forklift
Salon / gymsalon-chair shampoo-bowl manicure-table treadmill weight-bench power-rack yoga-mat
Stairs / structuralstairs stairs-l stairs-u spiral-stairs elevator column
Site / outdoortree 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 340
  • area x1,y1 x2,y2 gives the first and last item centers; items spread evenly between them.
  • count truncates row-major — 27 desks in a 5×6 grid drops the last row's tail, exactly like a real classroom.
  • arc places items on a circular arc facing the center — semicircle classrooms, ceremony seating.

6. Units, areas, dimension lines

  • unit ft makes every number feet; dimension lines format as 32' / 15'1" and areas as sq 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.