NativeBIM / Demos / As-built deviation from a scan
NativeBIM by NativeCAD
IFC showcase: As-built deviation from a scan
A design is changed in known ways, scanned synthetically, rebuilt from the points and compared with the design. Deviations above a stated tolerance become BCF topics.
This model is illustrative. It is built from a script with the dimensions listed under Sources, and it does not represent an existing or as-built building.
3D model
The viewer opens as-built-deviation.glb, the glTF that NativeBIM writes from the IFC file. The IFC file is as-built-deviation.ifc.
What is in the model
| Item | Count or value |
|---|---|
| Walls | 9 |
| Doors | 6 |
| Windows | 9 |
| Slabs | 2 |
| Roofs | 1 |
| Spaces | 6 |
| Storeys | 2 |
Requirements
The model does not yet meet every requirement of a building. Each is measured on the model’s geometry by casting rays at it from sample points 0.25 m apart.
| Requirement | What it asks | Result |
|---|---|---|
| Every enclosed area has a floor | Rooms are walked on: an area walls close in at a storey level and nothing to stand on is not a room. | Met |
| The interior is closed in | Walls, doors and windows close every interior floor on all sides; a gap in the walls is a hole in the building. | Not yet: 63 of 3365 samples fail |
| Rain from above is kept off every floor | A roof over every floor, with no gaps between its planes, at its hips and valleys, or where it meets a wall. | Met |
| There is a way in | At least one door in the envelope. | Met |
Drawing set
Draft drawing set generated from the model: as-built-deviation-drawings.pdf (PDF, 3 sheets).
- G-001 COVER SHEET AND SHEET INDEX
- A-101 LEVEL 1 FLOOR PLAN
- A-601 DOOR, WINDOW, ROOM FINISH AND AREA SCHEDULES
Elevations are not generated yet, so this drawing set has plans and schedules only. Sections are not generated yet, so this drawing set has plans and schedules only.
As-built deviation from a scan
The design was perturbed with five known changes, scanned synthetically (255513 points, seed 1, 18 furniture boxes), rebuilt from the points alone and compared with the design at a tolerance of 0.05 m. Changes above the tolerance: 4, detected: 4. The change under the tolerance was not flagged. Elements without a known change that were flagged (false alarms): 2. The 6 deviations became 6 BCF topics with 6 viewpoints. Elements flagged on the unchanged design, the false-alarm floor of the method: 2. All numbers on this page are computed by the build.
| No | Known change | Element | Expected | Measured deviation (m) | Result | owner/asbuilt.reconcile |
|---|---|---|---|---|---|---|
| 1 | Wall moved 0.30 m east | Office partition 2 | moved | 0.3 | detected | removed |
| 2 | Door not built, the wall is closed | Office 2 door | missing | missing | detected | removed |
| 3 | Window built 2.10 m wide instead of 1.50 m | Meeting room window 1 | resized | 0.601 | detected | resized |
| 4 | Window shifted 0.10 m along its wall | Office 3 window | moved | 0.102 | detected | moved |
| 5 | Wall moved 0.03 m east, under the tolerance | Office partition 1 | not flagged | 0.03 | not flagged (under tolerance) | resized |
| Class | Element | Reported as | Deviation (m) | Measures (m) |
|---|---|---|---|---|
| IfcDoor | Entrance | moved and resized | 0.442 | position 0.402, width 0.442, height -0.012, sill 0.012 |
| IfcDoor | Office 1 door | missing from the reconstruction | - | - |
| Class | Element | Reported as | Deviation (m) | Measures (m) |
|---|---|---|---|---|
| IfcDoor | Entrance | moved and resized | 0.442 | position 0.402, width 0.442, height -0.012, sill 0.012 |
| IfcDoor | Office 1 door | missing from the reconstruction | - | - |
| Run | Points | Design elements | Rebuilt elements | Matched | Precision (percent) | Recall (percent) | F1 (percent) | Voxel IoU (percent) | Deviations over tolerance | BCF topics | BCF viewpoints |
|---|---|---|---|---|---|---|---|---|---|---|---|
| No changes | 255818 | 33 | 29 | 29 | 100 | 87.9 | 93.6 | 91.2 | 2 | 2 | 2 |
| Five known changes | 255513 | 33 | 28 | 27 | 96.4 | 81.8 | 88.5 | 88.8 | 6 | 6 | 6 |
The design shown on this page is furnished (office furniture). The scan chain runs on its shell, the same building without the loose furniture: the as-built building is the shell with the five changes, the reconstruction is compared with the shell, and the synthetic scan adds its own furniture-like clutter boxes.
Method. The as-built building is the design built again with the five changes listed in the table of known changes (showcases/as-built-deviation/building.js). A synthetic laser scan is cast on it (seed 1, 1 degree ray step, 5 mm range noise, occlusion, missing patches, 18 furniture boxes), and an IFC is rebuilt from the points alone with the two settings that leave furniture out (levels under 2.5 m2 and wall faces under 2.4 m high are not kept). That reconstruction is compared with the design, not with the as-built building.
Deviation measures. Walls and openings are paired by position in plan, not by id. A wall is measured across its axis, its position and its thickness; its ends and its height are not compared. An opening is measured along its wall, in width, in height and in sill level. The tolerance is 0.05 m on every measure. Doors, windows and walls are compared; slabs, the roof and rooms are scored by the fidelity harness but not turned into topics.
Why the pairing is not the fidelity harness pairing. Fidelity pairs by 3D overlap of at least 0.5. The wall moved by 0.30 m is 0.15 m thick, so it no longer touches its design position: the harness reports walls missing: 1 (Office partition 2) and walls extra: 1, and the deviation measures here rest on a pairing by position. The harness remains the whole-model score in the last table.
owner/asbuilt.reconcile ran on the same two models with its types ignored (the option ignoreType, because the reconstruction makes up its own types), a minimum match score of 0.3 and the tolerance 0.05 m. It matches by signature and was built for two models from authoring tools, so on a scan it counts differences in wall length and height as resizes and holds rooms as ambiguous. Its counts for the run with changes: resized 9, moved 1, reshaped 10, property-only 1, added 4, removed 27, ambiguous 2. The topics come from the deviations of this page, written with its toBcf, and not from its own list.
Systematic bias. The reconstructed walls are on average 0.235 m lower than the design walls, and their ends differ at the corners. Both are why heights and lengths of walls are not compared: every wall would be flagged on a bias of the method.
Spread of the method on the unchanged design (compared elements: 23): the deviation is 0.009 m at the median, 0.018 m at the 95th percentile and 0.442 m at the largest. The change of 0.03 m is under the tolerance on purpose: a tolerance below the spread of the method would flag the noise.
The numbers on this page are computed by the build from the seed and the settings above, not typed in. Reproduce them with: node tools/showcase/build.js as-built-deviation. The scan and the rebuild alone: node tools/scan/scan.js roundtrip as-built-deviation --seed 1 --clutter.
The BCF files hold one topic per deviation, each with a viewpoint (camera at the element, the element selected by IfcGuid): moved, resized and extra elements refer to the reconstruction, missing ones to the design. A BCF viewer needs the matching IFC to show them, so both IFC files are below.
Real scans are noisier than the synthetic one, clutter hides walls, and a building may not match its own survey. This is a method check on a synthetic scan, not a statement about a real site.
- BCF 2.1 of the deviations above 0.05 m (6 topics, 6 viewpoints), deviations.bcf
- The as-built building the scan was cast on: the design with the five known changes (as-built.ifc)
- The IFC rebuilt from the scan of that building, the model the design is compared with (reconstruction.ifc)
- The fidelity report of the reconstruction against the design (fidelity.json)
- BCF of the run on the unchanged design: its 2 topics are false alarms (no-change-deviations.bcf)
Sources
Where each dimension comes from. Anything marked as chosen for the sample is an assumption, not a measurement.
- Design: the office suite of the scan to IFC showcase, plan 14.0 m x 9.0 m, 3.0 m walls, three offices, a corridor, a meeting room and an open office. Chosen for this sample. No real building is represented..
- The five known changes, the tolerance of 0.05 m, the seed and the scan settings. Chosen for this sample, written in showcases/as-built-deviation/model.js and building.js.
- Scan method: seeded ray casting with range noise, occlusion and missing patches; rebuild by region-growing planes, storeys, walls, openings and slabs. NativeBIM docs/SCAN.md (SCN-1).
- Score of the reconstruction against the design: precision, recall and F1 per class by optimal assignment on 3D overlap. NativeBIM docs/FIDELITY.md (RTF-1).
- Reconciliation of a design with an as-built model, and its BCF output. NativeBIM owner/asbuilt.js; BCF 2.1, buildingSMART International.
Built 2026-10-28 with node tools/showcase/build.js as-built-deviation. Re-running the command gives the same bytes.
Notices
NativeBIM is licensed software. It does not provide design, engineering or other professional services. Outputs are drafts for review by the licensed professional of record.
Sheets are marked NOT FOR CONSTRUCTION by default.
Areas are computed by NativeBIM, not a certified BOMA measurement.
IFC and Industry Foundation Classes are marks of buildingSMART International.
NativeBIM is not affiliated with, endorsed by or sponsored by the companies and organizations named here. Product names and marks belong to their owners.
NativeBIM is provided as is, without warranty of any kind. To the extent the law allows, FeatureBoard Labs Incorporated is not liable for indirect, incidental or consequential damages, lost profits or lost data, and its total liability is limited to the license fees paid in the 12 months before the claim. Read the license.