NativeBIM / Demos / Pump plant room from an STL
NativeBIM by NativeCAD
IFC showcase: Pump plant room from an STL
A pump mesh becomes an exact B-rep IfcPump with ports on its flanges, is placed in a plant room and piped by the router; the mesh error and the clash check are measured.
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 pump-plant-room.glb, the glTF that NativeBIM writes from the IFC file. The IFC file is pump-plant-room.ifc.
What is in the model
| Item | Count or value |
|---|---|
| Walls | 4 |
| Doors | 1 |
| Slabs | 2 |
| Columns | 1 |
| Storeys | 1 |
Requirements
The model does not yet meet every requirement of an interior. 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. | Not yet: 1 of 170 samples fail |
| 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: 792 of 1527 samples fail |
Drawing set
Draft drawing set generated from the model: pump-plant-room-drawings.pdf (PDF, 3 sheets).
- G-001 COVER SHEET AND SHEET INDEX
- A-101 PLANT ROOM FLOOR PLAN
- A-601 DOOR SCHEDULE
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.
Mesh to exact equipment, placed and piped
The pump enters as a closed mesh of 1170 triangles. NativeCAD rebuilt it as one solid of 24 faces and the importer wrote it as an IfcPump with that B-rep as its body and 2 ports. Measured on the IFC: Hausdorff distance 0.289 mm and volume difference +0.1244 percent, the values the seed gives (0.289 mm and +0.1249 percent). Two pipe systems are routed from the ports around the structure and the equipment, and 0 hard clashes among the 26 bodies in the model.
| Quantity | Measured | Known answer |
|---|---|---|
| Hausdorff distance, mesh to B-rep | 0.289 mm | 0.289 mm (largest facet sagitta, radius 135 mm at 48 sides) |
| Volume difference, B-rep less mesh | +0.1244 percent | +0.1249 percent (cylinders exact, facets inscribed) |
| Mesh volume | 63.727 litres | 63.727 litres |
| B-rep volume (NativeCAD) | 63.806 litres | 63.806 litres |
| Mesh triangles after cleaning | 1170 | closed, 0 open edges |
| B-rep faces in the STEP file | 24 (cylindrical 12, plane 12) | 6 cylinders, each split at its seam, and 12 planes |
| IfcAdvancedFace entities in the IFC | 24 | one per face |
| Port | Flow | Position in the room, m | Axis | Flange | System type | Connected to |
|---|---|---|---|---|---|---|
| Suction | SINK | (1.906, 3.000, 0.165) | (-1, 0, 0) | 220.00 mm | HEATING | pipesegment Heating water return run 1 segment 3 |
| Discharge | SOURCE | (2.200, 3.000, 0.454) | (0, 0, 1) | 220.00 mm | HEATING | pipesegment Heating water supply run 1 segment 1 |
| System | Pipe | Length | Bends | Segments | Fittings | Velocity | Gradient | Includes the pump |
|---|---|---|---|---|---|---|---|---|
| Heating water return | 100 mm | 2.84 m | 2 | 3 | 2 | 1.27 m/s | 163 Pa/m | yes |
| Heating water supply | 100 mm | 7.95 m | 4 | 5 | 4 | 1.27 m/s | 163 Pa/m | yes |
| Check | Result |
|---|---|
| Hard clashes, every element against every other | 0 (bodies tested 26, pairs tested 32, pairs touching 32) |
| Pipes against the pump, hard clashes | 0 (the pipe ends meet the flange faces) |
| Pipes within 40 mm of the column, tank, walls, slabs or switchboard | 0 |
| Return pipes within 40 mm of the supply pipes or the existing pipe | 0 |
| Router check, clearance 50.00 mm from every obstacle and system | passed |
| What NativeCAD reported | Value |
|---|---|
| NativeCAD version | 0.25.0 |
| Solids | 1 |
| Faces | 24 |
| Edges | 48 |
| Volume | 63.806 litres |
| Watertight | yes |
| Topology errors | 0 |
| This build reads the same file | 1 solid, 24 faces |
Measured by the build, not quoted: the mesh is compared with the B-rep as NativeBIM writes it into the IFC and evaluates it (the B-rep tessellated at 720 chords per circle, so its own chord error does not enter), and the Hausdorff distance is the largest distance from either surface to the other. The mesh is a 48-sided polygon wherever the solid is round, with its vertices on the circle, so the exact solid lies farther out by the facet sagitta of the largest circle and is slightly larger. Both numbers follow from the seed in equipment.js, and the build stops if they differ from the measured ones by more than 5 percent.
The equipment is simple on purpose: a box casing, two nozzles with flanges and a motor cylinder, so that NativeCAD recognises every face as a plane or a cylinder and returns an exact solid. NativeCAD marks the faces of a mesh-derived solid as such, because their edges are chords of the circles they bound; the surfaces themselves are exact planes and cylinders (fit error below 0.00002 mm).
Ports: the importer finds every round end face that ends the part. The motor cover end is one of them (diameter 246.00 mm). It is not a pipe connection, so this showcase keeps the end faces whose diameter is a PN 16 flange outside diameter from the table in the sources, which leaves the suction and discharge flanges.
Routing: both systems are routed with the preview edit op routeMep. The pump body and the door zone are given to it as an obstacle and a keep-out; it takes the column, tank, switchboard, walls, slabs and the existing pipe from the model. Obstacles are bounding boxes, so a route can be longer than a designer would draw.
Files: the STL is written by equipment.js and the build stops if the checked-in copy differs from what the script writes. The STEP is NativeCAD output, checked in so that the build needs no CAD kernel. To refresh it, run the three calls listed in nativecad-record.json (the same ones tools/mesh/import.js writes to request.json) and replace pump.step and the record.
Sources
Where each dimension comes from. Anything marked as chosen for the sample is an assumption, not a measurement.
- Pump mesh: an end-suction pump set generated from primitives by a seeded script, so it carries no third-party licence and its exact answer is computed from the seed. showcases/pump-plant-room/equipment.js. A shape chosen for this showcase; no manufacturer product is represented..
- Flange outside diameter 220 mm for a DN100 PN 16 flange, used to tell pipe flanges from the motor cover. EN 1092-1, steel flanges, PN-designated, table of PN 16 flange dimensions.
- Pipe sizes: the smallest ISO 6708 nominal size whose water velocity stays within the limit; friction by Hazen-Williams. docs/MEP-AUTHORING.md, Routing and sizing (packages/core/src/mep/route/sizing.js).
- Room 9.0 m x 5.5 m x 3.6 m, column, tank, switchboard, door, existing pipe and flow rate. Chosen for this showcase. No real building is represented..
- Mesh to B-rep: recognition of planes and cylinders in a triangle mesh, sewn into one solid, exported as STEP AP242. NativeCAD mesh-to-B-rep (cad_mesh_to_brep), version in equipment/nativecad.json.
Built 2026-10-27 with node tools/showcase/build.js pump-plant-room. 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.