mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-28 15:53:00 +00:00
Fix #3996. Reassigning occurrences or types now also reassigns the correlating occurrence or type.
This commit is contained in:
@@ -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"}
|
||||
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user