bimtex
McDonald's Drive-Thru — Complete Site Study — WHOLE
Gallery — restaurant

McDonald's Drive-Thru Complete Site Study

drag to orbit

McDonald's Drive-Thru — Complete Site Study: 199 source entities compile into 659 solids, 21 coordinated views and 6 discipline sheets. Every view below is regenerated from that same source model.

199entities in
659solids compiled
1levels
9rooms
0errors

Generated views

The model, rendered

Generated from the compiled model, each at a camera the interactive view above already offers. Not photographs — this building does not exist.

Generated photorealistic whole view of McDonald's Drive-Thru — Complete Site Study, at the same camera as the interactive model above
WHOLE
Generated photorealistic dining + order + production view of McDonald's Drive-Thru — Complete Site Study, at the same camera as the interactive model above
DINING + ORDER + PRODUCTION

Coordinated plans

Every floor, from the same model

These are BIM cuts, not generated illustrations. Rooms, walls, openings, stairs and furniture stay tied to the model shown above.

Restaurant Floor planHorizontal cut at 1.20 m. Openings appear only where the cut actually passes through their host walls.

Continue elsewhere

Model files

Take the same compiled building into an editor, a BIM workflow, or a realtime 3D scene.

Source

NDJSON

The authored model. Edit it, diff it, or feed it to an agent.

Opens in
  • bimtex
52 KB Download
BIM exchange

IFC 4

Buildings, storeys, walls, openings, rooms, slabs and roofs.

Opens in
  • SketchUp
  • Revit
  • AutoCAD Arch.
58 KB Download
Universal mesh

OBJ

Metre-based, z-up geometry with named objects; no MTL or BIM data.

Opens in
  • Blender
  • Revit
1.8 MB Download
A-001

Site plan

Parcel, grade, setbacks, paving, landscape, fences and streets are compiled beside the building rather than by a separate site renderer.

A-301

Section X–X

The X–X cut is placed automatically in clear space; structure at the plane draws heavy and the authored grade masks construction below ground.

A-401

Roof-off cut-away

The roof surfaces are omitted from the same projection so interior walls, stairs, furniture and equipment remain coordinated.

The rest of the set

The same model also produced 16 further drawings, indexed here the way a construction set indexes its sheets. Open any drawing on this page — plate or thumbnail — to read it at full size and download it in every format it exports.

1 plan · 4 elevations · 1 section · 2 axonometrics · 1 egress plan · 1 design study · 6 issued sheets

One model, so the views cannot disagree

Move a slider. The model recompiles in this browser and both views redraw from the result. Push the storey height beyond a valid configuration and the real validator turns the verdict red.

Plan · live cut

North elevation · live projection

// bimtex example 12 — modern McDonald's freestanding drive-thru site
//
// Prototype: the supplied civil plan for a long, narrow two-frontage parcel.
// Both curb cuts are on the east edge: the lower cut is entry-only, the upper
// cut is exit-only, and a northbound spine links them. One drive-thru loop
// travels west across the north, south past the windows and east to the merge.
// Sources:
//   https://www.mcdonalds.com/content/dam/sites/usa/nfl/documents/franchising/mcd-site-criteria-brochure.pdf
//     McDonald's U.S. Site Criteria gives 45,000 ± sq ft of land, a 4,500 sq ft
//     building, a minimum 23 ft 4 in building height, a corner/corner-wrap
//     preference, two-street signage and on-site parking.
//   https://corporate.mcdonalds.com/corpmcd/our-stories/article/texas-order-ahead-lane.html
//     McDonald's official 2022 test-restaurant photographs establish the modern
//     dark-panel / warm-timber / broad-glazing exterior language and document a
//     separate pickup lane plus designated curbside and delivery-driver spaces.
//   https://www.chnj.gov/DocumentCenter/View/13741
//     Cherry Hill, New Jersey's 2023 municipal review documents an existing
//     4,089 sq ft McDonald's converting from one to two order points, together
//     with parking, access, ADA and signage modifications.
//   https://www.access-board.gov/ada/guides/chapter-5-parking/
//     Accessible stalls belong on the shortest accessible route; their access
//     aisle must adjoin that route and may not overlap a vehicular way.
// Sourced dimensions:
//   The civil plan property lines read 154.37 ft × 259.77 ft, converted here to
//   47 × 79 m. McDonald's criteria supplies the 4,500 sq ft / 418 m² building
//   target and the branded tower reaches 23 ft 4 in / 7.112 m.
// ESTIMATED:
//   Building details, rooms, equipment and exact curb radii are reconstructed
//   from the supplied plan and photographs; they are not proprietary drawings.
{"t":"project","id":"mcd-drive-thru","name":"McDonald's Drive-Thru — Complete Site Study","unit":"m","typology":"restaurant","frontSide":"south","light":"late-afternoon"}
{"t":"parcel","id":"lot","x":0,"y":0,"w":47,"d":79,"address":"Civil-plan-derived narrow parcel · 154.37 ft × 259.77 ft","frontage":"south"}
{"t":"grade","id":"grade","elev":0}
{"t":"setback","id":"site-setback","margin":{"north":2,"south":2,"east":2,"west":2}}

// Both vehicular curb cuts are on the east property edge, exactly as in the
// civil prototype: the lower opening is ENTRY ONLY and the upper opening is
// EXIT ONLY. A one-way northbound access spine connects them. The broad drive
// across the north is internal and two-way — it is not a public north street.
{"t":"street","id":"east-shared-access","name":"SHARED ACCESS DRIVE","from":[52,-5],"to":[52,84],"width":10,"lanes":2,"class":"local"}
{"t":"street","id":"south-future-street","name":"FUTURE ROW / PUBLIC STREET","from":[-5,85],"to":[58,85],"width":10,"lanes":2,"class":"collector"}
{"t":"curb","id":"east-curb-north","from":[46.8,0],"to":[46.8,4.5]}
{"t":"curb","id":"east-curb-middle","from":[46.8,11],"to":[46.8,51.5]}
{"t":"curb","id":"east-curb-south","from":[46.8,59],"to":[46.8,79]}
{"t":"curb","id":"south-curb","from":[0,78.8],"to":[47,78.8]}
{"t":"road","id":"east-access-spine","use":"lower east entry to upper east exit · one-way northbound","width":6.6,"from":[47,56],"path":[{"to":[41,56]},{"to":[41,8]},{"to":[47,8]}],"material":"pack-asphalt"}
{"t":"road","id":"north-cross-drive","use":"two-way internal cross drive","width":7.2,"from":[3,6.5],"path":[{"to":[41,6.5]}],"material":"pack-asphalt"}
{"t":"road","id":"drive-thru-loop","use":"one-way drive-through west along north · south at windows · east to merge","width":4.2,"from":[37,12],"path":[{"to":[11,12]},{"arc":{"to":[5,18],"r":6,"sweep":0}},{"to":[5,47]},{"arc":{"to":[11,53],"r":6,"sweep":0}},{"to":[35,53]},{"arc":{"to":[41,56],"r":6.8,"sweep":0}}],"material":"pack-asphalt"}
{"t":"paving","id":"south-fire-lane","label":"NO PARKING · FIRE LANE","use":"driveway","shape":"polygon","points":[[0.8,53],[1,52.3],[1.6,51.7],[2.4,51.5],[39.5,51.5],[40.7,51.7],[41.8,52.3],[43.2,53.7],[43.8,54.9],[44,56.2],[44,63.2],[43.8,64.1],[43.2,64.7],[42.4,65],[2.4,65],[1.6,64.8],[1,64.3],[0.8,63.5]],"material":"pack-asphalt"}

