BlenderBIM - OpenBIM authoring with Blender

BlenderBIM Add-on v0.0.240602 has been released with 561 new features and fixes. It’s our built environment, help support the BlenderBIM Add-on: 100% free and open source software that lets you author and document BIM data fully to ISO standards. It’s built by the AEC community, for the AEC community. Get it today:

This is a release with lots of small changes that add up.

OK. Deep breath. Get ready. Go!

The documentation shown below is from the OpeningDesign Highland Haven project licensed under CC BY-SA 4.0. Check out OpeningDesign today! They do all their architectural work open source!

Drawing improvements

It’s now much faster to print multiple drawings, as drawing synchronisation is now done only once. When drawings fail to create, there is now a drawing debug operator to help users and developers discover what the problem is.

Default settings are now available in case you delete them from a drawing’s pset. Drawing decorators, such as smart text annotations, are now correctly refreshed after any edit in the UI. Smart text also responds correctly to actual line breaks now.

The underlay cache is now working as intended instead of being ignored.

There were many unnecessary operations happening during drawing loads, saves, or property edits. These were mostly wasteful and have been removed.

Any missing sheets will now be regenerated when needed, just like missing drawings.

It is now almost 3x faster to save models when syncing collections. Activating and switching drawing is now about twice as fast.

Continued work on style and material consolidation

The styles UI now works in a more similar way to the materials and profiles UI. All of the panels which used to exist in the Blender Material’s tab have now been migrated to the IFC Geometry and Materials tab.

It’s now nicer to expand and contract materials in bulk in the material manager without losing your position.

Material total now counts a particular class, not all material classes. You can now add a description and category when creating a new material. You can now add category-specific material psets (such as for concrete or steel). You can now add manual classification references for materials. There is now support for copying material sets and lists, and reuses presentation styles.

Quantity take-off completely redesigned with IfcOpenShell-based calculations

The quantity take-off procedure has been redesigned. Previously, there were multiple quantity take-off utilities that were spread around the interface and all used different quantification methods. These have now been consolidated into the Ifc5D tool and can be run agnostic of Blender. This is critical for those who run automated server model processing.

When doing QTO, it is now possible to choose between different calculation engines. Each calculation engine offers different capabilities with pros and cons with respect to speed, accuracy, and capability. Users can also use custom queries to filter the type of object, and map quantity requirements to calculator functions. This also means that automated QTO can be done for quantities that are not part of the Qto base quantities standard, such as in IFC2X3, or if you have custom QTO requirements. Powerusers can code their own calculation engine.

The old guess quantity feature has been deprecated.

Quantification panel interfaces have been redesigned and are now all in the Costing and Scheduling tab. It should now be easier to use. All of the remaining panels in the N toolbox have already been relocated into their relevant areas in the IFC tabs. There should now be almost no custom panel interface outside this area.

The Blender calculation engine’s flooring height and ceiling height are now more accurate.

Packaging improvements

PyPI now consistently releases between Python 3.9 and 3.12. We now also ship the correct Python version for MaxOS.

The bSDD library, IfcPatch, IfcCSV, and IfcClash is now distributed on PyPI. IfcOpenShell and IfcTester’s PyPI dependencies have been fixed.

Packaging has been cleaned up somewhat for the BlenderBIM Add-on, with version locks removed for a lot of dependencies and versions bumped and fetched using pip. We also now ship a Python 3.12 variant of the BlenderBIM Add-on.

Improved error reporting

All IFC operations now have improved error reporting. When an error occurs, the system will let you know and show that your file is potentially in an unstable state. You can continue to work with your file, but it is generally not recommended. It also stores the last 10 actions you performed, as well as a journal of detailed logs that occured during those actions. It will direct you to an online troubleshooting page which includes how to ask for help, how to debug it further, and how to copy paste the debug logs when filing a bug report. This will make sure that developers will get all the information they need (ideally, sometimes they still need your model) to fix the issue.

If an error occurs during installation, it’s smart enough to show your Python version, Blender version, and platform. It’ll figure out the correct installation link for you to reinstall (some users get confused between the many versions we have available).

