Using more than IfcPropertySingleValue and creating new property sets and properties in IFC

Hi everybody,

The BIM specialists at our iC group (a mix of Austrians, Slovenes, Germans) have been trying to set up our IFC models in a way that they could include more than just IfcPropertySingleValue, like IfcPropertyTableValue and IfcPropertyBoundedValue. Currently we only use IfcPropertySingleValue since it supported by all the software we use (Revit, Civil3D, ArchiCAD…), but would like to expand this as it is actually meant to be used by IFC specifications.

If anybody has any pointers/experience with setting this up in any BIM modelling software, we would love to hear about it.

Relevant to this topic, but a bit tangent, is editing existing IFCs in other software (adding new property sets and properties in different types). This is also a possibility that we’re open about, so if anybody has some positive experiences with that, it would be very helpful.

We’re also looking into BlenderBIM and IfcOpenShell to edit existing IFCs if such a setup is not possible in our modelling software:

  • We do know that in BlenderBIM there is now an option to add a completely new Property set and in it to define new Properties. My current problem is that using this functionality crashes Blender every single time. I know it’s an open-source software in development, so I guess @Moult would probably know the solution to that.
  • We would also be perfectly fine with writing a Python script using IfcOpenShell to solve our issue, so if someone can point us in the right direction, it would be much appreciated. Up until now we’ve only been able to pull out all the products’ data (from properties) from an IFC file, adapt it to our needs and then push the new data back in, but we would like to also change the type of property and/or add additional properties in new property sets.

Thanks to everyone who contributes in any way!

@cesnik_jure I suspect the bug you’re referring to is IfcOpenShell crashes on Windows only when removing property set · Issue #1293 · IfcOpenShell/IfcOpenShell · GitHub - reported 16 days ago and fixed 24 hours after. There will be a new release coming today or tomorrow to fix a variety of bugs that emerged from the January release (alas, that is the side effect of doing a huge rewrite - introducing bugs!)

If you’d like to code it, this is a great starting point: IfcOpenShell code examples - Wiki.OSArch

Currently, the interface in the BlenderBIM Add-on only displays single values. However, I’d be happy to build support for viewing and editing table value and bounded value. It’s pretty straightforward. If this interests you, I can prioritise it in the development.

Thank you for the answer. I’ve already been looking into these code examples and they are of huge help!

Regarding the bug, removing an existing Pset works just fine, it’s the removing of a custom Pset that crashes Blender. But if that’s already fixed, I guess it doesn’t matter anymore.

Besides that bug I think adding new Psets and Properties is still not working correctly or at least I can’t find a solution for these issues:

  1. You can only create one “StringProperty” in a Pset. I believe having the possibility to create as many different properties as the user wants in any property type with any property name is quite crucial. If that could be prioritised in the development, it would be great.

  2. Once you define the new property set and the new property and confirm the new Pset, the Pset closes and you cannot open or edit it again. I have no idea why this is happening.

If you could send me the IFC file where removing a custom pset crashes Blender, that would be very helpful so I can fix it. Make sure you are testing it using it the latest release (there was a release a few days ago).

The BlenderBIM Add-on is a little special that it enforces the use of property set templates when editing properties. Enforcing this helps ensure that the quality of BIM data produced is of a high standard and is well documented. Most BIM applications don’t enforce this, which may lead to confusion.

When you see that “StringProperty”, that is merely an example of a custom property. You are able to add as many properties as you want with any name. To do this, use the “IFC Property Set Templates” panel in the scene properties. You can also load your own company standard by pasting your property set template file in blenderbim/bim/data/pset. That panel will allow you to import, create, and edit property set templates. Be sure to export it out to save your changes. Changes right now require a restart of Blender to reload the new templates.

(Note: the UI here is a bit confusing, I will improve it to make it less error prone)


The reason you cannot edit it again is because you do not have a corresponding property set template. Without a template definition, there is no way of guaranteeing the data types of the properties.

With a template defined, you can now manage your custom property sets with as many properties and even complex data types as you need.


I noticed a bug from your screenshot, which I’ve now fixed - which affects certain data types like IfcCountMeasure.

I’ve updated BlenderBIM to v0.0.210221 and deleting a custom Pset now works without crashing in Windows. Thank you for dealing with that bug!

Using property set templates makes a lot of sense and I didn’t even know BlenderBIM has them included. Must have missed them when going over all the functions… Following your steps I was able to create a Pset_Custom template:
Pset_Custom.ifc (1.3 KB)

Restarted BlenderBIM and tried appending this new property set to an element and I see it and can append Pset_test to it, change values, save it, export it to IFC and check it in Navisworks. In short: it works!!!