// Parking groups follow the circled civil-plan counts: ten spaces in the east
// bank, five at the restaurant's south entrance, three in the southwest bay
// and one isolated short-stay bay. One east stall is EV-ready; the closest
// south stall is van-accessible and connects directly to the entrance walk.
{"t":"parking","id":"parking-east-standard","x":29,"y":18,"along":"y","count":9,"material":"pack-asphalt"}
{"t":"parking","id":"parking-east-ev","x":29,"y":42.66,"along":"y","count":1,"material":"pack-asphalt"}
{"t":"parking","id":"parking-south-five","x":12.5,"y":53.3,"along":"x","count":5,"accessible":1,"material":"pack-asphalt"}
{"t":"parking","id":"parking-southwest-three","x":1.5,"y":59.3,"along":"x","count":3,"material":"pack-asphalt"}
{"t":"parking","id":"parking-short-stay-one","x":29.5,"y":59.3,"along":"x","count":1,"material":"pack-asphalt"}
{"t":"paving","id":"north-pedestrian-walk","label":"BICYCLE + PEDESTRIAN WALK","use":"walkway","x":9,"y":14.3,"w":19,"d":4.2,"material":"pack-walk-concrete"}
{"t":"paving","id":"east-accessible-walk","label":"DIRECT ACCESSIBLE ROUTE","use":"walkway","x":27.8,"y":18,"w":1.2,"d":34,"material":"pack-walk-concrete"}
{"t":"paving","id":"south-entry-forecourt","label":"MAIN ENTRY FORECOURT","use":"walkway","x":12,"y":48,"w":16,"d":5,"material":"pack-walk-concrete"}
// This is a raised table, not a second paving sheet. Its 75 mm top clears the
// asphalt's 18 mm top, so the pedestrian route cannot z-fight with the fire lane.
{"t":"asset","id":"south-pedestrian-connection","class":"raised concrete pedestrian table","material":"pack-walk-concrete","parts":[{"x":25.8,"y":53,"w":3.3,"d":14,"z0":0.019,"z1":0.075}]}
{"t":"paving","id":"future-sidewalk","label":"FUTURE SIDEWALK","use":"walkway","x":0,"y":76.2,"w":47,"d":1.2,"material":"pack-walk-concrete"}
{"t":"asset","id":"ada-access-aisle-stripes","class":"accessible access aisle markings","material":"qsr-white","parts":[{"x":12.6,"y":58.84,"w":2.7,"d":0.12,"z0":0.031,"z1":0.035},{"x":12.6,"y":58.48,"w":2.7,"d":0.12,"z0":0.031,"z1":0.035},{"x":12.6,"y":58.12,"w":2.7,"d":0.12,"z0":0.031,"z1":0.035}]}
{"t":"asset","id":"entry-crossing-stripes","class":"raised pedestrian crossing markings","material":"qsr-white","parts":[{"x":26.05,"y":54,"w":2.8,"d":0.42,"z0":0.076,"z1":0.082},{"x":26.05,"y":55.1,"w":2.8,"d":0.42,"z0":0.076,"z1":0.082},{"x":26.05,"y":56.2,"w":2.8,"d":0.42,"z0":0.076,"z1":0.082},{"x":26.05,"y":57.3,"w":2.8,"d":0.42,"z0":0.076,"z1":0.082},{"x":26.05,"y":58.4,"w":2.8,"d":0.42,"z0":0.076,"z1":0.082},{"x":26.05,"y":59.5,"w":2.8,"d":0.42,"z0":0.076,"z1":0.082},{"x":26.05,"y":60.6,"w":2.8,"d":0.42,"z0":0.076,"z1":0.082},{"x":26.05,"y":61.7,"w":2.8,"d":0.42,"z0":0.076,"z1":0.082}]}

// Explicit pavement arrows make every branch unambiguous. The east spine runs
// north; the upper throat exits east and the lower throat enters west. The
// north cross-drive is two-way. Drive-thru arrows continue west / south / east.
{"t":"asset","id":"east-access-pavement-arrows","class":"east access one-way arrows","material":"qsr-white","parts":[{"x":40.82,"y":43,"w":0.36,"d":2.2,"z0":0.041,"z1":0.045},{"outline":[[40.4,43.2],[41.6,43.2],[41,42.2]],"z0":0.041,"z1":0.045},{"x":40.82,"y":28,"w":0.36,"d":2.2,"z0":0.041,"z1":0.045},{"outline":[[40.4,28.2],[41.6,28.2],[41,27.2]],"z0":0.041,"z1":0.045},{"x":40.82,"y":14,"w":0.36,"d":2.2,"z0":0.041,"z1":0.045},{"outline":[[40.4,14.2],[41.6,14.2],[41,13.2]],"z0":0.041,"z1":0.045},{"x":43,"y":7.82,"w":2.2,"d":0.36,"z0":0.041,"z1":0.045},{"outline":[[45,7.4],[45,8.6],[46,8]],"z0":0.041,"z1":0.045},{"x":43,"y":55.82,"w":2.2,"d":0.36,"z0":0.041,"z1":0.045},{"outline":[[43.2,55.4],[43.2,56.6],[42.2,56]],"z0":0.041,"z1":0.045}]}
{"t":"asset","id":"north-cross-drive-arrows","class":"two-way cross-drive arrows","material":"qsr-white","parts":[{"x":14,"y":4.55,"w":2.2,"d":0.34,"z0":0.041,"z1":0.045},{"outline":[[16,4.15],[16,5.3],[17,4.72]],"z0":0.041,"z1":0.045},{"x":28,"y":4.55,"w":2.2,"d":0.34,"z0":0.041,"z1":0.045},{"outline":[[30,4.15],[30,5.3],[31,4.72]],"z0":0.041,"z1":0.045},{"x":28,"y":7.85,"w":2.2,"d":0.34,"z0":0.041,"z1":0.045},{"outline":[[28.2,7.45],[28.2,8.6],[27.2,8.02]],"z0":0.041,"z1":0.045},{"x":14,"y":7.85,"w":2.2,"d":0.34,"z0":0.041,"z1":0.045},{"outline":[[14.2,7.45],[14.2,8.6],[13.2,8.02]],"z0":0.041,"z1":0.045}]}
{"t":"asset","id":"drive-thru-pavement-arrows","class":"drive-thru pavement arrows","material":"qsr-white","parts":[{"x":27,"y":11.82,"w":2.2,"d":0.36,"z0":0.041,"z1":0.045},{"outline":[[27.2,11.4],[27.2,12.6],[26.2,12]],"z0":0.041,"z1":0.045},{"x":15,"y":11.82,"w":2.2,"d":0.36,"z0":0.041,"z1":0.045},{"outline":[[15.2,11.4],[15.2,12.6],[14.2,12]],"z0":0.041,"z1":0.045},{"x":4.82,"y":26,"w":0.36,"d":2.2,"z0":0.041,"z1":0.045},{"outline":[[4.4,28],[5.6,28],[5,29]],"z0":0.041,"z1":0.045},{"x":4.82,"y":41,"w":0.36,"d":2.2,"z0":0.041,"z1":0.045},{"outline":[[4.4,43],[5.6,43],[5,44]],"z0":0.041,"z1":0.045},{"x":14,"y":52.82,"w":2.2,"d":0.36,"z0":0.041,"z1":0.045},{"outline":[[16,52.4],[16,53.6],[17,53]],"z0":0.041,"z1":0.045},{"x":31,"y":52.82,"w":2.2,"d":0.36,"z0":0.041,"z1":0.045},{"outline":[[33,52.4],[33,53.6],[34,53]],"z0":0.041,"z1":0.045}]}
{"t":"asset","id":"south-court-entry-arrows","class":"lower entry distribution arrows","material":"qsr-white","parts":[{"x":33,"y":61.3,"w":2.2,"d":0.36,"z0":0.041,"z1":0.045},{"outline":[[33.2,60.9],[33.2,62.1],[32.2,61.5]],"z0":0.041,"z1":0.045},{"x":18,"y":61.3,"w":2.2,"d":0.36,"z0":0.041,"z1":0.045},{"outline":[[18.2,60.9],[18.2,62.1],[17.2,61.5]],"z0":0.041,"z1":0.045}]}

