BlenderBIM Add-on v0.0.220130 has been released with 252 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: https://blenderbim.org/
It’s been 3 months since the last release. Unfortunately, development had been put intermittently on hold due to various factors, including presentations being prepared for the Boao Forum for Asia ISTIF conference, FOSDEM 2022, and the 1-month online course on OpenBIM and Python programming by E-Zigurat. In addition, there was a one month break from development during the holiday period. It’s a marathon, not a sprint! Happy 2022, and we’re back!
Let’s get into the details.
Optimisations to authoring and geometry caching
A huge kudos to the exceptional optimisation work by Thomas Krijnen. Especially when modifying large files, expect operations to be in the scale of 100x faster, especially when dealing with proprietary BIM exports. Bulk movement checks are a minimum of 5 seconds faster. Importing files with booleans can be 2x to 3x faster. New performance logging in the core means that optimising is far from over.
A new geometry cache is now implemented, so reopening the same project will be much faster.
Increased stability
Native authoring stability was a huge priority for this release. An additional 450 tests were written since the last release, and 76 bugs were fixed. This is the return on investment in the new testable code architecture which was revealed in the previous release.
Brickschema integration
Brickschema is a way of describing system topologies for building management systems (BMS). When we talk about digital twins and clear away the marketing buzzwords, we’re really talking about things like Brickschema and live building sensor data that Brickschema can reference. The BlenderBIM Add-on is the first in the industry to start providing a graphical Brickschema authoring environment that integrates with IFC.
It is now possible to create a 2-way link between IFC BIM models and Brickschema BMS models. This is possible due to new support for managing IFC libraries. Brickschema authoring is still very new, but it’s ready for basic testing!
New bulk property editor
In our quest to help clean OpenBIM data in the industry, an incredibly suite of bulk property editing tools are now available by developer Vukas Pajic. Includes bulk renaming, data type changing, removal, and adding properties.
Chipping away at drawing generation and MEP support
Drawing generation is a huge task that still isn’t ready for user testing, but all the same work has been done. Including improved section cutting booleans, geometry caching, fixing “the torus problem” for steel sections, new 2D elements in the demo library, paper scale annotations in the viewport, performance testing, native IFC roundtripping for annotations, associating objects for smart annotations, annotation variables, drawing sheets, and improved UI.
Also … more rabbits!
MEP is one of the areas not really supported by the BlenderBIM Add-on but that is now changing. Support is now added for different types of building systems, selecting different types of systems, and displaying distribution ports.
Better docs and building for developers
A number of fixes to the build system makes life easier for developers on different environments to build IfcOpenShell thanks to Thomas Krijnen. Also really exciting is the new super secret demo module tutorial and improved developer guide for new developers who want to learn how to build your own BIM application on Blender and extend the BlenderBIM Add-on.
So much more
Other notable improvements include new UI grouping, IFC to P6 XML export support thanks to developer myoualid, viewing IFC metadata prior to loading with one-click IFC4 file upgrades thanks to developer Gorgious56. Blender 3.0 is now officially supported. In addition, new support for parsing EXPRESS schemas in the interface has been added, in preparation to support IFC4X3. The testing process for IFC4X3 support has begun, with the hundreds of tests in the suite being redirected to check IFC4X3 support, with very promising initial results.
A huge thanks to the growing volume of new contributors who are joining the team and changing the industry. You can too!
All changes
New features:
- IFC element names no longer treat the Blender name suffix as significant
- Object names now guard against duplicate IFC prefixes when assigning.
- All element’s spatial containment collections are now synced when assigning a class.
- Structural items in the collection hierarchy are now auto synced.
- Remove legacy unassign class feature in favour of just deleting objects. Thanks theoryshaw!
-
#1692 get_info_2() logical now supported Thanks Thomas Krijnen!
- You can now specify a target view when creating a new drawing. See #1153.
- Drawing collection hierarchy is now auto fixed if shuffled around manually. See #1153.
- Drawings list now reads data from IFC, not Blender. See #1153.
- Removing sheets now works in IFC. See #1153.
- You can now create drawing sheets in IFC. See #1153.
- You can now show and hide distribution ports of an element.
- New diagrams on the developer guide.
- Finish building minimum viable product of the IFC2P6 converter. Thanks myoualid!
- Fix #1514. You can now customise the default names of occurrences create from a type.
- New software architecture section in the developer guide.
- New demo module to teach developers how to hack on the BlenderBIM Add-on.
- Updates to space boundary geometry now auto updates on export.
- IfcCSV now loads the selector by default so its much more fun to use a lib.
- You can now remove bricks from a Brickschema model.
- New utility function for getting ports of an element
- Implement assign and unassign ports in IfcOpenShell API
- Dynamically update section shader backface color (#2000) Thanks Gorgious56!
- Nodes are now offset nicely for cutaway shader (#2000) Thanks Gorgious56!
- Smart annotation variables for drawings now reimplemented. See #1153.
-
#1993 vs2022 hdf5 Thanks aothms!
- Editing task times no longer tries to be clever with actual dates because you know what you’re doing.
- Fix #1576. Managing IfcSystem subtypes is now possible.
-
#1993 msvc 2022 config Thanks Thomas Krijnen!
- Nicer looking gantt charts and make it easier to print to PDF.
- Code licensing clarifications. See #1082.
- Fix #1908. Extracting elements using IfcPatch now includes all properties.
- Fix #1962. You can now easily append product assets using the API.
- You can now reset and restore your API owner settings.
- Header data previews for IFCZIP are now supported as well.
- Fix #1956. One-button upgrade from IFC2X3 to IFC4.
- Minor improvement to the sequence UI to always allow you to cancel editing mode.
- ADD_COMMIT_SHA in build scripts Thanks Thomas Krijnen!
- You can now associate annotations with objects for smart annotations in IFC. See #1153.
- define the vector sass [0] as a std::vector<std::unique_ptr<ShapeAnalysis_Surface>> Thanks Benjamin Dahl!
- Remove broken and obsolete Blender clasher which is incompatible with the geom.tree broadphase approach.
- Improvements to 2D booleaning Thanks Thomas Krijnen!
- Implement adding plain bricks not based on IFC
- Support type-based class checking for converting IFC2X3 models to Brickschema
- The IFC Class panel now shows inherited predefined types
- New utility to get predefined type
- Show ifc specs in file selector (#1980) Thanks Gorgious56!
- UI Simplification with Panel Groups (#1979) Thanks Vukas Pajic!
- Implement auto and manual refresh of the Brick model navigator
- You can now create a new blank Brick project
- New debug feature to purge HDF5 cache in case the cache is corrupted.
- Implement human readable rdfs labels in Brickschema navigator
- Display IFC schema in file selector right hand side panel (#1978) Thanks Gorgious56!
- New utility to get IFC all elements that are relevant in Brickschema
- Basic implementation to bulk convert relevant IFC classes to a Brick model
- New IFC to Brick class mapping utility
- You can now select all system objects from the object panel for convenience.
- Optimise all editing API functions to be 100x faster when you’re dealing with proprietary BIM exports with loads of shared owner histories. See #1904 and #1905.
- Schema versions are no longer locked to IFC4 and 2X3. You can now load express schemas at run time.
- Purge obsolete IFC types mappings
- Install to system local root Thanks Thomas Krijnen!
- Fix: shift count negative or too big Thanks Thomas Krijnen!
-
#1960 BRepBuilderAPI_MakeFace on non-overlapping 2d subtraction Thanks Thomas Krijnen!
- Log performance aggregates as logger messages Thanks Thomas Krijnen!
- Logging statement for total file conversion Thanks Thomas Krijnen!
- Update template.py
main.schema_identifier
doesn’t exist Thanks Thomas Krijnen!
-
#1969 take uppercase in register_schema() Thanks Thomas Krijnen!
- build-deps.cmd typo 0.7.0 branch Thanks jakob-beetz!
- The IfcOpenShell API now supports automatic primitive casting for editing properties. See #1943.
- Primary measure type lists are now dynamically generated based on the schema.
- Write documentation to help developers get acquainted with testing
- fix umlauts not showing up correctly in dynamic enums #1941 (#1945) Thanks Vukas Pajic!
- Fix #1717 : Disable task editing if task was deleted as a result of deleting its parent (#1936) Thanks Gorgious56!
- Optimize logic for bigger number of tasks (#1936) Thanks Gorgious56!
- New bulk property editor (#1896) Thanks Vukas Pajic!
- Updated README.md for IfcOpenShell build instructions Thanks ssg! Thanks garylzimmer!
- BlenderBIM Feature - Filter By Building Storey Thanks bosonprojets!
- Good news everyone! Option to process wall opening subtractions in 2D. Thanks Thomas Krijnen!
- Small changes to iterator settings Thanks Thomas Krijnen!
- changes in ifc2ca standard case Thanks Jesusbill!
- ifc2ca - possibility to exclude zero length springs in point connections Thanks Jesusbill!
- changes in ifc2ca bonded case Thanks Jesusbill!
- Optimise operations on large files. #1807 method mapping proposal Thanks Thomas Krijnen!
- minor changes in ifc2ca scripts Thanks Jesusbill!
- OCC7.5 to OCC7.6 support → deprecated Poly_Triangulation Nodes() Thanks fichter!
- Switch to libocct for yml workflows Thanks Thomas Krijnen!
- Prevent searching for invalid IDs in IFC debugger (#1924) Thanks Gorgious56!
- New descriptions, labels, and debug output in IFC debugger (#1924) Thanks Gorgious56!
- Debug op to select highest meshes by polygon percentile (#1924) Thanks Gorgious56!
- bimtester: if lang argument is not set use feature file lang for output messages, improves #1910 Thanks Bernd Hahnebach!
- bimtester: update log and smartview, they still are deactivated by default, fixes #1892 Thanks Bernd Hahnebach!
- You can now add feed relationships in a Brick model from IFC elements
- From an IFC element, you can now add a new Brick element in a Brick model
- Assigning a brick reference now adds a 2-way IFC reference in the Brick model
- Little utility to help printing out maintainable classes and other classes in contractual documentation.
- bimtester: improved language support #1928 Thanks Bernd Hahnebach!
- bimstester: feature cleanup and more german support Thanks Bernd Hahnebach!
- get_total_inverses now efficiently gets the full number of references to an entity to optimise editing. See #1904.
- bimtester: gui, initialize ifc file and feature file text Thanks Bernd Hahnebach!
- Allow to assign IfcRelSpaceBoundary to an object (#1902) Thanks Cyril Waechter!
- Allow to manually update boundary connection geometry (#1899) Thanks Cyril Waechter!
- bimtester: fix gui, works with feature file now instead of feature directory Thanks Bernd Hahnebach!
- Converting brickschema projects to IFC libraries now works on IFC2X3
- Assigning library references now works on IFC2X3.
- Editing object placements is now 3x faster on large files. See #1807.
-
#1785 HdfSerializer read-only option Thanks aothms!
- Added information for debugging level parameter Thanks Felipe Mesquita!
-
#1895 don’t signal element ready when result is empty Thanks Thomas Krijnen!
- Fix #1889. Allow explicitly overriding data types when editing psets.
-
#1153 draw.py timing Thanks Thomas Krijnen!
-
#1153 update draw.py with two new options Thanks Thomas Krijnen!
-
#1153 option to preprocess shape into sets of profile edges Thanks Thomas Krijnen!
-
#1885 consider schema type when copying attribute values Thanks Thomas Krijnen!
- bimtester: Fix numerous language issues with french, italian, and dutch Thanks Bernd Hahnebach!
- (slightly) Optimise batch removing objects Thanks Gorgious!
- More slow progress in getting annotations round-tripping. See #1153.
- You can now associate IFC elements with Brick elements and navigate to them
- You can now assign and unassign library references
- New UI to add / edit / remove library information and references.
- Raise default section height from storey from 1.0 to 1.2 Thanks Bruno Postle!
- A whole bunch of new usecases for managing IFC library information and references
- New utility to get layers of an element. See #1869.
- Rebuild text annotations to have leaders in the same object and use text literals. See #1153.
- Viewport annotation decorations now scale based on paper size. See #1153.
- Drawing annotations now are stored in IFC using ObjectType conventions. See #1153.
- Reimplement roundtrip of most annotation elements for drawings. See #1153.
- New experimental OBJ2IFC script
- tree.protrusion_distances() Thanks Thomas Krijnen!
- Purge old 2D element drawing system, so we don’t get double the symbols on drawings.
- Swapping a Blender material for another is now auto synchronised.
- Optimise object placement change checking, so medium sized project exports are 5 seconds faster at minimum, but can be much higher since false positives are culled.
- Load CJIO on execution instead of initialisation Thanks Laurens Oostwegel!
- show property description in pset_template ui Thanks Vukas Pajic!
- Geometry caching is now enabled for model importing
- Changes are now synchronised prior to switching representations.
- [BlenderBIM] Tools to load IfcRelSpaceBoundary (#1864) Thanks Cyril Waechter!
- Scale changes are now auto synchronised on export.
- Improve support for Powerproject 14.0 import (#1865) Thanks ecke101!
- Integrate ifccityjson in BlenderBIM (#1859) Thanks Laurens Oostwegel!
- Implement cache updating for drawings. See #1153.
- Resolve #1836. Scaling in Blender is now auto resolved when representations are updated.
- Purge old dumb door and dumb window tool to prevent confusing users
- Add annotation symbols for doors, windows, and bunny to the demo library
- New IfcOpenShell utility to get instances of an element type easily
-
#1785 omplete stored_settings / requested_settings check Thanks Thomas Krijnen!
- Consistent setting type Thanks Thomas Krijnen!
- Resolve #1860. Brickschema is now optional.
- Drawing module now is in sync with latest C++ upgrades. See #1153.
- Allow tree.select(BRepElement) Thanks Thomas Krijnen!
-
#1785 check settings in cache and upgrade to world coords Thanks Thomas Krijnen!
- Fix casts in XML serializer Thanks Thomas Krijnen!
- ifccityjson: it is now easier to extract one LOD Thanks Laurens Oostwegel!
- ifccityjson: prevent interior holes in faces as there is a bug in the geometry generation Thanks Laurens Oostwegel!
- New feature to select all objects in same container
- New feature to select the container of an object
- Resolve #1750. You can now save IFCs under a relative path to your Blend file.
- only call expensive wstring_convert() when necessary Thanks Thomas Krijnen!
-
#1785 geometry caching caching Thanks Thomas Krijnen!
- Resolve #1749. You can now save as another IFC filename.
- Rename some files with more sensical names Thanks Thomas Krijnen!
-
#1153 #1852 project points to form SVG HLR cut plane Thanks Thomas Krijnen!
-
#1153 evenodd SVG styling. Thanks Thomas Krijnen!
- IfcConvert : SEW_SHELLS on svg serializer Thanks Thomas Krijnen!
-
#1153 boolean subtraction on parts Thanks Thomas Krijnen!
- –cache and subtraction in draw.py Thanks Thomas Krijnen!
- Add schema caching to Brick schema loading.
- Implement new Brickschema project browser.
- Slightly more robust deletion tracking.
- ifccityjson: Fix bug dependency updated CJIO where cityjson vertices got transformed automatically Thanks Laurens Oostwegel!
-
#1153 another small hack to get boolean projection working more generally Thanks Thomas Krijnen!
-
#1850 Process extrusions of comp profiles seperately Thanks Thomas Krijnen!
-
#1743 don’t consider bbox in opening subtractions Thanks Thomas Krijnen!
-
#1785 geometry caching on multi threaded iterator Thanks Thomas Krijnen!
-
#1153 svg subtraction settings Thanks Thomas Krijnen!
-
#1785 quick identity check to keep trsf form at identity Thanks Thomas Krijnen!
- Add tutorial to ifccityjson Thanks Laurens Oostwegel!
New fixes:
- Fix bug where drawing objects could be added to the wrong context.
- Fix bug where editing then switching to the current representation crashes.
- Fix bug where syncing an object removed from the collection tree breaks.
- Fix #2002. Fix bug where sometimes shape IDs wouldn’t be pure integers.
- Fix #2001. Fix bug where you could not undo deletions.
- Fix #1998. Fix bug where colours don’t show if styling is applied to the mapped item instead of the actual representation item.
- Fix error when updating representation on object data with no BIMMeshProperties Thanks Gorgious!
- Fix bug where you couldn’t select properties with a dot in the name for IfcCSV
- Prevent error if last temporary section has been removed (#2000) Thanks Gorgious56!
- Fix shader glitch when user deletes last cutaway object (#2000) Thanks Gorgious56!
- Fix bug where zero durations were not allowed in task times.
- Fix #1995. Bug where section cutaways didn’t work in Blender 3.0.
- Fix bug where you could not add properties to projects themselves.
- Improve boolean reliability. #1948 clear tmp list Thanks Thomas Krijnen!
-
#1985 Fix bug with selecting objects via geometry tree. Consolidate and correct shell count checks in tree Thanks Thomas Krijnen!
- Fix propagation of kernel settings (affects multi threading) Thanks Thomas Krijnen!
- Fix #1934. Fix bug with improper nesting of subfolders when exporting IfcZip.
- Fix #1954. Fix bug where importing MSProject XMLs with no project names failed.
- Fix IfcCSV import bug.
- Fix #1989. Fix bug where you couldn’t export to IfcJSON, since it couldn’t be imported again.
- Fix bug where you could assign a product twice to a process.
- Fix #1931. Fix bug where duplicated type products should not share material associations.
- Fix bug where annotation decorations didn’t show correctly in Blender 3.0
- Fix #1925. Fix bug where nested collection deletions were not synchronised properly.
- Fix bug in BCF. Correct HeaderFile (#1942) Thanks molitoris!
- Boundary geom creation : fix math + small ui fix (#1938) Thanks Cyril Waechter!
- Fix bug where IfcPatch IFC4 migration could break on Revit files
- Improve boolean reliability significantly. Thanks Thomas Krijnen!
- Fix booleaning bug. #1914 only proceed with ‘face addition check’ when first operand contains open shells Thanks Thomas Krijnen!
- Fix #1692 memory leak in get_info_2() Thanks Thomas Krijnen!
- Fix #1917. Fix warning where the relating type classes data couldn’t be accessed.
- See #1917. Refactor and fix warning message when you haven’t got any contexts in a project yet.
- Fix #1923. Fix bug where creating a new structural analysis model broke.
- Fix #1913. Fix bug where filtering by decomposition didn’t work on IFC2X3.
- Fix #1921. Document issue with installing on outdated Ubuntu distributions.
- Prevent error if id has no geom representation in IFC debugger (#1924) Thanks Gorgious56!
- Fix bug where libraries didn’t work in IFC2X3
- Fix #1816. Fix bug where cameras weren’t allowed to be optional in BCF 2.1.
- Fix bug with missing system arrows in visualising offset models and sink/source mixed flows.
- bimtester: do not break bimtester if translation files are missing, fixes #1910 Thanks Bernd Hahnebach!
- Fix bug where Blender name wouldn’t match IFC Name when reassigning class. See #1902.
- Fix segfault thanks to aothms.
- Fix percentage loading implementation with the new more accurate progress number.
- Prevent crash on export for obj with no material (#1903) Thanks Cyril Waechter!
- Fix bug where selecting type occurrences did not work
- Fix bug where updating owner history may not work if you were using it outside Blender.
- Fix model segfault. #1897 handle nesting in get_decomposing_entity_impl() Thanks Thomas Krijnen!
- Fix bug in FM utility for grabbing classes from the draft FMHEM standard
- Fix bug in convert length unit recipe where IFC2X3 ownership history fails.
- Fix #1886. Fix getting layers for IFC2X3 files.
- Fix bug where subelement coordinates were incorrectly calculated in non SI units
- Fix bug where you couldn’t copy quantities to other elements
- Fix bug where unlinking a style that was invalidly linked didn’t work.
- Fix minor error in console when changing drawings. See #1153.
- Fix bug where annotative grids did not sync.
- Fix #1857. Fix bug where deleting from the outliner was not tracked.
- Fix #1872. Bug where duplicating an object didn’t duplicate its styles.
- Fix bug where style colours were not auto synchronised.
- Fix bug #1854. Materials are now auto replaced in Blender when you assign a new IFC material.
- Fix bug where an added default material was not linked and auto synced.
- Fix bug in IFC2X3 where updating style colours didn’t work.
- Fix bug where diffuse colour was not correctly extracted from nodes
- Fix #1856. Bug where you lost your existing container or aggregation when you added a new aggregation assembly.
- Fix #1764. Bug where OpenLCA UI would freeze if it couldn’t connect to OpenLCA.
- Fix #1855. Bug where authoring type dropdowns didn’t refresh.
- Fix bug where removing a representation from a typed instance didn’t remove all data users.
- Fix representation where removing a representation left objects with an empty mesh. Now a proper empty is used.
- Fix bug where non-geometric objects caused the representations UI to not display
- Fix bug where assigning a type did not use existing representation data in the scene if the context had changed
- Fix bug where adding a representation to a type instance didn’t share meshes
- Fix bug where you couldn’t add a plan representation to something with no context identifier
- Fix interface bug where representations assigned directly to a context aren’t shown
- Fix bug where existing meshes were not deleted when switching representations.
- Fix bug where adding a representation to type instances didn’t ensure it was added to a geometric type
- Fix bug where pie update container didn’t work.
- Fix bug where copying an instance did not auto link the meshes.