Entity types
One object per line, joined by ids. The whole grammar fits in a paragraph.
A bimtex file is a flat list. Every line is one JSON object, and the object's
t says what it is. There is no nesting, no document tree, no opening and
closing of anything.
{"t":"level","id":"g","name":"Ground","elev":0,"height":3}
{"t":"room","id":"kitchen","label":"Kitchen","level":"g","x":0.3,"y":0.3,"w":4,"d":3}Structure comes from ids. The room says "level":"g" and that is the
entire mechanism — the same one that puts an opening in a wall, a roof on a
storey and a canopy on a parapet. References are always ids and never array
positions, so reordering the file changes nothing.
What you have to know before the table
Three conventions, and then the reference below answers everything else.
Units are metres, always. "w":4 is four metres. There is no unit field on
an entity; project.unit records what the drawing is dimensioned in, not what
the numbers mean.
Axes are x east, y south, z up. So a bigger y is further down the plan,
which matches how you read a drawing and surprises people who expect graph
paper.
Ids are yours and they are permanent handles. Name them the way you would
name a room on a real drawing — kitchen, w-south, roof-main — because
every diagnostic you ever read will quote them back at you.
| Entity | Required fields | References | Controlled values |
|---|---|---|---|
project | id | — | unit · frontSide |
footprint | id | — | — |
grade | id · elev | — | — |
level | id · elev · height | building | kind |
room | id · level · w · d | level | ceiling |
module | id · entities | — | — |
instance | id · module | — | — |
wall | id · level | level | side · type · top |
curtain-wall | id · level · side | — | side |
opening | id · on · kind · width | on | kind · arch · operation · hinge |
slab | id · level · x · y · w · d | level | — |
void | id · level · x · y · w · d | level | — |
column | id · level · x · y · size | level | — |
platform | id · level · x · y · w · d | level | — |
stair | id · from · to · x · y · width · run · dir | from · to | dir |
lift | id · from · to · x · y | from · to | dir |
ramp | id · level · from · to · width · rise | level | — |
roof | id · type | level | ridgeAxis |
dormer | id · on · width | on | — |
formdef | id · for · op · profile | — | op |
vault | id · axis · spring · rise | level | axis |
furniture | id · type · level · x · y | level | — |
asset | id · class | — | side |
tree | id · x · y · canopy | — | — |
parcel | id | — | frontage · shape |
setback | id | — | — |
building | id | footprint | shape |
paving | id · use | — | use · shape |
road | id · use · width · from | — | — |
parking | id · along · count | — | — |
landscape | id | — | shape |
fence | id · from · to · height · kind | — | kind |
curb | id · from · to | — | — |
street | id · name · from · width · lanes | — | — |
sign | id · kind | — | kind |
utility | id · kind · from · to | — | — |
pool | id · x · y · w · d · depth | — | — |
schedule | id · name · rows | — | — |
view | id · mode | level | axis |
grid | id · axis · at · label | — | axis |
parapet | id · on | — | — |
coping | id · on | — | — |
fascia | id · on | — | — |
sill | id · on | — | — |
canopy | id · on | — | — |
plinth | id · on | — | — |
louvre | id · on | — | — |
downpipe | id · on | — | — |
symboldef | id · draw | — | — |
materialdef | id · of · value | — | of · value |
texturedef | id · image · period | — | — |
look | id · for · use | — | — |
lookdef | id · for · body | — | — |
This table is build output, generated from ENTITY_DEFS in the same file the
compiler and validator read. Adding a type changes this page on the next build,
so the reference cannot drift away from what the code accepts. If a field is
here, it works.