// Landscaped islands are the pale voids that make the civil plan readable:
// snow storage at the northeast, a narrow parking separator and the future
// streetscape south of the fire lane. They are intentionally not broad lawns.
{"t":"landscape","id":"northwest-buffer","x":0.8,"y":10.5,"w":2.2,"d":39.5,"planting":{"species":"low shrubs","count":18}}
{"t":"landscape","id":"north-pedestrian-island","shape":"polygon","points":[[9,9.8],[29,9.8],[29.7,10.1],[30,10.8],[29.7,11.5],[29,11.8],[9,11.8],[8.3,11.5],[8,10.8],[8.3,10.1]],"planting":{"species":"native grasses","count":14}}
{"t":"landscape","id":"northeast-snow-stack","shape":"polygon","points":[[35,10.5],[38.2,10.5],[38.8,10.7],[39.2,11.2],[39.2,16.4],[39,17.1],[38.4,17.6],[36.3,18.4],[35.6,18.4],[34.8,18],[34.2,17.3],[34,16.4],[34,11.5],[34.3,10.8]],"planting":{"species":"rain-garden grasses","count":12}}
{"t":"paving","id":"east-parking-separator","label":"RAISED CONCRETE MEDIAN","use":"walkway","shape":"polygon","points":[[35.3,17.2],[36.9,17.2],[37.4,17.4],[37.7,18],[37.7,51],[37.4,51.6],[36.9,51.8],[35.3,51.8],[34.8,51.6],[34.5,51],[34.5,18],[34.8,17.4]],"material":"pack-walk-concrete"}
{"t":"landscape","id":"upper-exit-island","shape":"polygon","points":[[41.8,10.4],[42,9.8],[42.5,9.4],[43.2,9.3],[45.7,10.2],[46.3,10.6],[46.7,11.2],[46.8,12],[46.8,13.2],[46.6,13.7],[46.1,14],[45.5,14],[43.9,13.4],[43.1,13],[42.5,12.3],[42,11.5]]}
{"t":"landscape","id":"lower-entry-island","shape":"polygon","points":[[42,57.3],[42.7,57.1],[43.5,57.3],[45.8,58.2],[46.4,58.7],[46.8,59.4],[46.8,62],[46.6,62.6],[46.1,63],[45.4,63],[43.6,62.3],[42.8,61.9],[42.2,61.2],[42,60.4]]}
{"t":"landscape","id":"south-future-landscape-west","shape":"polygon","points":[[1,66.5],[23.8,66.5],[24.6,66.8],[25.3,67.5],[25.5,68.3],[25.5,74.2],[25.2,75.2],[24.4,76],[1,76]],"planting":{"species":"ornamental grasses","count":18}}
{"t":"landscape","id":"south-future-landscape-east","shape":"polygon","points":[[31,66.5],[46,66.5],[46,76],[30.2,76],[29.5,75.5],[29.3,74.7],[29.3,68.2],[29.6,67.3],[30.2,66.7]],"planting":{"species":"ornamental grasses","count":13}}
{"t":"landscape","id":"south-future-tree-lawn","x":0,"y":77.45,"w":47,"d":1.25,"planting":{"species":"street-tree lawn","count":8}}
{"t":"tree","id":"tree-nw","x":2,"y":16,"canopy":3.2,"species":"serviceberry"}
{"t":"tree","id":"tree-west-1","x":2,"y":30,"canopy":3.2,"species":"serviceberry"}
{"t":"tree","id":"tree-west-2","x":2,"y":45,"canopy":3.2,"species":"serviceberry"}
{"t":"tree","id":"tree-south-west","x":8,"y":71,"canopy":3.8,"species":"red maple"}
{"t":"tree","id":"tree-south-east","x":39,"y":71,"canopy":3.5,"species":"red maple"}

// 4,500 sq ft restaurant envelope rebuilt as the source plan's long north-south bar.
{"t":"footprint","id":"restaurant-footprint","x":13,"y":20,"w":15,"d":28,"label":"McDONALD'S · 4,500 SQ FT"}
{"t":"building","id":"restaurant-building","label":"McDonald's restaurant","footprint":"restaurant-footprint","storeys":1}
{"t":"level","id":"g","name":"Restaurant Floor","elev":0,"height":4.6}
// ImageGen reference: docs/work/12-mcdonalds-interior-reference-v1.png.
// Public dining occupies the bright south two-fifths; a continuous counter is
// the customer/staff threshold. North of it, three parallel equipment lines
// run receiving -> prep -> cook -> assembly -> counter / drive-thru expo.
{"t":"room","id":"production","label":"Production Kitchen + Drive-Thru","use":"kitchen","level":"g","x":0.3,"y":0.3,"w":10,"d":15}
{"t":"room","id":"receiving","label":"Receiving + Cold / Dry Store","use":"storage","level":"g","x":10.5,"y":0.3,"w":4.2,"d":5.1}
{"t":"room","id":"wash-support","label":"Wash + Janitor","use":"service","level":"g","x":10.5,"y":5.6,"w":4.2,"d":5.5}
{"t":"room","id":"crew-support","label":"Crew + Manager","use":"office","level":"g","x":10.5,"y":11.3,"w":4.2,"d":3.9}
{"t":"room","id":"wc-accessible","label":"Accessible WC","use":"bathroom","level":"g","x":0.3,"y":17.5,"w":4,"d":2.8}
{"t":"room","id":"wc-standard","label":"Guest WC","use":"bathroom","level":"g","x":0.3,"y":20.5,"w":4,"d":2.4}
{"t":"room","id":"dining-booths","label":"Booth Dining","use":"dining","level":"g","x":0.3,"y":23.1,"w":4,"d":4.6}
{"t":"room","id":"service","label":"Order + Pickup + McCafé","use":"service","level":"g","x":4.6,"y":15.6,"w":10.1,"d":4.3}
{"t":"room","id":"dining","label":"Dining + Kiosks","use":"dining","level":"g","x":4.6,"y":20.1,"w":10.1,"d":7.6}
{"t":"wall","id":"n","level":"g","side":"north","type":"exterior","thickness":0.28,"material":"qsr-white"}
{"t":"wall","id":"s","level":"g","side":"south","type":"exterior","thickness":0.28,"material":"qsr-white"}
{"t":"wall","id":"w","level":"g","side":"west","type":"exterior","thickness":0.28,"material":"qsr-charcoal"}
{"t":"wall","id":"e","level":"g","side":"east","type":"exterior","thickness":0.28,"material":"qsr-white"}
{"t":"wall","id":"p-support","level":"g","from":[10.4,0.3],"to":[10.4,15.3],"type":"partition","thickness":0.16}
{"t":"wall","id":"p-support-n","level":"g","from":[10.5,5.5],"to":[14.7,5.5],"type":"partition","thickness":0.15}
{"t":"wall","id":"p-support-s","level":"g","from":[10.5,11.2],"to":[14.7,11.2],"type":"partition","thickness":0.15}
{"t":"wall","id":"p-wc-n","level":"g","from":[0.3,17.4],"to":[4.4,17.4],"type":"partition","thickness":0.16}
{"t":"wall","id":"p-wc-east","level":"g","from":[4.4,17.4],"to":[4.4,23],"type":"partition","thickness":0.15}
{"t":"wall","id":"p-wc-mid","level":"g","from":[0.3,20.4],"to":[4.4,20.4],"type":"partition","thickness":0.14}
{"t":"wall","id":"p-wc-s","level":"g","from":[0.3,23],"to":[4.4,23],"type":"partition","thickness":0.14}
{"t":"wall","id":"p-counter-back","level":"g","from":[4.4,15.45],"to":[14.7,15.45],"type":"partition","thickness":0.18,"material":"qsr-white"}
{"t":"opening","id":"entry-a","on":"s","kind":"door","at":4,"width":1.8,"leaves":2,"sill":0,"head":2.6,"room":"dining"}
{"t":"opening","id":"front-glass-a","on":"s","kind":"window","at":6.4,"width":3.3,"sill":0.35,"head":3.15}
{"t":"opening","id":"front-glass-b","on":"s","kind":"window","at":10.3,"width":3.8,"sill":0.35,"head":3.15}
{"t":"opening","id":"accessible-entry","on":"e","kind":"door","at":19.3,"width":1.3,"sill":0,"head":2.5,"room":"service"}
{"t":"opening","id":"east-glass-a","on":"e","kind":"window","at":23.3,"width":3.4,"sill":0.45,"head":3.1}
{"t":"opening","id":"pay-window","on":"w","kind":"window","at":6,"width":1.8,"sill":1.05,"head":2.6}
{"t":"opening","id":"drive-thru-window","on":"w","kind":"window","at":11.2,"width":2.2,"sill":1.05,"head":2.65}
{"t":"opening","id":"service-door","on":"n","kind":"door","operation":"sliding","at":11.5,"width":1.15,"sill":0,"head":2.5,"room":"receiving"}
{"t":"opening","id":"receiving-production-door","on":"p-support","kind":"door","operation":"sliding","at":2.8,"width":1,"sill":0,"head":2.2,"between":["production","receiving"]}
{"t":"opening","id":"wash-production-door","on":"p-support","kind":"door","operation":"sliding","at":8.1,"width":1,"sill":0,"head":2.2,"between":["production","wash-support"]}
{"t":"opening","id":"crew-production-door","on":"p-support","kind":"opening","at":14,"width":1.2,"sill":0,"head":2.4,"between":["production","crew-support"]}
{"t":"opening","id":"counter-expo-pass","on":"p-counter-back","kind":"opening","at":5.4,"width":4.4,"sill":1.05,"head":2.9,"between":["production","service"]}
{"t":"opening","id":"counter-staff-door","on":"p-counter-back","kind":"door","operation":"sliding","at":13.5,"width":1,"sill":0,"head":2.3,"between":["crew-support","service"]}
{"t":"opening","id":"accessible-wc-door","on":"p-wc-east","kind":"door","at":18.7,"width":0.95,"sill":0,"head":2.2,"between":["wc-accessible","service"],"swingInto":"wc-accessible"}
{"t":"opening","id":"standard-wc-door","on":"p-wc-east","kind":"door","at":21.4,"width":0.9,"sill":0,"head":2.2,"between":["wc-standard","dining"],"swingInto":"wc-standard"}
{"t":"slab","id":"slab","level":"g","x":0,"y":0,"w":15,"d":28,"thickness":0.3}
{"t":"roof","id":"roof","level":"g","type":"flat","ridgeAxis":"y","pitch":0.018,"overhang":0.25,"material":"qsr-roof"}

