Stoatworks Labs

ArrayCAD

A CAD model or a PDF plan in, ArrayCalc or Soundvision out

In developmentRuns in a browser tab

A venue drawing is fifty thousand triangles. ArrayCalc wants forty planes.

Nothing closes that gap by itself, which is why the venue usually gets rebuilt by hand. Drop the CAD model in here instead. It merges the triangles back into flat surfaces, lets you throw away everything the prediction tool doesn't need and say what each surface is, and writes the file: a .dbacv for d&b ArrayCalc, 3D room data for L-Acoustics Soundvision, or a project for AFMG EASE Focus 3. It converts between the three as well.

DWG read directly, DXF, glTF, IFC, FBX, Collada, OBJ, STL, MVR from any lighting visualiser, and an existing ArrayCalc, Soundvision or EASE Focus venue if what you want is to prune or convert one. MVR goes back out too, so the finished venue returns to the visualiser it came from. No 3D model at all? Drop a PDF or an image of the plan and trace the rooms off it. Vectorworks files are a closed binary format nobody outside Vectorworks can read, so drop one in and it names the export to run instead. There's also a Vectorworks plug-in that skips the intermediate file entirely.

ArrayCAD — A CAD model or a PDF plan in, ArrayCalc or Soundvision out
A real ArrayCalc theatre re-imported and reduced: 588 triangles, 198 flat regions, 198 ArrayCalc objects, one plane per region, no splitting.

What it does

01

The reduction is the tool

Vertices are welded, coplanar triangles are flood-filled into regions, and each region's outline is recovered and simplified. A raked seating deck becomes one plane however many triangles the model spent on it; a box becomes six. Handing ArrayCalc the raw triangles produces a file it can't usefully work with.

02

Prune and classify what survives

The CAD object tree comes through intact (DXF layers, glTF node names, IFC entity types), so you prune by names you already use. Alt-click takes a whole branch. Then say what each surface is, and the listener height follows from that.

03

It writes the quads ArrayCalc actually accepts

The hard-won part

An ArrayCalc quad isn't four free points. It's a symmetric trapezoid in a specific local frame, and a quad written the obvious way is silently collapsed to zero depth on import, sometimes not until weeks later, when the object ends up inside a rotated group. Anything that can't be expressed that way becomes triangles instead, which are unconstrained.

04

You can see what it did

The source geometry and the planes it produced are drawn in the same viewport, so the merge tolerances are something you check by eye rather than trust. The object count is broken down, including how many faces had to be split and why.

What to check before a show

  1. 01

    The output has been round-tripped through ArrayCalc, three times over

    Diagnostic venues written by this tool were opened in ArrayCalc 12.8.2, saved and exported again. The first attempt failed and found a real bug: every quad had been written with a centroid origin and ArrayCalc collapsed each one to a zero-depth line, with no error shown. By the third round every object came back byte-identical. That result is pinned as a test, because reproducing it needs a human with ArrayCalc.

  2. 02

    Some plane type names are still guesses

    "Positioning area" is ArrayCalc's own word, from a dialog it raised. "Listening" is near-certain, as it's the only type that keeps a listener height you set. "Surface" and "Stage" are deductions from one sample venue, and there's a type the tool has never seen named. So the raw numeric code is shown beside every label, because that's what actually gets written to the file.

  3. 03

    Curved tiers come out as flat quads

    ArrayCalc stores a curved raked tier as an elliptical annulus sector. The format is understood and such a venue reads correctly, but nothing here generates one yet, so a curved balcony converts to a run of flat planes rather than a single swept surface.

  4. 04

    Check the units before you check anything else

    Only glTF and IFC state their units, and a DXF very often says "unitless". The size is guessed from the model's bounding box and the app tells you when it's guessing, but a wrong guess makes every distance in the venue wrong by the same factor, and it'll look entirely plausible on screen.

  5. 05

    Your drawing never leaves the machine

    There's no backend and no upload. The model is read by the page from your own disk, converted in the tab, and the .dbacv is written back to your downloads folder. A venue drawing is somebody's building.

Run your own copy

ArrayCAD is also published as a Docker image, ghcr.io/stoatworks-labs/arraycad, serving the same files as the hosted copy. On a laptop or a box in the rack it keeps working when the venue's internet doesn't.

Docker

docker run -d --name arraycad --restart unless-stopped -p 8523:80 ghcr.io/stoatworks-labs/arraycad:latest

Then it's at http://localhost:8523/. The repo's docker-compose.yml does the same with docker compose up -d.

Unraid

Search Community Applications for arraycad and install it. The template sets the port to 8523 for you.

Self-hosting the web tools, and which ones you can