Skip to content

3D vision · BIM automation

Scan-to-BIM: point cloud to verified IFC

A human-in-the-loop pipeline that turns a laser scan into an IFC model of slabs, walls and columns. Every element must be backed by real point support and a reviewer checks it before sign-off.

Context
AGECS (R&D) · contractor site scan and public benchmarks
Period
Jun 2026 – present
My role
R&D engineer: pipeline design, geometry classification, IFC generation, verification
Plan-view point-density map of a real site scan showing a lattice of thin members
Real contractor scan, plan-view point density: thin lattice members read as temporary shoring, so the pipeline keeps them out of the IFC.
~264 M
Points in the site scan
7.7 GB PLY · single storey
2 · 9 · 21
Slabs · walls · columns in IFC
re-verified with IfcOpenShell
18.5 min
End-to-end regeneration
phased notebook, 0 blocking errors
0.92
Column IoU (synthetic)
PointNet++ · walls 0.89, floor 0.87

Chapter 01

The engineering challenge

Real scans are enormous: the site scan here was about 264 million points (7.7 GB). They also contain scaffolding, shoring and clutter that automatic pipelines mistake for structure.

An open-source baseline (Cloud2BIM) produced walls with the wrong orientation and forced-rectangle columns, which a reviewer rejected in ReCap.

Chapter 02

Input data

Site laser scan

~264 M points, 7.7 GB PLY, single storey (anonymised)

Public benchmark

Kladno station point cloud

Synthetic interior

207k labelled points for semantic segmentation tests

3D scatter of a segmented room point cloud
PointNet++ semantic segmentation output (synthetic interior).

Chapter 03

The AI & engineering workflow

Stage 1 of 5

Ingest

E57 / PLY → subsample (memory-mapped, chunked)

What I did

  • Adapted the open-source Cloud2BIM pipeline and kept its slab detection and IFC writer, while replacing wall and column classification with my own geometry classifier.
  • Fixed a ~90° wall-orientation bug (the `minAreaRect` angle convention) and checked it against independent PCA on 9 of 9 walls.
  • Built a multi-blob connected-component test that rejects temporary steel props and shoring without hard-coding to the dataset (23 → 21 columns, with all confirmed elements kept).
  • Wired the whole flow into a phased notebook with approval gates. It regenerates the IFC end-to-end in ~18.5 minutes, and I re-verified the output from a fresh IfcOpenShell process.
  • Benchmarked PointNet++ semantic segmentation on a synthetic building interior and ran the pipeline on the public Kladno station dataset.
PythonOpen3DNumPy / SciPyOpenCVIfcOpenShellPointNet++Autodesk ReCapRevit / Dynamo

Real scan · real IFC

The Kladno station scan and my final IFC model.

120,000 points sampled from the 250.5 M-point benchmark scan, coloured by the IFC element they support, then the model revealed storey by storey.

Input → output

Drag to compare.

Class-labelled (ground truth)
Raw scan
Raw scanClass-labelled (ground truth)

Synthetic building interior: the unlabelled scan against its class-labelled version (walls, floor, ceiling, doors, columns).

Chapter 04

Technical result

  • Produced an interim IFC with 2 slabs, 9 walls and 21 columns. Each element traces to raw point support, and a fresh re-run reproduced the model exactly.
  • Removed temporary shoring and a lattice fragment automatically, keeping all 12 previously confirmed permanent elements.
  • Documented reusable methods: visual-first column-shape verification, and a temporary-works detection pipeline for future scans.

PointNet++ per-class IoU on a synthetic interior

Mean over the five classes present: 0.823.

0.000.250.500.751.00Column0.922Column · IoU: 0.922Wall0.888Wall · IoU: 0.888Floor0.874Floor · IoU: 0.874Ceiling0.873Ceiling · IoU: 0.873Door0.560Door · IoU: 0.560mean 0.823

The notebook's reported mIoU of 0.686 includes an empty background class scored as 0. Doors are most often confused with walls (16%).

View data table
CategoryIoU
Column0.922
Wall0.888
Floor0.874
Ceiling0.873
Door0.560

Source: AGECS PointNet++ evaluation (synthetic data)

Limitations, stated plainly

  • The site IFC is labelled interim. Openings (doors and windows) and one disputed element remain under review.
Fig. 01Per-class isolation used for QA.
Fig. 02Contractor site scan: classified walls and columns over the slab footprint (coordinates removed).
Fig. 03Public Kladno station benchmark: slab-candidate classification.

Chapter 05

Practical impact & relevance

  • Scan-to-BIM is costly manual modelling. This work automates the repetitive parts and keeps an engineer in control of what counts as structure.
  • Shows 3D geometry skills (PCA, contouring, connected components) alongside BIM data standards (IFC).
EvidenceWhere every figure on this page comes from

Each metric is taken from a primary record, not from a CV. Hover a metric to see its source. The underlying files are available for review at interview.

  • AGECS Scan-to-BIM progress log
  • AGECS Scan-to-BIM project record
  • AGECS PointNet++ evaluation (synthetic data)
  • AGECS Scan-to-BIM benchmark runs (Kladno)

The contractor and site are anonymised. Survey coordinates are cropped from all figures.

Next case study

Crack detection to digital twin: concrete water tank