// The reference image's long service bar and dense, mixed dining replace the
// previous sparse tables and dead-end east corridor.
{"t":"furniture","id":"service-counter","type":"counter","label":"Order / Pickup","level":"g","x":5.1,"y":17.55,"w":9.1,"d":0.85,"height":1.05,"material":"qsr-timber"}
{"t":"furniture","id":"pos-bank","type":"checkout","label":"Order points","level":"g","x":6,"y":17.62,"w":0.65,"d":0.32,"height":1.35,"material":"qsr-charcoal","cols":3,"gapX":1.25}
{"t":"furniture","id":"pickup-shelf","type":"counter","label":"Pickup + delivery shelf","level":"g","x":11.5,"y":18.55,"w":2.5,"d":0.42,"height":1.08,"material":"qsr-red"}
{"t":"furniture","id":"back-counter","type":"prep-table","label":"Front counter expo","level":"g","x":5.2,"y":15.8,"w":4.8,"d":0.8,"height":0.95,"material":"stainless"}
{"t":"furniture","id":"mccafe-back-counter","type":"bar","label":"McCafé + beverages","level":"g","x":10.7,"y":16.25,"w":2.4,"d":0.7,"height":1.05,"material":"qsr-red"}
{"t":"furniture","id":"kiosk-bank","type":"checkout","label":"Self-order kiosks","level":"g","x":11.9,"y":25.2,"w":0.55,"d":0.4,"height":1.65,"material":"qsr-charcoal","cols":2,"gapX":0.55}
{"t":"furniture","id":"condiment-return","type":"counter","label":"Condiments + tray return","level":"g","x":12,"y":19.15,"w":1.2,"d":0.45,"height":0.92,"material":"qsr-timber"}
{"t":"furniture","id":"booth-bank","type":"booth","level":"g","x":0.6,"y":23.35,"w":3.25,"d":0.9,"height":1.05,"material":"upholstery-red","rows":3,"gapY":0.35}
{"t":"furniture","id":"center-tables","type":"dining-table","level":"g","x":5.2,"y":20.8,"w":1.1,"d":0.75,"height":0.74,"material":"qsr-timber","cols":2,"rows":3,"gapX":1.1,"gapY":1.1}
{"t":"furniture","id":"center-chairs-n","type":"chair","level":"g","x":5.48,"y":20.2,"w":0.52,"d":0.52,"height":0.85,"material":"qsr-charcoal","cols":2,"rows":3,"gapX":1.68,"gapY":1.33}
{"t":"furniture","id":"center-chairs-s","type":"chair","level":"g","x":5.48,"y":21.65,"w":0.52,"d":0.52,"height":0.85,"rot":180,"material":"qsr-yellow","cols":2,"rows":3,"gapX":1.68,"gapY":1.33}
{"t":"furniture","id":"east-tables","type":"dining-table","level":"g","x":10,"y":20.8,"w":1.3,"d":0.8,"height":0.74,"material":"qsr-timber","rows":2,"gapY":1.5}
{"t":"furniture","id":"east-chairs-n","type":"chair","level":"g","x":10.15,"y":20.2,"w":0.48,"d":0.52,"height":0.85,"material":"qsr-charcoal","cols":2,"rows":2,"gapX":0.4,"gapY":2.28}
{"t":"furniture","id":"east-chairs-s","type":"chair","level":"g","x":10.15,"y":21.7,"w":0.48,"d":0.52,"height":0.85,"rot":180,"material":"qsr-yellow","cols":2,"rows":2,"gapX":0.4,"gapY":2.28}
{"t":"furniture","id":"accessible-table","type":"dining-table","label":"Accessible table","level":"g","x":9.9,"y":25.4,"w":1.5,"d":0.85,"height":0.74,"material":"qsr-timber"}
{"t":"furniture","id":"accessible-chairs","type":"chair","level":"g","x":10.05,"y":24.8,"w":0.48,"d":0.52,"height":0.85,"material":"qsr-charcoal","cols":2,"gapX":0.55}
{"t":"furniture","id":"window-bar","type":"bar","label":"Window seating","level":"g","x":13.85,"y":22.6,"w":0.45,"d":4.3,"height":1.02,"material":"qsr-timber"}
{"t":"furniture","id":"window-stools","type":"bar-stool","level":"g","x":13.05,"y":22.8,"w":0.42,"d":0.42,"height":1,"material":"qsr-yellow","rows":4,"gapY":0.55}
{"t":"furniture","id":"accessible-toilet","type":"toilet","level":"g","x":0.75,"y":17.85,"w":0.42,"d":0.72,"height":0.78}
{"t":"furniture","id":"accessible-sink","type":"sink","level":"g","x":3.15,"y":18,"w":0.55,"d":0.48,"height":1.1}
{"t":"furniture","id":"standard-toilet","type":"toilet","level":"g","x":0.75,"y":20.85,"w":0.42,"d":0.72,"height":0.78}
{"t":"furniture","id":"standard-sink","type":"sink","level":"g","x":1.8,"y":22,"w":0.55,"d":0.48,"height":1.1}

