Fix #3958. Bug where reassigning type class would incorrectly assign occurrence classes.

This commit is contained in:
Dion Moult
2023-11-01 14:41:25 +11:00
parent 3b298d44c1
commit 19a3f56941
2 changed files with 9 additions and 7 deletions
@@ -92,7 +92,10 @@ class ReassignClass(bpy.types.Operator):
return IfcStore.execute_ifc_operator(self, context) return IfcStore.execute_ifc_operator(self, context)
def _execute(self, context): def _execute(self, context):
objects = [bpy.data.objects.get(self.obj)] if self.obj else context.selected_objects if self.obj:
objects = [bpy.data.objects.get(self.obj)]
else:
objects = set(context.selected_objects + [context.active_object])
self.file = IfcStore.get_file() self.file = IfcStore.get_file()
predefined_type = context.scene.BIMRootProperties.ifc_predefined_type predefined_type = context.scene.BIMRootProperties.ifc_predefined_type
if predefined_type == "USERDEFINED": if predefined_type == "USERDEFINED":
@@ -101,11 +104,9 @@ class ReassignClass(bpy.types.Operator):
product = ifcopenshell.api.run( product = ifcopenshell.api.run(
"root.reassign_class", "root.reassign_class",
self.file, self.file,
**{ product=self.file.by_id(obj.BIMObjectProperties.ifc_definition_id),
"product": self.file.by_id(obj.BIMObjectProperties.ifc_definition_id), ifc_class=context.scene.BIMRootProperties.ifc_class,
"ifc_class": context.scene.BIMRootProperties.ifc_class, predefined_type=predefined_type,
"predefined_type": predefined_type,
},
) )
obj.name = "{}/{}".format(product.is_a(), getattr(product, "Name", "None")) obj.name = "{}/{}".format(product.is_a(), getattr(product, "Name", "None"))
tool.Ifc.link(product, obj) tool.Ifc.link(product, obj)
@@ -80,11 +80,12 @@ class Usecase:
element.ObjectType = self.settings["predefined_type"] element.ObjectType = self.settings["predefined_type"]
if element.is_a("IfcTypeProduct"): if element.is_a("IfcTypeProduct"):
for typed_element in ifcopenshell.util.element.get_types(element) or []: for typed_element in ifcopenshell.util.element.get_types(element) or []:
ifc_class = self.settings["ifc_class"].removesuffix("Type").removesuffix("Style")
ifcopenshell.api.run( ifcopenshell.api.run(
"root.reassign_class", "root.reassign_class",
self.file, self.file,
product=typed_element, product=typed_element,
ifc_class=self.settings["ifc_class"].strip("Type"), ifc_class=ifc_class,
predefined_type= self.settings["predefined_type"] predefined_type= self.settings["predefined_type"]
) )
return element return element