Own product · 2024 – now

Point cloud to BIM, automatically

A SaaS I designed and built end to end. Upload a laser scan (E57, PLY or LAS) and get a 2D DXF floor plan and a 3D IFC building model, with a web viewer to check the result against the scan.

5,999,967points in the house shown here
68.7 mof wall traced and measured
6 mmmedian distance from wall to scanned surface
16 + 9doors and windows found

Drag to compare

On the left, the scan as the scanner saw it, coloured by depth. On the right, the model the pipeline generated from it, seen from the same camera. In the product this is a live 3D viewer: both halves share one camera, so orbiting and zooming can never drift apart.

Formats in: E57, PLY, LAS. Out: DXF floor plan, IFC model (as-levelled and as-scanned).

Laser scan of a house as a point cloud coloured by depthThe IFC model generated from the same scan, from the same cameraPoint cloudGenerated IFC model

The pipeline

Every stage runs from one script in a fixed order, and every number in the model is measured from the scan. Only the agent stage costs money; everything else is local geometry, so re-running the tail of the pipeline to test a change is free.

  1. Find the buildingMeasure what stands 0.9 to 2.2 m above the local ground, so open terrain and neighbours don't count as the building.
  2. Level the scanThree estimators compete to find which way is up. The winner must leave the floor flatter than it found it; the rotation is saved so the model can be turned back.
  3. Find floors and ceilingsFloors from the lowest surface each column of points ends at, ceilings from the highest flat one. Buildings with two or more storeys are cut and processed storey by storey.
  4. Split large sitesScans wider than about 55 m are cut into overlapping parts and merged back into one wall set, so size becomes a routing decision instead of a refusal.
  5. Trace the walls with an AI agentA vision-language agent traces wall centrelines on rendered slices. The harness scores every pass against the cloud and re-prompts with the actual miss, up to five times, keeping the best.
  6. Fit and measureEach wall moves onto the surface the scan shows. Thickness, floor level and wall height are measured from the points, never assumed.
  7. Doors and windowsGeometry decides where it can and colour decides where it can't, because glass returns points. Widths and heights are re-measured on a 2 cm grid.
  8. Export and scoreDXF floor plan and IFC model, plus an as-scanned copy in the customer's own coordinates. Recall, precision and F1 against the cloud decide whether a plan ships.
The scan sliced at wall height, seen from above
The scan sliced between 0.9 and 2.2 m above the floor. The plan appears from the points.
Wall centrelines traced by the AI agent over the slice
The agent's wall trace, scored against the cloud on every pass.
Measured walls with doors in amber and windows in cyan
Measured wall thickness, doors (amber) and windows (cyan).
The generated model drawn inside the scan
The extruded model inside the scan: 91% of traced wall lies within 10 cm of the points.

Rules that cost a day each

Measure, don't assume. Wall height, storey height, thickness, opening sizes, floor level and colour are all measured from the cloud. Every constant that survived turned out to be a bug.

A refinement must never lower the score. Each refinement is scored before and after on the same pair, and reverted when it loses.

Colour where geometry is silent, not everywhere. Used as an equal vote, colour put a window on every wall with a poster on it.

The result page in the product, recorded on this job.

Live product: thescantobim.com. Upload a scan and get a plan back.

Stack
  • Python
  • Open3D
  • IfcOpenShell
  • Claude
  • Next.js
  • Three.js
  • web-ifc
  • FastAPI
  • RunPod
  • Stripe