// Three north-south equipment lines create a continuous staff loop. The west
// edge is kept for pay / pickup, so cars never pull up to a blank stock room.
{"t":"furniture","id":"pay-station","type":"checkout","label":"Drive-thru pay","level":"g","x":0.55,"y":5.2,"w":1,"d":1.5,"height":1.05,"material":"qsr-charcoal"}
{"t":"furniture","id":"drive-thru-expo","type":"prep-table","label":"Drive-thru pickup expo","level":"g","x":0.55,"y":9.7,"w":1,"d":3.2,"height":0.95,"material":"stainless"}
{"t":"furniture","id":"prep-line","type":"prep-table","label":"Receiving + prep line","level":"g","x":2.9,"y":2.2,"w":1,"d":12.5,"height":0.92,"material":"stainless"}
{"t":"furniture","id":"assembly-line","type":"prep-table","label":"Assembly + holding line","level":"g","x":5.4,"y":2.2,"w":1,"d":12.5,"height":0.95,"material":"stainless"}
{"t":"furniture","id":"grill","type":"range","label":"Clamshell grill","level":"g","x":7.9,"y":2.2,"w":1.1,"d":3.8,"height":1,"material":"stainless"}
{"t":"furniture","id":"fryer","type":"fryer","label":"Fryer bank","level":"g","x":7.9,"y":6.3,"w":1.1,"d":2.5,"height":1,"material":"stainless"}
{"t":"furniture","id":"cook-holding","type":"prep-table","label":"Cook holding","level":"g","x":7.9,"y":9.1,"w":1.1,"d":3.2,"height":0.95,"material":"stainless"}
{"t":"furniture","id":"hood","type":"range-hood","label":"Continuous exhaust hood","level":"g","x":7.7,"y":1.95,"w":1.5,"d":7.2,"base":2.1,"height":0.55,"material":"stainless"}
{"t":"furniture","id":"production-wash","type":"commercial-sink","label":"Production hand + utensil wash","level":"g","x":0.65,"y":13.8,"w":2.8,"d":0.8,"height":0.95,"material":"stainless"}
{"t":"furniture","id":"walkin-cold","type":"walk-in","label":"Walk-in cooler","level":"g","x":10.75,"y":0.65,"w":1.7,"d":2.6,"height":2.5,"material":"stainless"}
{"t":"furniture","id":"walkin-freezer","type":"walk-in","label":"Walk-in freezer","level":"g","x":12.7,"y":0.65,"w":1.7,"d":2.6,"height":2.5,"material":"stainless"}
{"t":"furniture","id":"dry-store","type":"shelving","label":"Dry storage","level":"g","x":10.85,"y":4.35,"w":3.35,"d":0.45,"height":1.9,"material":"stainless"}
{"t":"furniture","id":"three-comp-sink","type":"commercial-sink","label":"Three-compartment sink","level":"g","x":10.85,"y":6.1,"w":2.9,"d":0.8,"height":0.95,"material":"stainless"}
{"t":"furniture","id":"dishwasher","type":"dishwasher","label":"Dishwasher","level":"g","x":10.85,"y":7.35,"w":0.7,"d":0.7,"height":0.9,"material":"stainless"}
{"t":"furniture","id":"clean-rack","type":"shelving","label":"Clean rack + janitor","level":"g","x":13.9,"y":6.1,"w":0.45,"d":3.6,"height":1.9,"material":"stainless"}
{"t":"furniture","id":"manager-desk","type":"desk","label":"Manager station","level":"g","x":10.85,"y":11.8,"w":1.5,"d":0.65,"height":0.74,"material":"qsr-timber"}
{"t":"furniture","id":"manager-chair","type":"chair","level":"g","x":11.35,"y":12.65,"w":0.48,"d":0.52,"height":0.85,"rot":180,"material":"qsr-charcoal"}
{"t":"furniture","id":"crew-lockers","type":"shelving","label":"Crew lockers","level":"g","x":13.9,"y":12,"w":0.45,"d":2.7,"height":2,"material":"qsr-charcoal"}

// Photo-calibrated modern exterior: charcoal tower, timber portal, broad glass,
// thin red band, flat roof plant and a protected pickup window.
{"t":"asset","id":"charcoal-tower","class":"facade tower","side":"south","material":"qsr-charcoal","parts":[{"x":13,"y":47.82,"w":4,"d":0.35,"z0":0,"z1":7.112}]}
{"t":"asset","id":"timber-entry-portal","class":"timber entry portal","side":"south","material":"qsr-timber","parts":[{"x":17.3,"y":47.78,"w":0.45,"d":0.45,"z0":0,"z1":4.6},{"x":22.2,"y":47.78,"w":0.45,"d":0.45,"z0":0,"z1":4.6},{"x":17.3,"y":47.78,"w":5.35,"d":0.45,"z0":4.15,"z1":4.6}]}
{"t":"sign","id":"golden-arches-facade","kind":"wall","on":"s","offset":0.65,"w":3.1,"d":0.08,"base":3.75,"faceH":2.4,"material":"qsr-yellow","logo":"mcdonalds"}
{"t":"fascia","id":"red-fascia","on":"s","offset":4,"length":11,"base":3.78,"height":0.57,"depth":0.18,"material":"qsr-red"}
{"t":"canopy","id":"drive-thru-canopy","on":"drive-thru-window","width":3.7,"depth":1.1,"base":2.65,"thickness":0.4,"supports":false,"material":"qsr-charcoal"}
{"t":"plinth","id":"front-plinth","on":"s","offset":0,"length":15,"base":0,"height":0.55,"depth":0.12,"material":"qsr-timber"}
{"t":"parapet","id":"parapet-n","on":"n","offset":-0.2,"length":15.4,"base":4.55,"height":0.2,"thickness":0.25,"material":"qsr-coping"}
{"t":"parapet","id":"parapet-s","on":"s","offset":-0.2,"length":15.4,"base":4.55,"height":0.2,"thickness":0.25,"material":"qsr-coping"}
{"t":"parapet","id":"parapet-w","on":"w","offset":0.05,"length":27.9,"base":4.55,"height":0.2,"thickness":0.25,"material":"qsr-coping"}
{"t":"parapet","id":"parapet-e","on":"e","offset":0.05,"length":27.9,"base":4.55,"height":0.2,"thickness":0.25,"material":"qsr-coping"}
{"t":"coping","id":"coping-n","on":"parapet-n","width":0.3,"height":0.1,"material":"qsr-coping"}
{"t":"coping","id":"coping-s","on":"parapet-s","width":0.3,"height":0.1,"material":"qsr-coping"}
{"t":"coping","id":"coping-w","on":"parapet-w","width":0.3,"height":0.1,"material":"qsr-coping"}
{"t":"coping","id":"coping-e","on":"parapet-e","width":0.3,"height":0.1,"material":"qsr-coping"}
{"t":"asset","id":"roof-hvac","class":"screened roof plant","material":"stainless","parts":[{"x":17,"y":27,"w":2.6,"d":1.8,"z0":4.85,"z1":5.45},{"x":22,"y":33,"w":2,"d":1.5,"z0":4.85,"z1":5.35}]}