I do have some recommendations about the workflow:

  • When you append the Pset and try to expand it, it seems as if it’s empty since no properties or values are shown. This is a bit misleading as the values are actually Null, but the user has to click Edit to see that. If all the properties were shown from the start and their value would be “Null” or “None” or “N/A” it would give the user a better visual feedback, what’s already filled out and what’s still Null.
  • For IfcText (possibly also IfcLabel) you can turn off Null, but if you don’t input any text into the value, it doesn’t show in the Pset. In reality it should show the property and its value should be empty since this is how the user defined it (even if the user didn’t want to).
  • Is it possible to automatically turn off Null as soon as the user defines a value for any property?
  • Is it OK that the user can create multiple Psets with the same name and same attributes? I understand that from a technical perspective, that is not an issue as it gets a different ID, I’m just thinking out loud, if it makes practical sense.

I realize these are mostly avoidable by user’s proper handling, but I do believe that making things user friendly is one of the BlenderBIM project and would draw more people into using the plug-in.

Another point I’ve stumbled upon is editing the existing Psets and their attributes. When you edit the values, set them to Null and confirm the change, the properties set to Null are simply deleted from Pset and you can’t go back and fill with a different (of the same) value again. It’s even more confusing it you want to edit an existing Pset and some of the empty properties have “None” written even though the value is set to Null, but when you edit it and put it back to Null, the property vanishes. Is this the intended reaction or should it be different?

Thank you for your feedback! It is incredibly valuable. You might’ve noticed that the UI in creating pset template definitions was a little clunky and actually expects you to do things in a certain order, and if not, the user can accidentally quite easily create extra psets without meaning to. I’ve now rebuilt the pset template UI to be more consistent with the rest of the add-on, and it should now be more foolproof. This will be available in the next release.

Regarding your workflow recommendations:

  1. Agree it is misleading, I will fix this. However, disagree about showing all properties. On large projects, this can lead to very, very long lists of properties where only some are relevant. Maybe as a user toggle? I’ll consider it.
  2. Hesitant about this one, as many BIM authoring programs don’t fill out null correctly and auto generate lots of properties with empty strings - which is really garbage data. This is striking the balance between “how the user defined it” and “the authoring app didn’t provide enough control”.
  3. Agree. Will fix.
  4. It is invalid, even from a technical perspective from memory, I vaguely remember IFC having a rule disallowing this. Will fix.
  5. Yeah if you change an existing Pset that is a non-standard pset, without having a template definition, it won’t know what is available to create new properties, and so as a result doesn’t allow you to do anything. Very strict behaviour and was the inteded reaction - but too strict perhaps, in a world where most authoring apps don’t support template definitions. Will fix to provide a better user experience.

You’re welcome. Actually it should be all of us thanking you for all these major development pushes.

Yes, I’ve noticed that creating these templates is a bit clunky, but it’s manageable. I’ll test it in the new version to see what improvements were made and send you my feedback.

To reply to all the points:

  1. A user toggle might solve the problems for all who want a “clean” user experience and also allow a more visual feedback regarding the “nitty gritty” details with None/Null values exposed.
  2. I know, Null is handled horribly by most of BIM authoring tools and it’s a major pain that us designers have to deal with. But there might be a use case, where leaving the field empty instead of Null is the correct way to go. In any case this would be mostly resolved with the user toggle option in point 1.
  3. OK, thanks.
  4. Hmmm, interesting, I don’t remember such a rule for IFC anywhere, but I do know that such “Pset multiples” can cause major problems when checking the IFC models regarding Pset selections in filters.
  5. I understand the issue and I agree that such strict behaviour might actually be OK if it were supplemented by options to create new templates based on existing Psets for elements. This makes it possible for the user to create new templates on the fly and then use them accordingly while also keeping the structure even if they Null-ify the value. Just thinking out loud here.

One more question while we’re on the subject. I’m quite new to IFC for Sverchok and haven’t really tried it out properly, but is there a possibility to fill the property values based on something with existing nodes?

@cesnik_jure regarding (4), see here under the express definition and the IfcUniqueDefinitionNames function.

IfcSverchok is a very experimental thing. I personally haven’t used it for anything practical. If you, or you know someone who is more familiar with the whole visual programming paradigm are willing to push it forward and can give clear directions on what needs to be built with examples of how it should work, happy to build it. I have half a mind to look at GeometryGym’s implementation in Grasshopper and shamelessly copy its behaviour in a Blender environment. Unless @jonm has a serious objection to that :slight_smile:

@cesnik_jure sorry for the delay, been swamped with work. Fixed issue 1 and issue 2. I haven’t gotten around to the remainder yet.

@cesnik_jure fixed issue 3 and issue 4. I’ll hold off indefinitely for issue 5 until I’m more convinced of a good clean way to address this. Should we generate a template? Should we let people go rogue without templates? What if someone wants to add a brand new pset - should we extract and derive all potentially used psets from the file? How does one determine applicability? Too many questions that I don’t have the answers to right now until I use it more in daily scenarios.

No worries about the delay. I wasn’t even expecting a fix this fast! Will check on the fixes and play around a bit more with pests and properties and report the findings back to you.

I agree that there is not clean-cut solution for issue 5 and that the concept needs to be developed first based on user experience. Would a toggle button for this

I’m still getting around to evens tart testing and using Sverchok as I’m currently taking a more deep dive into IfcOpenShell, but if I wade more deeply into it, I’ll try and connect it to properties in BlenderBIM.