IFC offers quite a few ways to describe solid geometry:
- • you can use primitives like blocks, cylinders etc. and combine them using boolean operations like union, difference etc.
- you can make sweeps by extruding profiles along a path
- you can define multiple section profiles along a path
- or you can use boundary representation.
Boundary representation (“b-rep”) are probably the reason why IFC files are considered static and take so much disk space. Let’s have a look how b-reps are constructed to find out why.
Faceted b-reps are described by all its “corner” points. That is the start. So if you want to describe a cube using this geometry you need sight Cartesian points (with X, Y and Z coordinates).
You can already see how this is inefficient: having eight lines simply for the nodes instead of defining a cube with length with and height, right?
B-rep doesn’t stop there, we just “created” some points. Next we have to connect those points to receive edge loops that we define as the boundaries of our our faces (outer and inner if you have holes/voids). In case of a cube we need six of those.
Finally we have to list all faces that make up a “watertight” shell, again our six faces.
Let’s sum it up. For our simple cube we need:
- 8 points
- 6 poly-loops
- 6 outer boundaries
- 6 faces
- 1 closed shell
- • 1 final faceted b-rep object (because you could add other closed shells as voids)
That makes at least 28 rather long lines in an IFC file. Additionally they are hard to read for humans. So how comes this is used so often – or at all?
Because is a kind of last resort for geometry description. Each program has its own way of treating geometry (more or less, there are a few so-called “geometry kernels” available). So during export this geometry is converted to IFC geometry. That works mostly fine for simple extrusion (i.e. footprint + height). If no easy conversion is found the geometry gets “dissolved” into its “atomic” components to keep at least the looks of the object.
On the receiving side it’s also the “easiest” way to prepare a geometry for display in a viewer. The viewer simply has to take all the points, connect them to form triangles / quads / polygons (whatever is most efficient for the viewer, graphic cards are optimized towards working with those) and is basically finished. It does not have to know the different “syntax” for blocks, spheres, cylinders, tapered extrusions, sweeps along paths etc. The reason why objects “disappear” when imported into BIM-applications (authoring or viewing tools) often is that those don’t understand certain geometries. They cannot display what they cannot “read”. If you are lucky you receive a log file that tells you which geometry was skipped.
Sometimes you cannot avoid to have complex geometry that you can only describe using b-reps. However, for our usual day-to-day projects that should be quite rare (unless you put fancy furniture and accessories in your model).
Dx7wXPEZ8kc
4cRpp9jN2SG
nTQDYRGoqJL
9l0Jl4z4h8j
X86M1JZmJI4
FMg1xxEgrsU
hWEcraHsmwP
668g2FrNu0E
0wUnU0oiJUp
Nf8vwAnOt9w
KIqlGDtAPpu
2HJswmYHYxT
OEyMUq332oW
VgLzhoNrOje
LPzTQMVRYur
4KeiyJRpRwD
ea8WRusmnTs
ywvH5TaOe2t
mHuMWqTTFJj
U4IJFAVhfHi
m5IaUMLFK3K
DJ8K7DJnKK6
0PvHeM5660D
xRT00pratmH
TVBQIFMQ2GS
GAQjnj8NDQt
K4EHiAcLVZr
u5heXFRK29s
onKllJLpFkE
hIzT80DRHgU
lF87IB9bYf8
bhOMqlwItRE
cKP71InkK0E
eZXZQkwLMxA