// Drive-thru furniture and back-of-house site work.
{"t":"asset","id":"order-point","class":"order canopy and menu board","material":"qsr-charcoal","parts":[{"x":9.5,"y":21.5,"w":0.7,"d":1.4,"z0":0,"z1":2.15},{"x":9.1,"y":21.1,"w":2.2,"d":2.2,"z0":2.45,"z1":2.75,"material":"qsr-red"},{"x":11.2,"y":21.8,"w":0.25,"d":0.25,"z0":0,"z1":2.7,"material":"qsr-yellow"}]}
{"t":"asset","id":"bicycle-parking","class":"bicycle parking","material":"stainless","parts":[{"x":13,"y":15.1,"w":0.12,"d":1.2,"z0":0,"z1":0.8},{"x":14,"y":15.1,"w":0.12,"d":1.2,"z0":0,"z1":0.8},{"x":15,"y":15.1,"w":0.12,"d":1.2,"z0":0,"z1":0.8},{"x":16,"y":15.1,"w":0.12,"d":1.2,"z0":0,"z1":0.8}]}
{"t":"asset","id":"north-concrete-steps","class":"concrete service steps","material":"pack-walk-concrete","parts":[{"x":22.8,"y":18.9,"w":2.7,"d":0.45,"z0":0,"z1":0.15},{"x":22.8,"y":18.45,"w":2.7,"d":0.45,"z0":0,"z1":0.3},{"x":22.8,"y":18,"w":2.7,"d":0.45,"z0":0,"z1":0.45}]}
{"t":"sign","id":"lower-entry-sign","kind":"directional","x":44,"y":60.3,"w":2,"d":0.45,"height":2,"faceH":0.7,"material":"qsr-red","text":"ENTRY ONLY ←"}
{"t":"sign","id":"upper-exit-sign","kind":"directional","x":43.5,"y":3.5,"w":2,"d":0.45,"height":2,"faceH":0.7,"material":"qsr-charcoal","text":"EXIT ONLY →"}
{"t":"sign","id":"wrong-way-sign","kind":"directional","x":44,"y":11.8,"w":2,"d":0.45,"height":2,"faceH":0.7,"material":"qsr-charcoal","text":"DO NOT ENTER"}
{"t":"sign","id":"drive-thru-entry-sign","kind":"directional","x":36,"y":15,"w":2.2,"d":0.45,"height":2.2,"faceH":0.8,"material":"qsr-red","text":"DRIVE-THRU ←"}
{"t":"sign","id":"ev-parking-sign","kind":"directional","x":28.5,"y":44.5,"w":1.7,"d":0.4,"height":1.8,"faceH":0.65,"material":"qsr-charcoal","text":"1 EV READY + CHARGER"}
{"t":"sign","id":"order-one","kind":"directional","x":9.5,"y":24,"w":1.3,"d":0.35,"height":2,"faceH":0.7,"material":"qsr-charcoal","text":"ORDER"}
{"t":"sign","id":"fire-lane-sign","kind":"directional","x":34,"y":58.5,"w":2.2,"d":0.45,"height":2,"faceH":0.7,"material":"qsr-red","text":"NO PARKING · FIRE LANE"}
{"t":"sign","id":"pylon","kind":"pylon","x":38.5,"y":70,"w":3.1,"d":0.7,"height":9,"faceH":3.1,"material":"qsr-charcoal","logo":"mcdonalds"}
{"t":"utility","id":"restaurant-services","kind":"GAS + POWER + DATA","from":[28,50],"to":[46.5,55]}

