Industry Foundation Classes (IFC), as you may have read elsewhere on this blog or on the internet in general, is a standard that significantly facilitates data exchange between various parties in a project. It is a universal data schema designed to streamline the transmission of project information across different systems.
In this article, we will focus on the analysis of various types of properties. Additionally, we will take a closer look at them and try to answer the question of which ones are worth choosing for storing information in your project.
Welcome to the article.
- All you need to know about IFC 4.3 for infrastructure
- IFC 4.3 in road projects – case study
- Relations I used to create IFC 4.3 for infrastructure
- Spatial Breakdown Structure in IFC 4.3
- IFC 4.3 on construction site
- Webinar about IFC 4.3
- Ticket to openBIM
- Export to IFC 4.3
- The Key Changes in IFC Schema Shaping OpenBIM for Infrastructure
- Transferring from Civil 3D to Quadri and Exporting to IFC 4.3
- Five Effective Tools for BIM Data Quality Assurance
Properties in IFC
In the IFC (Industry Foundation Classes) standard, each BIM (Building Information Model) object is assigned to a specific class (Entity), and each class has its attributes. Examples of attributes include Name, Description, PredefinedType, ObjectType, and Tag. Although these attributes assist in identifying the object, they are often not sufficient for a complete description.
To provide a more precise characterization of objects, properties are employed. Properties can take various values and are represented using different data types. Properties can be diverse, encompassing both basic and more advanced parameters.
A group of properties with similar characteristics is referred to as a property set. The IFC standard offers predefined property sets, labeled with the prefix Pset_.
In the IFC 4×3 standard, there are 645 available property sets. These standard sets are accessible for various industries, project phases, or types of stakeholders.
You can find the list of all “Psets” here: LINK
Associating properties with an object.
Technically speaking, objects are associated with property sets (“Psets“), not directly with individual properties. This means that each property, even if there’s only one, must be part of a property set.
If you’re familiar with the IFC schema to some extent, you know that in addition to objects and properties, there are also relationships. Relationships are used to connect objects to objects, objects to classifications, and objects to materials.
It’s no different in this case. The relationship ifcRelDefinesByProperties is used to link an object to a property set.
Property Types
IfcPropertySingleValue
- One property value.
- Can take on various data types for individual values, such as numbers, strings (text), dates, etc.
- Example: A property named “Weight” with a numerical value of 100.2 kg
/* Name, Specification, NominalValue, Unit */
#116 = IFCPROPERTYSINGLEVALUE('WEIGHT', $, IFCREAL('100.2'), $);
IfcPropertyBoundedValue
- A property value with specified boundaries.
- Often used to describe properties that have constraints, such as a range of values.
- Example: Property “Area” with a value between 100 and 250 square meters.
/* Name, Specification, UpperBoundValue, LowerBoundValue, Unit, SetPointValue */
#132 = IFCPROPERTYBOUNDEDVALUE('AREA', $, IFCINTEGER('250'), IFCINTEGER('150'), #140, $);
/* Dimensions, UnitType, Prefix, Name */
#140 = IFCSIUNIT(*,.AREAUNIT., $,.SQUARE_METRE.);
IfcPropertyEnumeratedValue
- A property that can take one of a limited set of values.
- Applied when the property can be assigned to one of predefined options.
- Example: Property “Color” with options: red, blue, green
/* Name, Specification, EnumerationValues, EnumerantionReference */
#133 = IFCPROPERTYENUMERATEDVALUE('COLOR', $, (IFCLABEL('RED')), #134);
/* Name, EnumerationValues, Unit */
#134 = IFCPROPERTYENUMERATION('ePENUM_COLOR', (IFCLABEL('RED'), IFCLABEL('GREEN'), IFCLABEL('BLUE')), $);
IfcPropertyListValue
- A property value represented as a list.
- Can contain various data types in the form of a list.
- Example: Property “Materials” as a list containing wood, steel, concrete.
/* Name, Specification, ListValues, Unit */
#135 = IFCPROPERTYLISTVALUE('MATERIAL_LIST', $, (IFCLABEL('WOOD'), IFCLABEL('STEEL'), IFCLABEL('CONCRETE')), $);
IfcPropertyReferenceValue
- A property value represented as a reference to another object or entity.
- Often used when the property is associated with another object in the data model.
- Example: Property “Material” as a reference to an object representing the type of material.
/* Name, Specification, UsageName, PropertyReference */
#136 = IFCPROPERTYREFERENCEVALUE('MATERIAL_NAME', $, $, #139);
/* Name, Description, Category */
#139 = IFCMATERIAL('Brick',$,$);
IfcPropertyTableValue
- A property organized in tabular form.
- Used when the property requires a tabular structure for description.
- Example: Table with the chemical properties of various substances.
/* Name, DefiningValues, DefinedValues, Expression, DefiningUnit, DefinedUnit, CurveInterpolation */
#137 = IFCPROPERTYTABLEVALUE('TABLE', $, (IFCLABEL('Property1'),IFCLABEL('Property2')), (IFCTEXT('Value1'),IFCTEXT('Value2')), $, $, $, $);
Value types
Understand now that there are various types of properties, and these properties are combined into sets with which each object is associated through the ifcRelDefinesByProperties relationship.
We now move on to describing the data types, which are an integral part of each property. We distinguish three main groups of values: IfcSimpleValue, IfcMeasureValue, and IfcDerivedMeasureValue.
However, in this article, I will focus on the first group
We distinguish the following data types (IfcSimpleValue, IFC 4×3):
- IfcInteger:
- Definition: Data type representing integers without decimal places.
- Example: Can be used to specify the number of floors in a building.
- IfcReal:
- Definition: Data type representing real numbers, allowing for decimal places.
- Example: Used to specify precise dimensions of construction elements, such as wall lengths.
- IfcBoolean:
- Definition: Data type representing logical values, such as true/false.
- Example: Can be used to determine a state, for instance, whether doors are closed (true) or open (false).
- IfcLogical:
- Definition: Data type representing logical values, similar to IfcBoolean.
- Example: Applied to represent logical conditions in project specifications, for example, whether a material is fire-resistant (true) or not (false).
- IfcIdentifier:
- Definition: Data type representing character strings used for identification purposes.
- Example: Can be used to assign unique identifiers to individual construction elements.
- IfcLabel:
- Definition: Data type representing character strings used for naming purposes.
- Example: Used to give readable names to elements, for example, “Main Wall.”
- IfcText:
- Definition: Data type representing character strings used for descriptive purposes.
- Example: Used to provide additional descriptive information about a specific building element.
- IfcDateTime:
- Definition: Data type representing date and time.
- Example: Used to determine the moment in time when a specific construction measurement was taken.
- IfcDate:
- Definition: Data type representing date information.
- Example: Can be used to specify the start date of the construction of a particular object.
- IfcTime:
- Definition: Data type representing time information.
- Example: Used to determine the duration of a specific construction phase, for instance, the time required to complete foundations.
- IfcDuration:
- Definition: Data type representing a period of time or a time interval.
- Example: Applied to specify the duration of the entire construction project.
- IfcTimeStamp:
- Definition: Data type representing a point in time, counted in seconds since 1970.
- Example: Can be used to represent the date and time of the last update to the 3D model.
- IfcURIReference:
- Definition: Data type representing a unique character string identifying a logical or physical resource used in internet technologies.
- Example: Used for referencing external materials, such as online-stored technical specifications.
Selection of Properties and Value Types
The diversity of property types and data in the BIM environment is undeniable. Nevertheless, in practice, only a selected portion of this rich range is utilized. Additionally, certain types of properties encounter difficulties due to a lack of support from IFC browsers, effectively limiting their practical application. Examples of properties that IFC browsers struggle with include IfcPropertyBoundedValue and IfcPropertyTableValue.
Undoubtedly, the king among properties is ifcPropertySingleValue. Its implementation simplicity and support from all IFC-working tools make it the foundation for effective work in both creating and processing BIM models.
A similar situation occurs with data types. Not all are widely used, and the most entrenched ones are the basic ones present in the IFC 2×3 standard. We are referring to ifcInteger, ifcReal, ifcLabel, ifcText, and ifcBoolean. By using these fundamental data types, we can be confident that our information will be correctly interpreted by various tools.
Responding to the question posed at the beginning of the article regarding how to record our BIM information using the IFC standard, I am convinced that this mentioned combination not only ensures the compliance of our data with the standard but also guarantees easy access and readability in any tool supporting the IFC format.
How to add properties to an object?
Moving on to the practical part of the article, I will now present a simple way to add information to a model without the need for expensive programs or programming languages. This is especially useful when we want to add a small number of properties to a specific object, such as ifcBuildingElementProxy, or when we want to complement the set of properties for spatial objects, such as ifcRoad, ifcSite, or ifcRailway.
As we learned from the previous part of the article, to connect an object with properties, the property must be part of a set, which in turn must be associated with the object through a relationship.
Let’s start by specifying what properties we want to add to our project and what values they represent. In this case, I will use a set of properties consisting of:
- Author: Marcin Pszczółka (String)
- Blog name: BIMCORNER (String)
- Title of article: Properties in IFC (String)
- Number of article: 201 (Number)
Having these properties, we need to create a property set called “Common.” This set must have a unique ID, a reference to the properties (#112, #113, #114, #115), and a reference to the relationship. The property set is located in line #111 (STEP ID).
To connect the object with the property set, we will use the ifcRelDefinesProperties relationship, which in our case is in line #110 (STEP ID).
Next, we locate the object to which we want to assign properties. In my case, the relevant object is in line #109 (STEP ID).
You can see that by understanding the basic principles, we can easily connect these elements together.
Below is a full example illustrating in detail how to add information to an object.
/* GlobalId, OwnerHistory, Name, Description, ObjectType, ObjectPlacement, Representation, Tag, PredefinedType */
#109 = IFCBUILDINGELEMENTPROXY('1M06J4V4v2wOkLDqTQEOYI', #6, 'TopSurface', $, 'PROXYOBJECT', #20, #122, $, 'USERDEFINED');
/* GlobalId, OwnerHistory, Name, Description, RelatedObjects, RelatingPropertyDefinition */
#110 = IFCRELDEFINESBYPROPERTIES('0rqbV$QVbEXuK__P05wmBy', #6, $, $, (#109), #111);
/* GlobalId, OwnerHistory, Name, Description, HasProperties */
#111 = IFCPROPERTYSET('3oOx18zQXElPN3IlOR6gau', #6, 'Common', $, (#112, #113, #114, #115));
/* Name, Specification, NominalValue, Unit */
#112 = IFCPROPERTYSINGLEVALUE('Blog name', $, IFCLABEL('BIMCORNER'), $);
#113 = IFCPROPERTYSINGLEVALUE('Author', $, IFCTEXT('Marcin Pszczolka'), $);
#114 = IFCPROPERTYSINGLEVALUE('Title of article', $, IFCTEXT('Properties in IFC'), $);
#115 = IFCPROPERTYSINGLEVALUE('Number of article', $, IFCREAL('201'), $);
Summary
As you could read above, in this article, I deeply analyzed properties in the IFC standard for BIM projects.
So, in summary, in IFC, each object is assigned properties, and the standard offers various types, such as ifcPropertySingleValue or ifcPropertyEnumeratedValue.
In practice, I recommend using ifcPropertySingleValue and basic data types, such as IfcInteger, IfcLabel or IfcText, due to their simplicity and support in IFC tools.
In conclusion, I hope this article provided a fresh perspective on properties in IFC, emphasizing the practical aspects of adding information to a BIM model.