This one started with a call from a preservation group in Buffalo. They had a 1910s concrete grain elevator complex on the lake, thirty-eight silos in two rows, a marine leg tower, and a rail yard that still connects to a live line. The question was whether part of it could hold a fabrication shop, a small events floor, and a public walk at the top. Before anyone talked about membranes or budgets, I needed a model I could test against.
Stage 1 — base geometry from CADMapper
CADMapper brought in the parcel, the rail alignments, and the nearest streets. The silo complex itself was not in the open data at usable detail, so I traced the outer walls from a survey the group had scanned and used the export only for context and scale. That split matters. Context from the map, dimensions from the survey. When I mixed the two, the rail alignment drifted about two feet against the property line.
Stage 2 — parcel logic with Cityweft
The complex sits inside one legal parcel with three separate owners of record, which is a mess nobody had drawn. Cityweft let me weave a working subdivision inside the boundary so we could talk about phases instead of one building. The version we kept separated the silo block, the marine leg, and the rail yard into three parcels with a shared service spine. That one drawing did more for the conversation than any rendering.
Stage 3 — rules in CityEngine
CityEngine was the right place to test the zoning envelope on the waterfront edge. I wrote rules for height, setback from the rail, and a required public access strip, then generated massing variants for the two infill sites between the silos. The rules made a bad assumption visible early: the height limit measured from the street side lets a much taller building sit behind the silos than the waterfront plan intended. That is a code issue, not a design issue, and it is now in the meeting notes.
Stage 4 — massing inserts with Archshaper
Archshaper handled the shop and the events floor. I gave it the silo block footprint and tested a low shed against a taller box tucked between the bins. The low shed keeps the silo silhouette intact from the water. The taller box gets daylight into the shop but eats the public walk. We kept the low shed and moved the walk to the roof of the connecting gallery, which is a better idea than anything I drew by hand.
Stage 5 — quick volume checks with GenAnywhere
GenAnywhere is the fast pass. Drag a rectangle over the map, and it hands back building volumes for that rectangle. I boxed the rail yard and the two empty pads and generated options for a future phase, mostly to see how much floor area could fit without touching the silos. The numbers came back close to my hand estimate, which is the point. It took four minutes and confirmed that the yard is worth more as a yard.
What broke
• CADMapper exports the rail as a centerline, not a corridor. Buffers need to be drawn by hand.
• CityEngine rules failed on two silo footprints that were not closed. Cleaning the polygon in CAD fixed it.
• Archshaper assumes floor-to-floor heights. The silo block does not have them, so I had to fake levels and label them.
• GenAnywhere returns volumes without structure. Every option needs a manual check against the bin walls.
• Cityweft will happily weave parcels across a rail easement. I had to lock that strip before every run.
What I would keep
The stage order. Base context, parcel logic, rules, massing, then quick volume tests. Each stage produced one decision, and the decisions survived the meeting. I also kept every stage in its own file with the date in the name, because the group will ask for the version from three weeks ago and nobody will remember which one had the corrected rail easement.
Two days of work produced four ruled-out options and one plan. The model was never the deliverable. The list of things we could stop arguing about was.


Top comments (0)