{"t":"materialdef","id":"qsr-yellow","of":"paint","value":72,"accent":"#ffbc0d","body":{"roughness":0.52}}
{"t":"materialdef","id":"qsr-timber","of":"timber","value":72,"hatch":"timber"}
{"t":"view","id":"site:mcd-drive-thru","mode":"site","label":"CIVIL PLAN SITE · LOWER EAST ENTRY / UPPER EAST EXIT","cameraElevation":82,"cameraAzimuth":180}
{"t":"view","id":"section:production-line","mode":"section","axis":"y","station":34,"label":"DINING + PRODUCTION + DRIVE-THRU"}
{"t":"view","id":"interior:dining-production","mode":"interior","level":"g","label":"DINING + ORDER + PRODUCTION","cameraElevation":29,"cameraAzimuth":205}
// --- car park elements, inlined from packs/parking.ndjson ---
// There is no pack import: a model sees a lookdef only if the line is in it.
// See packs/parking.ndjson for the notes and the boxes these state.
{"t":"materialdef","id":"pack-car-silver","of":"car-paint","value":72,"accent":"#c3c8ce","body":{"type":"MeshPhysicalMaterial"}}
{"t":"materialdef","id":"pack-car-slate","of":"car-paint","value":42,"accent":"#3f5d86","body":{"type":"MeshPhysicalMaterial"}}
{"t":"materialdef","id":"pack-car-white","of":"car-paint","value":86,"accent":"#eceeea","body":{"type":"MeshPhysicalMaterial"}}
{"t":"materialdef","id":"pack-car-glass","of":"glass","value":20,"body":{"type":"MeshPhysicalMaterial","roughness":0.08,"metalness":0.1,"transmission":0.62,"ior":1.46,"thickness":0.02}}
{"t":"materialdef","id":"pack-tyre","of":"rubber","value":20,"accent":"#212428","body":{"roughness":0.96}}
{"t":"materialdef","id":"pack-rim","of":"steel","value":80,"accent":"#c6c9cc","body":{"roughness":0.3,"metalness":0.8}}
{"t":"materialdef","id":"pack-head-lamp","of":"paint","value":92,"accent":"#fdf6de","body":{"emissive":"#fdf6de","emissiveIntensity":1.6,"roughness":0.2}}
{"t":"materialdef","id":"pack-tail-lamp","of":"paint","value":20,"accent":"#8d2a24","body":{"emissive":"#a32a20","emissiveIntensity":1.1,"roughness":0.3}}
{"t":"materialdef","id":"pack-pole-grey","of":"steel","value":42,"accent":"#53585c","body":{"roughness":0.44,"metalness":0.55}}
{"t":"materialdef","id":"pack-luminaire","of":"paint","value":92,"accent":"#fbf4dd","body":{"emissive":"#fbf4dd","emissiveIntensity":2.4,"roughness":0.18}}
{"t":"materialdef","id":"pack-enclosure-block","of":"masonry","value":72,"accent":"#a9a49a","body":{"roughness":0.92}}
{"t":"materialdef","id":"pack-gate-slat","of":"steel","value":42,"accent":"#5d6560","body":{"roughness":0.62,"metalness":0.4}}
{"t":"materialdef","id":"pack-bin-body","of":"paint","value":42,"accent":"#33463a","body":{"roughness":0.78}}
{"t":"materialdef","id":"pack-bin-lid","of":"paint","value":20,"accent":"#26332b","body":{"roughness":0.8}}
{"t":"lookdef","id":"saloon-car","for":"asset:car","slots":{"paint":"pack-car-silver"},"note":"Mid-size saloon, 1.84 x 4.68 x 1.46 m. Glass greenhouse with a painted roof panel over it, so the cabin reads as windows rather than as a second block.","body":{"type":"Group","children":[{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.84,"height":0.80,"depth":4.68,"radius":0.16,"segments":3},"material":"$paint","position":[0,0.55,0]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.68,"height":0.56,"depth":2.62,"radius":0.14,"segments":3},"material":"pack-car-glass","position":[0,1.16,-0.14]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.58,"height":0.09,"depth":2.16,"radius":0.04,"segments":2},"material":"$paint","position":[0,1.415,-0.22]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.33,"radiusBottom":0.33,"height":0.22,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.795,0.33,1.44]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.33,"radiusBottom":0.33,"height":0.22,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.795,0.33,1.44]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.33,"radiusBottom":0.33,"height":0.22,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.795,0.33,-1.46]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.33,"radiusBottom":0.33,"height":0.22,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.795,0.33,-1.46]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.19,"radiusBottom":0.19,"height":0.235,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[0.80,0.33,1.44]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.19,"radiusBottom":0.19,"height":0.235,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[-0.80,0.33,1.44]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.19,"radiusBottom":0.19,"height":0.235,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[0.80,0.33,-1.46]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.19,"radiusBottom":0.19,"height":0.235,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[-0.80,0.33,-1.46]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.46,"height":0.14,"depth":0.08},"material":"pack-head-lamp","position":[0.6,0.72,2.30]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.46,"height":0.14,"depth":0.08},"material":"pack-head-lamp","position":[-0.6,0.72,2.30]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.5,"height":0.16,"depth":0.07},"material":"pack-tail-lamp","position":[0.6,0.8,-2.305]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.5,"height":0.16,"depth":0.07},"material":"pack-tail-lamp","position":[-0.6,0.8,-2.305]}]}}
{"t":"lookdef","id":"compact-suv","for":"asset:car-suv","slots":{"paint":"pack-car-slate"},"note":"Compact SUV, 1.96 x 4.85 x 1.78 m. Taller glasshouse, larger wheels and roof rails — the rails are two thin meshes and they are most of what separates this silhouette from the saloon.","body":{"type":"Group","children":[{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.96,"height":0.94,"depth":4.85,"radius":0.15,"segments":3},"material":"$paint","position":[0,0.69,0]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.82,"height":0.62,"depth":3.02,"radius":0.12,"segments":3},"material":"pack-car-glass","position":[0,1.42,-0.2]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.74,"height":0.1,"depth":2.72,"radius":0.05,"segments":2},"material":"$paint","position":[0,1.72,-0.24]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.07,"height":0.06,"depth":2.1},"material":"pack-pole-grey","position":[0.72,1.75,-0.3]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.07,"height":0.06,"depth":2.1},"material":"pack-pole-grey","position":[-0.72,1.75,-0.3]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.38,"radiusBottom":0.38,"height":0.26,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.85,0.38,1.5]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.38,"radiusBottom":0.38,"height":0.26,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.85,0.38,1.5]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.38,"radiusBottom":0.38,"height":0.26,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.85,0.38,-1.52]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.38,"radiusBottom":0.38,"height":0.26,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.85,0.38,-1.52]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.22,"radiusBottom":0.22,"height":0.275,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[0.84,0.38,1.5]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.22,"radiusBottom":0.22,"height":0.275,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[-0.84,0.38,1.5]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.22,"radiusBottom":0.22,"height":0.275,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[0.84,0.38,-1.52]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.22,"radiusBottom":0.22,"height":0.275,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[-0.84,0.38,-1.52]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.5,"height":0.16,"depth":0.08},"material":"pack-head-lamp","position":[0.64,0.92,2.385]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.5,"height":0.16,"depth":0.08},"material":"pack-head-lamp","position":[-0.64,0.92,2.385]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.16,"height":0.46,"depth":0.07},"material":"pack-tail-lamp","position":[0.86,1.06,-2.39]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.16,"height":0.46,"depth":0.07},"material":"pack-tail-lamp","position":[-0.86,1.06,-2.39]}]}}
{"t":"lookdef","id":"crew-cab-pickup","for":"asset:pickup","slots":{"paint":"pack-car-white"},"note":"Crew-cab pickup, 2.03 x 5.88 x 1.94 m. The bed is built as a container — floor, two sides and a tailgate, open at the top — because a solid block with a lid is a block. AUTHORING.md item 6.","body":{"type":"Group","children":[{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":2.03,"height":0.76,"depth":5.88,"radius":0.1,"segments":3},"material":"$paint","position":[0,0.72,0]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.9,"height":0.66,"depth":1.86,"radius":0.1,"segments":3},"material":"pack-car-glass","position":[0,1.5,0.66]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.84,"height":0.1,"depth":1.72,"radius":0.05,"segments":2},"material":"$paint","position":[0,1.89,0.62]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":1.86,"height":0.08,"depth":2.36},"material":"$paint","position":[0,1.14,-1.62]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.1,"height":0.5,"depth":2.36},"material":"$paint","position":[0.965,1.4,-1.62]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.1,"height":0.5,"depth":2.36},"material":"$paint","position":[-0.965,1.4,-1.62]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":1.9,"height":0.5,"depth":0.09},"material":"$paint","position":[0,1.4,-2.85]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.42,"radiusBottom":0.42,"height":0.3,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.865,0.42,1.72]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.42,"radiusBottom":0.42,"height":0.3,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.865,0.42,1.72]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.42,"radiusBottom":0.42,"height":0.3,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.865,0.42,-1.82]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.42,"radiusBottom":0.42,"height":0.3,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.865,0.42,-1.82]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.24,"radiusBottom":0.24,"height":0.315,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[0.855,0.42,1.72]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.24,"radiusBottom":0.24,"height":0.315,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[-0.855,0.42,1.72]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.24,"radiusBottom":0.24,"height":0.315,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[0.855,0.42,-1.82]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.24,"radiusBottom":0.24,"height":0.315,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[-0.855,0.42,-1.82]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.54,"height":0.2,"depth":0.09},"material":"pack-head-lamp","position":[0.66,1.02,2.895]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.54,"height":0.2,"depth":0.09},"material":"pack-head-lamp","position":[-0.66,1.02,2.895]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.18,"height":0.44,"depth":0.08},"material":"pack-tail-lamp","position":[0.9,1.42,-2.9]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.18,"height":0.44,"depth":0.08},"material":"pack-tail-lamp","position":[-0.9,1.42,-2.9]}]}}
{"t":"lookdef","id":"panel-van","for":"asset:van","slots":{"paint":"pack-car-white"},"note":"Panel van, 2.02 x 5.30 x 2.12 m — the vehicle a van-accessible stall is sized for. Glazed at the cab only; the body behind it is solid, which is what makes a van read as a van.","body":{"type":"Group","children":[{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":2.02,"height":1.62,"depth":4.34,"radius":0.12,"segments":3},"material":"$paint","position":[0,1.24,-0.42]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.98,"height":1.1,"depth":1.44,"radius":0.16,"segments":3},"material":"$paint","position":[0,0.98,1.87]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.86,"height":0.62,"depth":1.2,"radius":0.1,"segments":3},"material":"pack-car-glass","position":[0,1.72,1.85]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.9,"height":0.1,"depth":1.26,"radius":0.05,"segments":2},"material":"$paint","position":[0,2.07,1.80]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.06,"height":1.3,"depth":0.05},"material":"pack-pole-grey","position":[0.98,1.3,1.05]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.36,"radiusBottom":0.36,"height":0.26,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.88,0.36,1.62]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.36,"radiusBottom":0.36,"height":0.26,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.88,0.36,1.62]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.36,"radiusBottom":0.36,"height":0.26,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.88,0.36,-1.72]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.36,"radiusBottom":0.36,"height":0.26,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.88,0.36,-1.72]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.2,"radiusBottom":0.2,"height":0.275,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[0.87,0.36,1.62]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.2,"radiusBottom":0.2,"height":0.275,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[-0.87,0.36,1.62]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.2,"radiusBottom":0.2,"height":0.275,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[0.87,0.36,-1.72]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.2,"radiusBottom":0.2,"height":0.275,"radialSegments":14},"material":"pack-rim","rotation":[0,0,1.5708],"position":[-0.87,0.36,-1.72]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.46,"height":0.2,"depth":0.08},"material":"pack-head-lamp","position":[0.68,0.84,2.61]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.46,"height":0.2,"depth":0.08},"material":"pack-head-lamp","position":[-0.68,0.84,2.61]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.16,"height":0.56,"depth":0.07},"material":"pack-tail-lamp","position":[0.9,1.3,-2.615]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.16,"height":0.56,"depth":0.07},"material":"pack-tail-lamp","position":[-0.9,1.3,-2.615]}]}}
{"t":"look","id":"use-twin-head-light-column","for":"asset:light-column","use":"twin-head-light-column"}
{"t":"lookdef","id":"gated-refuse-enclosure","for":"asset:refuse-enclosure","slots":{"wall":"pack-enclosure-block","gate":"pack-gate-slat"},"note":"Two-bin gated enclosure, 3.60 x 2.40 x 2.00 m. Built as a container — pad, back, two returns, gates ajar, bins standing inside and open to the sky — because the enclosure is the thing a plan checker looks for and a solid block would show none of it. AUTHORING.md item 6.","body":{"type":"Group","children":[{"type":"Mesh","geometry":{"type":"BoxGeometry","width":3.6,"height":0.12,"depth":2.4},"material":"concrete","position":[0,0.06,0]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":3.6,"height":1.88,"depth":0.2},"material":"$wall","position":[0,1.06,-1.1]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.2,"height":1.88,"depth":2.4},"material":"$wall","position":[1.7,1.06,0]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.2,"height":1.88,"depth":2.4},"material":"$wall","position":[-1.7,1.06,0]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.16,"height":2.0,"depth":0.16},"material":"$wall","position":[1.7,1.0,1.12]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":0.16,"height":2.0,"depth":0.16},"material":"$wall","position":[-1.7,1.0,1.12]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":1.52,"height":1.62,"depth":0.07},"material":"$gate","rotation":[0,-0.30,0],"position":[-0.93,0.93,0.94]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":1.52,"height":1.62,"depth":0.07},"material":"$gate","rotation":[0,0.30,0],"position":[0.93,0.93,0.94]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.32,"height":1.24,"depth":0.98,"radius":0.06,"segments":2},"material":"pack-bin-body","position":[-0.74,0.74,-0.4]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.32,"height":1.24,"depth":0.98,"radius":0.06,"segments":2},"material":"pack-bin-body","position":[0.74,0.74,-0.4]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":1.36,"height":0.09,"depth":1.02},"material":"pack-bin-lid","position":[-0.74,1.4,-0.4]},{"type":"Mesh","geometry":{"type":"BoxGeometry","width":1.36,"height":0.09,"depth":1.02},"material":"pack-bin-lid","position":[0.74,1.4,-0.4]}]}}
{"t":"materialdef","id":"pack-asphalt","of":"render","value":20,"accent":"#3b3d40","body":{"roughness":0.97}}
{"t":"materialdef","id":"pack-walk-concrete","of":"paving","value":80,"accent":"#c9c5bb","body":{"roughness":0.9}}
{"t":"materialdef","id":"pack-car-oxide","of":"car-paint","value":42,"accent":"#a33f2c","body":{"type":"MeshPhysicalMaterial"}}
{"t":"materialdef","id":"pack-car-graphite","of":"car-paint","value":20,"accent":"#33383d","body":{"type":"MeshPhysicalMaterial"}}
{"t":"materialdef","id":"pack-car-moss","of":"planting","value":42,"accent":"#4a5b46","body":{"type":"MeshPhysicalMaterial","roughness":0.34,"metalness":0.1,"clearcoat":0.66}}
{"t":"lookdef","id":"east-west-saloon","for":"asset:car-east-west","slots":{"paint":"pack-car-silver"},"note":"The parking bank is perpendicular to the northbound access spine; this is the existing saloon vocabulary rotated ninety degrees, not a stretched box.","body":{"type":"Group","rotation":[0,1.5708,0],"children":[{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.84,"height":0.8,"depth":4.68,"radius":0.16,"segments":3},"material":"$paint","position":[0,0.55,0]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.68,"height":0.56,"depth":2.62,"radius":0.14,"segments":3},"material":"pack-car-glass","position":[0,1.16,-0.14]},{"type":"Mesh","geometry":{"type":"RoundedBoxGeometry","width":1.58,"height":0.09,"depth":2.16,"radius":0.04,"segments":2},"material":"$paint","position":[0,1.415,-0.22]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.33,"radiusBottom":0.33,"height":0.22,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.795,0.33,1.44]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.33,"radiusBottom":0.33,"height":0.22,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.795,0.33,1.44]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.33,"radiusBottom":0.33,"height":0.22,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[0.795,0.33,-1.46]},{"type":"Mesh","geometry":{"type":"CylinderGeometry","radiusTop":0.33,"radiusBottom":0.33,"height":0.22,"radialSegments":18},"material":"pack-tyre","rotation":[0,0,1.5708],"position":[-0.795,0.33,-1.46]}]}}
{"t":"asset","id":"parked-car-1","class":"car-east-west","x":29.4,"y":23.95,"w":4.68,"d":1.84,"z0":0,"z1":1.46,"material":"pack-car-silver"}
{"t":"asset","id":"parked-car-2","class":"car-east-west","x":29.4,"y":29.43,"w":4.68,"d":1.84,"z0":0,"z1":1.46,"material":"pack-car-oxide"}
{"t":"asset","id":"parked-car-3","class":"car-east-west","x":29.4,"y":34.91,"w":4.68,"d":1.84,"z0":0,"z1":1.46,"material":"pack-car-slate"}
{"t":"asset","id":"parked-ev","class":"car-east-west","x":29.4,"y":43.1,"w":4.68,"d":1.84,"z0":0,"z1":1.46,"material":"pack-car-moss"}
{"t":"asset","id":"ev-charger","class":"EV charging pedestal","material":"pack-pole-grey","parts":[{"x":28.35,"y":44.5,"w":0.35,"d":0.45,"z0":0,"z1":1.25}]}
{"t":"asset","id":"south-parked-car-1","class":"car","x":13,"y":53.65,"w":1.84,"d":4.68,"z0":0,"z1":1.46,"material":"pack-car-white"}
{"t":"asset","id":"south-parked-car-2","class":"car","x":18.45,"y":53.65,"w":1.84,"d":4.68,"z0":0,"z1":1.46,"material":"pack-car-oxide"}
{"t":"asset","id":"south-parked-car-3","class":"car","x":23.9,"y":53.65,"w":1.84,"d":4.68,"z0":0,"z1":1.46,"material":"pack-car-slate"}
{"t":"asset","id":"car-queue-1","class":"car-suv","x":5.05,"y":34,"w":1.96,"d":4.85,"z0":0,"z1":1.78,"material":"pack-car-oxide"}
{"t":"asset","id":"car-pickup-window","class":"car","x":5.15,"y":43,"w":1.84,"d":4.68,"z0":0,"z1":1.46,"material":"pack-car-graphite"}
{"t":"asset","id":"car-northbound-1","class":"car","x":40.05,"y":30,"w":1.84,"d":4.68,"z0":0,"z1":1.46,"material":"pack-car-silver"}
{"t":"asset","id":"car-upper-exit","class":"car-east-west","x":42,"y":7.05,"w":4.68,"d":1.84,"z0":0,"z1":1.46,"material":"pack-car-white"}
{"t":"asset","id":"car-lower-entry","class":"car-east-west","x":41.5,"y":55.05,"w":4.68,"d":1.84,"z0":0,"z1":1.46,"material":"pack-car-graphite"}
{"t":"asset","id":"lot-light-1","class":"light-column","x":45.4,"y":20,"w":0.6,"d":2.4,"z0":0,"z1":6.0}
{"t":"asset","id":"lot-light-2","class":"light-column","x":45.4,"y":39,"w":0.6,"d":2.4,"z0":0,"z1":6.0}
{"t":"asset","id":"lot-light-3","class":"light-column","x":45.4,"y":65,"w":0.6,"d":2.4,"z0":0,"z1":6.0}
validates clean
  • storeys stack without gaps; mezzanines fit their host
  • every opening fits inside its wall, in length and height
  • upper-storey walls have support below
  • rooms stay inside the footprint and do not overlap
  • stairs clear walls, land in circulation, and have a void above
  • risers stay within the schema limits
  • footprint clears setbacks; fences stay on the parcel