Element Area Hierarchy

Hi,

Can anyone point me to the hierarchical structure of how to drill down to an element’s surface area?

I am trying to use either a .ifc or .ifcxml file from ArchiCAD to extract element areas.

Thanks,

Glenn

It is not compulsory for an element to store their surface area in IFC. If it is stored, it will be in a quantity set, likely with the prefix Qto_. The full name of the quantity set depends on the object. For example, for a wall, you are looking for Qto_WallBaseQuantities.

Within that quantity set, you may or may not find a surface area depending on the object. For example, the closest thing a wall has is the GrossSideArea or NetSideArea. So, the surface area of the top, bottom, and ends of the wall are not accounted for. You can then read other values, such as Height, Width, and Length to find the missing areas.

In contrast, for beams, you would look at Qto_BeamBaseQuantities, and here you would see OuterSurfaceArea, GrossSurfaceArea, or NetSurfaceArea.

You can get this data in one line of code using IfcOpenShell as follows:

ifcopenshell.util.element.get_psets(element)['Qto_BeamBaseQuantities']['NetSurfaceArea']

Keep in mind that this data will then need to be converted to the right unit based on the units stored in the file. A word of warning that the unit used for length may not be the same unit used for surface areas. You can check the IfcUnitAssignment entity to find out the relevant unit. In a future version of IFC, I hear that this will be standardised to SI units, which will greatly simplify this process.

However, sometimes, the vendors do not comply with the buildingSMART specification on where to store quantity data, so they could be stored in a different location to what I’ve linked to. When this is the case, please raise the issue with the vendor, and perhaps here too so that we can document these inconsistencies for future users.

Sometimes, no data is stored at all. In that case, you need to likely process the geometry and calculate the surface area yourself. If this is the case, I can provide code on how you can do this in an automated fashion using IfcOpenShell or the BlenderBIM Add-on.

1 Like

Hi, @Moult. I am struggling with collecting the cross section and lengths of the elements in an Ifc-file if the quantity sets are not stored in the model. I see you recommend to use the shape utility functions, but cant seem to figure out how to use them to get the quantities I want. For example, here are some of the results I get from using the functions:
Area: 11.428537375472951
Footprint area: 3.0269977503032908
footprint perimiter: 55.28772016547641
Outer Surface area: 5.374541874866368
Side area: 2.8998178443201676
Volume: 0.0448917042362465
x: 9.103787114038935
y: 0.16484600000000021
z: 0.30987999999999993
Top elevation: 0.15493999999999936
Bottom eleveation: -0.15494000000000055

but do not know how to use them further. I am mainly looking at IfcBeams and IfcColumns. Do you have any tips/codes you could share?

Thank you!

If the beam or column is profile set based, you can access the profile set’s profile which is the cross section (or composite profile) and then run that through the shape utility to get the area.