IfcOpenShell API design upgrades

This is mostly for developers, but it is significant enough to highlight in these release notes.

The API previously functioned one elements one at a time. The API now supports batch commands, so this means that there will be an overall small speed up everywhere. For those who are writing scripts that manipulate IFCs, this can be the difference between a script taking hours and a script taking seconds.

The API now has a much cleaner set of static functions you can call directly. For those using the command, this is still fully compatible, and there have been some small optimisations done. However, it is now recommended to use the static functions where possible. For example, instead of"root.create_entity", model, ifc_class="IfcWall"), you can call ifcopenshell.api.root.create_entity(model, ifc_class="IfcWall"). This also means that the developer experience for those using IfcOpenShell in interactive environments such as the Blender Python Console, Jupyter Notebooks, IPython, or those with Intellisense or similar LSP support in their code editor will be much nicer.

The API documentation also got flattened and easier to browse, with a lot more introductory docs written and improved cross referencing of modules, functions, and methods with improved visual styling.

The module initialisation conventions have also been made more consistent, with all modules requiring explicit importing and dependencies across modules removed, such as the util module requiring the api. Modules which require optional dependencies also now give clear error messages if they are unavailable.

The element utility has had a large number of small optimisations done. These will all add up, especially when running scripts. There are also a large number of new utility functions, such as getting the groups of an element, or traversing void and fill relationships, and parents up the spatial heirarchy.

Now that we are dropping support for older Python versions, a huge amount of type hinting has been added throughout the codebase.

IFC4 and IFC2X3 test suites have been consolidated, so there are significantly more tests and this helps catch and fix all sorts of invalid “default” behaviour that the API might do.

Documentation has continued to be improved throughout - too much to enumerate but expect new code examples, function docstrings, and explanation everywhere. This includes examples of how to use filters for IfcConvert and how to use IfcTester.

Custom properties

This sounds like a strange one, but we now support adding arbitrary custom properties and quantities without the need to first create a property set template. This is not good practice (e.g. data types are autodetected) but still convenient when you want to quickly throw in some data or for educational purposes. We still highly recommend everybody to use templates.

Google Summer of Code 2024

This will be the 4th year that IfcOpenShell / the BlenderBIM Add-on will be participating in the GSoC programme! This year, we have three students with winning proposals. Please welcome Kshitij Roodkee, who will be working on an IfcTester web interface to author IDSes with Vukas. Please also welcome Chirag Singh, who will be working on integrating IFC data with Radiance light simulation. Please also welcome Ziad Ibrahim, who will be working on building a web-based UI that can be run alongside the Blender interface for things like scheduling, gantt charts, and BCF issue management.

Coding has just begun, so expect interesting things happening in the coming updates!

iNEST innovation grant

Development isn’t just coding, of course! One significant event is that the BlenderBim Add-on and IfcOpenShell will be part of a research program funded by Italian consortium iNEST (Interconnected Nord-Est Innovation Ecosystem) featuring the participation of Italian companies Cadline Software Srl, 888 Software Products Srl, 3 Face Engineering Srl, Donadello & Partners Stp Srl.

This will likely help with project funding and may result in some interesting future features.

We’re hiring again!

Thanks to all our financial donors the time is right to hire another (part-time) developer to join the party! If you know C++ and Python and are passionate about open source software, please see the job advertisement and get in touch!

Ifc5D improvements

Many thanks to those testing and using cost related features! This really helps us fix issues. Here’s a bunch of improvements:

  • The ordering of cost items (via the nesting relationship) is now maintained.
  • We now distinguish between a quantity of zero vs a null quantity (which implies that the cost value is the total cost)
  • There are now restrictions to prevent mixing quantity types per cost item.
  • Improved UX when assigning cost items to product types.
  • Improve UI to indicate that exporting cost schedules expects a directory
  • Fix bug when removing cost schedule columns
  • Disable adding cost schedule columns without a name
  • Different cost schedules can have different custom columns
  • Fix bug exporting a schedule of rates when a cost item has no quantities but controls objects with quantities.

