diff --git a/src/blenderbim/blenderbim/bim/module/material/prop.py b/src/blenderbim/blenderbim/bim/module/material/prop.py index 5967b4d896..29beb20de8 100644 --- a/src/blenderbim/blenderbim/bim/module/material/prop.py +++ b/src/blenderbim/blenderbim/bim/module/material/prop.py @@ -120,6 +120,11 @@ def get_contexts(self, context): def update_material_name(self: "Material", context: bpy.types.Context) -> None: + # No need to update anything if it's either category + # or ifc_definition_id is not yet set + # (which occurs when Material still in the process of creation). + if self.is_category or not self.ifc_definition_id: + return ifc_file = tool.Ifc.get() name = self.name material = ifc_file.by_id(self.ifc_definition_id) diff --git a/src/blenderbim/blenderbim/tool/material.py b/src/blenderbim/blenderbim/tool/material.py index 31c1054e48..790e61a5cd 100644 --- a/src/blenderbim/blenderbim/tool/material.py +++ b/src/blenderbim/blenderbim/tool/material.py @@ -92,6 +92,7 @@ class Material(blenderbim.core.tool.Material): get_name = lambda x: "Unnamed" materials = sorted(tool.Ifc.get().by_type(material_type), key=get_name) categories = defaultdict(list) + if material_type == "IfcMaterial": category_index_to_reselect = None @@ -112,8 +113,9 @@ class Material(blenderbim.core.tool.Material): for material in mats if cat.is_expanded else []: new = props.materials.add() - new.ifc_definition_id = material.id() + # Assign name before assigning ifc_definition_id to avoid triggering IFC update. new.name = get_name(material) + new.ifc_definition_id = material.id() new.total_elements = len( ifcopenshell.util.element.get_elements_by_material(tool.Ifc.get(), material) ) @@ -124,8 +126,9 @@ class Material(blenderbim.core.tool.Material): return for material in materials: new = props.materials.add() - new.ifc_definition_id = material.id() + # Assign name before assigning ifc_definition_id to avoid triggering IFC update. new.name = get_name(material) + new.ifc_definition_id = material.id() new.total_elements = len(ifcopenshell.util.element.get_elements_by_material(tool.Ifc.get(), material)) @classmethod