bimtex
What comes out

Views and 3D

Useful views are derived from what the model contains; one clip volume drives every reveal.

deriveViewSet() decides which views can make a truthful claim. A roof creates Roof Off. Multiple storeys create level peeling; multiple levels or two non-empty assembly bands add an exploded view. A below-grade level creates Below Grade. A site-only model gets aerial site cameras instead of imaginary floor plans.

Every reveal resolves to one clip volume before geometry is drawn. SVG axonometric and the pinned Three.js viewer therefore agree about what front-off, roof-off, level and section mean.

Adding your own

The derived set is a floor, not a ceiling. It guarantees a model can always be seen; it does not decide how much of one you may show. Write a view entity for any reveal the model can honestly support, as many as the project needs:

{"t":"view","id":"section:loading-ramp","mode":"section","axis":"x","station":30.8,"label":"LOADING RAMP"}
{"t":"view","id":"site:pool-barrier","mode":"site","label":"POOL + BARRIER","cameraElevation":55}

An authored view is a camera and a clip volume over the same compiled model — never new geometry — so it cannot contradict the drawings or the other views. It is appended after the derived set, so the default camera does not move. mode must be one of the nine listed in the entity schema, a section needs axis and station, and a level must name a level that exists; anything else is a validation error rather than a silent omission.

One storey, or every storey below it

A level view is cumulative by default — it peels the roof and everything above, which is what makes a stack of them read as a building coming apart. For a single storey on its own, add isolate:

{"t":"view","id":"level:upper","mode":"level","level":"l1","isolate":true,"label":"UPPER LEVEL"}

That keeps the storey and its own floor slab, and nothing underneath.

ModelThree is the one browser 3D renderer. Playground, example pages and the inline <Model> below all compile the same source, derive the same view set and render through the same scene adapter. There are no generated per-example viewers and no iframe-only rendering paths.

Drag to orbit, then move along the tabs. Nothing was re-derived to make the drawings agree with what you just turned around.

Compiling drawing set…

Open a complete 3D example

Orbit the generated model, then inspect the drawings from the same source.