Transparency vanished after editing an element and did not come back, e.g. the enable_editing_extrusion_profile -> direct_profile_edit -> edit_extrusion_profile round trip. Editing geometry replaces the object's data outright (Geometry.change_object_data does obj.data = data), so the material slots come back from IFC and the temporary transparent copies are dropped. Nothing notified this module, so the preview was lost until the toggle was cycled. Worse, the loss was permanent and destructive. bpy.data.materials.remove unlinks from every user, so deleting a temp material that had ridden onto the rebuilt mesh emptied the live slot -- stripping the element's material entirely, after which there was nothing left to make transparent. Each edit cycle claimed another one. - restore_transparency only undoes a slot that still holds the material it put there, and remaps any other remaining reference back to the original before deleting, so a temp material is never removed out from under a live slot. - A depsgraph_update_post handler re-applies after a rebuild. The OBJECT-mode check is inside the deferred timer, not at scheduling time: edit mode is entered in between, and syncing then found slots mid-flux. The same pass reworks this for real models, where a rule can match thousands of objects rather than the handful it was built against: - Temp materials are shared per (source material, amount) instead of copied per slot, so the datablock count is a handful rather than one per occurrence. Sharing is safe for user_remap because every user of a temp material had the same original, recorded on it as SOURCE_KEY. - sync_live_effects is incremental. Slots already carrying the right material are kept, only what is no longer wanted is undone, and only what is uncovered is applied. A steady-state re-sync now touches nothing, and it can no longer dismantle a preview it is unable to rebuild. - Staleness checks are scoped to the objects a depsgraph update actually touched, and the expensive probes are guarded so they are not evaluated when tracing is off. - Sync adopts orphans: a temp material left on a rebuilt mesh is traced back via SOURCE_KEY and re-registered, rather than silently baked into the saved file. Tracing is left in place behind DEBUG (currently on) since this needs further exercise on real models. NOTES.md documents the reload-survival design, the scale approach, and the confirmed limitation that elements with no material cannot be made transparent, because the effect works by copying an existing material. Smoke-tested headless on Blender 4.5.7: three objects sharing one source material produce exactly one temp material, and a stray reference is remapped rather than emptied. Generated with the assistance of an AI coding tool. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
IfcOpenShell
IfcOpenShell is an open source (LGPL) software library for working with Industry Foundation Classes (IFC). Complete parsing support is provided for IFC2x3 TC1, IFC4 Add2 TC1, IFC4x1, IFC4x2, and IFC4x3 Add2. Extensive geometric support is implemented for the IFC releases IFC2x3 TC1 and IFC4 Add2 TC1. Extending with support for arbitrary IFC schemas is possible at compile-time when using C++ and at run-time when using Python.
In addition to a C++ and Python API, IfcOpenShell comes with an ecosystem of tools, notably including IfcConvert (an application to convert IFC models to other formats), Bonsai (an add-on to Blender providing a graphical IFC authoring platform), and many other libraries, CLI apps, and more. Support is also provided for auxiliary standards such as BCF and IDS.
For more information, see:
Development is sponsored through your generous donations!
Contents
| Name | Description | License | Service |
|---|---|---|---|
| bcf | Library to read and write BCF-XML and query OpenCDE BCF-API modules | LGPL-3.0-or-later | |
| bonsai | Add-on to Blender providing a graphical native IFC authoring platform | GPL-3.0-or-later | |
| bsdd | Library to query the bSDD API | LGPL-3.0-or-later | |
| ifc2ca | Utility to convert IFC structural analysis models to Code_Aster | LGPL-3.0-or-later | |
| ifc4d | Convert to and from IFC and project management software | LGPL-3.0-or-later | |
| ifc5d | Report and optimise cost information from IFC | LGPL-3.0-or-later | |
| ifcbimtester | Wrapper for Gherkin based unit testing for IFC models | LGPL-3.0-or-later | |
| ifcblender | Historic Blender IFC import add-on | LGPL-3.0-or-later* | |
| ifccityjson | Convert CityJSON to IFC | LGPL-3.0-or-later | |
| ifcclash | Clash detection library and CLI app | LGPL-3.0-or-later | |
| ifcconvert | CLI app to convert IFC to many other formats | LGPL-3.0-or-later* | |
| ifccsv | Library and CLI app to export and import schedules from IFC | LGPL-3.0-or-later | |
| ifcdiff | Compare changes between IFC models | LGPL-3.0-or-later | |
| ifcedit | CLI wrapper for ifcopenshell.api IFC model mutation functions | LGPL-3.0-or-later | |
| ifcfm | Extract IFC data for FM handover requirements | LGPL-3.0-or-later | |
| ifcmax | Historic extension for IFC support in 3DS Max | LGPL-3.0-or-later* | |
| ifcmcp | MCP server for querying and editing IFC building models | LGPL-3.0-or-later | |
| ifcopenshell-python | Python library for IFC manipulation | LGPL-3.0-or-later* | |
| ifcpatch | Utility to run pre-packaged scripts to manipulate IFCs | LGPL-3.0-or-later | |
| ifcquery | CLI tool for querying and inspecting IFC building models | LGPL-3.0-or-later | |
| ifcsverchok | Blender Add-on for visual node programming with IFC | GPL-3.0-or-later | |
| ifctester | Library, CLI and webapp for IDS model auditing | LGPL-3.0-or-later |
The IfcOpenShell C++ codebase is split into multiple interal libraries:
| Name | Description | License |
|---|---|---|
| ifcgeom | Internal library for IfcOpenShell | LGPL-3.0-or-later* |
| ifcgeom_schema_agnostic | Internal library for IfcOpenShell | LGPL-3.0-or-later* |
| ifcgeomserver | Internal library for IfcOpenShell | LGPL-3.0-or-later* |
| ifcjni | Internal library for IfcOpenShell | LGPL-3.0-or-later* |
| ifcparse | Internal library for IfcOpenShell | LGPL-3.0-or-later* |
| ifcwrap | Internal library for IfcOpenShell | LGPL-3.0-or-later* |
| qtviewer | Internal library for IfcOpenShell | LGPL-3.0-or-later* |
| serializers | Internal library for IfcOpenShell | LGPL-3.0-or-later* |