From 42c4a681081636779b80e37e258e6941f4fc9874 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 4 Feb 2023 16:20:52 +1100 Subject: [PATCH] Fix bug where unnamed profiles clogged up the material profile settings. --- .../blenderbim/bim/module/material/data.py | 6 +++++- .../blenderbim/bim/module/type/operator.py | 17 +++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/material/data.py b/src/blenderbim/blenderbim/bim/module/material/data.py index 054b295b25e..20ffd7767d7 100644 --- a/src/blenderbim/blenderbim/bim/module/material/data.py +++ b/src/blenderbim/blenderbim/bim/module/material/data.py @@ -73,7 +73,11 @@ def material_types(cls): @classmethod def profiles(cls): - return [(str(p.id()), p.ProfileName or "Unnamed", "") for p in tool.Ifc.get().by_type("IfcProfileDef")] + return [ + (str(p.id()), p.ProfileName or "Unnamed", "") + for p in tool.Ifc.get().by_type("IfcProfileDef") + if p.ProfileName + ] class ObjectMaterialData: diff --git a/src/blenderbim/blenderbim/bim/module/type/operator.py b/src/blenderbim/blenderbim/bim/module/type/operator.py index ef9b3a621b4..82a9b2fada1 100644 --- a/src/blenderbim/blenderbim/bim/module/type/operator.py +++ b/src/blenderbim/blenderbim/bim/module/type/operator.py @@ -253,8 +253,14 @@ def _execute(self, context): material = materials[0] # Arbitrarily pick a material else: material = self.add_default_material() - size = 0.5 / unit_scale - profile = ifc_file.create_entity("IfcRectangleProfileDef", ProfileType="AREA", XDim=size, YDim=size) + named_profiles = [p for p in ifc_file.by_type("IfcProfileDef") if p.ProfileName] + if named_profiles: + profile = named_profiles[0] + else: + size = 0.5 / unit_scale + profile = ifc_file.create_entity( + "IfcRectangleProfileDef", ProfileName="New Profile", ProfileType="AREA", XDim=size, YDim=size + ) rel = ifcopenshell.api.run( "material.assign_material", ifc_file, product=element, type="IfcMaterialProfileSet" ) @@ -282,12 +288,7 @@ def _execute(self, context): mesh = bpy.data.meshes.new("IfcWindow") obj = bpy.data.objects.new("TYPEX", mesh) element = blenderbim.core.root.assign_class( - tool.Ifc, - tool.Collector, - tool.Root, - obj=obj, - ifc_class="IfcWindowType", - should_add_representation=False + tool.Ifc, tool.Collector, tool.Root, obj=obj, ifc_class="IfcWindowType", should_add_representation=False ) bpy.ops.object.select_all(action="DESELECT") bpy.context.view_layer.objects.active = None