IFC2X3 improvements

  • Assigning nested objects now works in IFC2X3
  • Fix bug in IFC2X3 where sheet has no description
  • Fix invalid shapes in IFC2X3 where profiles have a non-optional position and need 2D coordinates
  • Auto create a default user and organisation if not specified in IFC2X3
  • Fix bug where some IFC2X3 files would fail to link
  • Fix bug when trying to trace outlines for a new representation in IFC2X3
  • Fix bug where removing document information didn’t work on IFC2X3
  • Fix bug where appending material assets didn’t work in IFC2X3
  • Fix bug to remove inventories of people in IFC2X3
  • Removing, copying, materials now handles IFC2X3 properties
  • Removing library references now supports IFC2X3

So much more

It’s hard to capture absolutely everything which has changed, but here are a few more stragglers.

  • Bug fixed when linking a model with no chunks
  • Blender UI panels are now consistently located in tabs depending on your workspace settings
  • There is now a default shading style if yours is missing
  • Fixed bug when adding a ceiling from a wall elevation
  • Linked models now include material data and CAD layers
  • Doc links have been updated to the latest documentation websites
  • Fix bug where random objects would get drawing psets unnecessarily
  • Fix possible infinite recursion bug when generating drawings
  • Fix bug where there were extra equal signs when loading saved queries
  • Linked models with no materials now default to the Blender default material
  • The “IFC4X3” shorthand now references the “IFC4X3 Add2” standard, the final standard
  • Don’t show scary error messages if trying to search with no query
  • New UI List in Sandbox panel to access, flip, remove, add, edit clipping planes
  • The CCI classification is now available as a preset
  • New help button next to search queries to help users find documentation
  • Add convenience link to launch type manager when no types exist.
  • Show invisible newlines and allow newline editing in attributes.
  • Fix fundamental bug where get_pset would return nothing or inherited props with a False value
  • Document how MacOS Steam users should still use Mac Intel
  • Fix bug where verbose mode broke when getting complex properties
  • Calculating schedule dates now handles time lags defined as a ratio
  • Fix IfcTester BCF exports
  • Clarify in the UI whether you are seeing type or occurrence properties
  • Indicate whether the predefined type is inherited
  • Disable editing predefined types on occurrences which inherit a predefined type
  • Fix bug where saved drawing filters didn’t load in the UI
  • Fix bug where creating new document references were invalid IFC
  • Fix bug where deleting grid axes weren’t handled properly
  • IfcTester can now export “Excel-safe” ODSes due to poor support for ODS in Excel
  • Improved error reporting when loading IfcSverchok
  • IfcSverchok builds are updated
  • Clipping planes can now be stored to a JSON file
  • You can now merge projects with different units
  • Add support for updating relative coordinates for adhering elements in IFC4X3
  • Fix bug so that spaces created with the spatial tool now have a coincident origin and zero elevation
  • Prompt for a name when creating an aggregate
  • More informative messages after running RegenerateGlobalIds
  • Fix bug if the user explicitly removes a Blender material linked to an IFC material or style
  • Consolidate debug buttons “convert to blender file” and “purge ifc links”
  • Fix bug trying to launch type manager in an empty project
  • Reload the current shading style after editing it
  • Fix bug when linking in a material which didn’t have an external location pointing to a .blend
  • Show preview of external shading style material when selecting from a .blend
  • Prevent switching representations in edit mode
  • Fix bug where saved filters with “not” operators wouldn’t load
  • Show success messages when saving / loading spreadsheets
  • New IfcTester report which just shows a summary spreadsheet view of requirements
  • The API now supports wildcard listeners
  • The API can now serialise API settings for detailed debug logs (mostly)
  • IfcFM has vanilla IFC names changed to reflect IFC naming jargon and fixed colours
  • Fix bug where autodetection of a false origin might fail
  • Removing products now also removes port connections
  • Fix bug where editing pset template enums left behind orphaned entities
  • Restrict annotation psets to their predefined type to prevent inapplicable psets
  • Drawing cache is now copied if the file is somehow locked or has a permission error
  • Users are now prevented from creating incompatible context-representation combinations
  • You can now create a new representation from external objects
  • Profiles is now an available keyword in the selector syntax
  • Fix bug when all spatial elements are deleted and the spatial manager is open
  • Accommodate invalid IFCs coming from Cadwork
  • Fix bug in BCF module due to xsdata dependency
  • Fix ridiculous bug where setting boolean attributes to false using the spreadsheet import set it to true instead
  • Users can now configure the font used to render viewport text
  • Schedules can now have custom CSS and configure their own font and font scaling parameters
  • Null properties in psets are now purged instead of left as null to prevent cruft build-up. Empty enums can now also be purged
  • When handling invalid duplicate psets, we now merge values instead of arbitrarily taking the first/last one
  • Optimisation to remove deep, especially when dealing with attempting to remove histories with lots of inverses
  • Show error if a user tries to apply an opening to a type
  • Fix bug where IfcTester fails to verify negative numbers
  • Fix small openings being generated for parametric doors / windows
  • Basic support added for including linked models when generating drawings
  • Fix bug when loading profiles with a non-mesh selected
  • Fix bug where changing class using a spreadsheet import might fail
  • Remove the incredibly annoying “do you want to save” popup when editing geometry
  • You can now drag and drop to load and link IFCs
  • Resource quantity types are now limited based on the type of resource.
  • IFC4X3 pset templates have been regenerated since the release
  • Fix bug where two materials sharing a style would break the Blender ↔ IFC link
  • Fix bug where you couldn’t change the aggregate of a locked spatial element
  • Users can now choose between a whole or a part when changing the aggregate parent
  • Support adding IfcQuantityCount quantities in IFC4X3
  • Fix bug where “not equals” filters didn’t work properly for locations or groups
  • Fix UI bug when editing multiple profile items in a material set
  • You can now format custom thousands and decimal separators in IfcCSV.

