About the Project

Inspiration

Fire department orientation plans in Switzerland must follow strict Feukos standards — but they're still drawn manually from dense CAD files full of furniture, plumbing, and annotations nobody needs in an emergency. We wanted to automate that.

How We Built It

A four-stage pipeline: parse DWG/DXF → cluster SVG elements by spatial proximity → send rasterised images to a Vision-Language Model (Qwen3-VL) for room detection and cleanup guidance → regenerate a clean, Feukos-compliant PNG with injected legend. Wrapped in a FastAPI backend with a drag-and-drop frontend.

The clustering merges elements whose centroids satisfy:

$$d(\mathbf{c}_i, \mathbf{c}_j) < \epsilon \quad \wedge \quad \frac{\min(A_i, A_j)}{\max(A_i, A_j)} > \tau$$

so small annotations never absorb large room polygons.

Challenges

  • CAD coordinate scale — walls can sit at coordinates like $(148000, 89000)$; everything collapses to one pixel without auto-scaling the render.
  • DWG is proprietary — we had to shell out to the ODA File Converter binary with no Python API.
  • VLM noise sensitivity — cluttered clusters made the model describe annotations instead of the floor plan; we added a density pre-filter to split them first.

What We Learned

The hard part wasn't AI — it was geometry. Getting SVG clustering and coordinate normalisation right took more iteration than the model integration.

Built With

Share this project:

Updates