Fix #3996. Reassigning occurrences or types now also reassigns the correlating occurrence or type.

This commit is contained in:
Dion Moult
2023-11-28 16:44:31 +11:00
parent 3e268be5c7
commit 03809b3d5e
3 changed files with 50 additions and 20 deletions
@@ -103,17 +103,33 @@ class ReassignClass(bpy.types.Operator):
predefined_type = context.scene.BIMRootProperties.ifc_predefined_type
if predefined_type == "USERDEFINED":
predefined_type = context.scene.BIMRootProperties.ifc_userdefined_type
reassigned_elements = set()
for obj in objects:
product = ifcopenshell.api.run(
"root.reassign_class",
self.file,
product=self.file.by_id(obj.BIMObjectProperties.ifc_definition_id),
product=tool.Ifc.get_entity(obj),
ifc_class=context.scene.BIMRootProperties.ifc_class,
predefined_type=predefined_type,
)
obj.name = "{}/{}".format(product.is_a(), getattr(product, "Name", "None"))
tool.Ifc.link(product, obj)
reassigned_elements.add(product)
obj.name = tool.Loader.get_name(product)
obj.BIMObjectProperties.is_reassigning_class = False
dependent_elements = set()
for reassigned_element in reassigned_elements:
if reassigned_element.is_a("IfcTypeObject"):
dependent_elements.update(ifcopenshell.util.element.get_types(product))
else:
element_type = ifcopenshell.util.element.get_type(product)
if element_type:
dependent_elements.add(element_type)
dependent_elements.update(ifcopenshell.util.element.get_types(element_type))
for dependent_element in dependent_elements:
obj = tool.Ifc.get_object(dependent_element)
if obj:
obj.name = tool.Loader.get_name(dependent_element)
return {"FINISHED"}
+1 -1
View File
@@ -61,7 +61,7 @@ class Loader(blenderbim.core.tool.Loader):
@classmethod
def get_name(cls, element):
return "{}/{}".format(element.is_a(), element.Name)
return "{}/{}".format(element.is_a(), getattr(element, "Name", "None"))
@classmethod
def link_mesh(cls, shape, mesh):