All changes

All changes can view the directly via the Git logs here:

Credits for this release (in order of commits via git shortlog -sn --since "2024-04-02"):

   304  Andrej730
   179  Dion Moult
    21  Ryan Schultz
     8  Massimo Fabbro
     7  Bruno Perdigão
     6  Bruno Postle
     6  Thomas Krijnen
     5  Gorgious56
     5  ppaawweeuu
     3  Gorgious
     2  Vukas Pajic
     1  Alper Kantarci
     1  Andrej
     1  Benoit DAMAY
     1  Dirk Olbrich
     1  E Shattow
     1  Hilko
     1  Kaare Hansen
     1  Kristof Semjen
     1  Kurt Battisti
     1  Manu Varkey
     1  Sigma Dimensions (Yass)
     1  dependabot[bot]
     1  jaymeandretta
     1  sebphi
     1  stefkeB

Donors since the last release:

Rhomberg Sersa Rail Group
Lawrence Giroux
Cyril Waechter BIM Insight
Matthew Fuller
Dion Moult
Sven Amiet
Jonny Knopp
Haritonov Alexander
Louis Trümpler
Frode Lund Tharaldsen
Dumitru Minciu
Smiljan Tukic
Omar Zerhouni
Leon ten Brinke
Kimmo Hentinen
Kevin Schnippkoweit
Henning Munzel
Giorgio Nocentini
Duarte Farrajota Ramos
Dmitriy Koptev
Benjamin Smith
Bedrossian Ádám
Abdelmalek HARRAG
Madars Siksna
14.4	Hjalti
Vinícius De Souza Lima
Tim McGinley
Stephen Cremin
Rafel Bayarre
Marcin Boguslawski
Gaurav Rampal
Fabian Emanuel Kitzberger
Dirk Olbrich
Dayo Ayadi
Dawid Fedko
Cordero Architecture
Christoph Mellüh
Bruno Perdigão
Ari Pikkarainen
Alexander Kleemann
Agents of Architecture
Marco Andrade
daniele rossi
Carlos Dias