mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-26 10:11:46 +00:00
Fix #4617 : Switching representation in edit mode is no longer possible
This commit is contained in:
@@ -215,6 +215,13 @@ class SwitchRepresentation(bpy.types.Operator, Operator):
|
|||||||
disable_opening_subtractions: bpy.props.BoolProperty()
|
disable_opening_subtractions: bpy.props.BoolProperty()
|
||||||
should_switch_all_meshes: bpy.props.BoolProperty()
|
should_switch_all_meshes: bpy.props.BoolProperty()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
if context.active_object.mode == "OBJECT":
|
||||||
|
return True
|
||||||
|
cls.poll_message_set("Only available in OBJECT mode - Press TAB in the viewport")
|
||||||
|
return False
|
||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
target_representation = tool.Ifc.get().by_id(self.ifc_definition_id)
|
target_representation = tool.Ifc.get().by_id(self.ifc_definition_id)
|
||||||
target = target_representation.ContextOfItems
|
target = target_representation.ContextOfItems
|
||||||
@@ -223,6 +230,8 @@ class SwitchRepresentation(bpy.types.Operator, Operator):
|
|||||||
element = tool.Ifc.get_entity(obj)
|
element = tool.Ifc.get_entity(obj)
|
||||||
if not element:
|
if not element:
|
||||||
continue
|
continue
|
||||||
|
if not obj.mode == "OBJECT":
|
||||||
|
continue
|
||||||
if obj == context.active_object:
|
if obj == context.active_object:
|
||||||
representation = target_representation
|
representation = target_representation
|
||||||
else:
|
else:
|
||||||
@@ -909,7 +918,7 @@ class OverrideDuplicateMove(bpy.types.Operator):
|
|||||||
if pset:
|
if pset:
|
||||||
pset = tool.Ifc.get().by_id(pset["id"])
|
pset = tool.Ifc.get().by_id(pset["id"])
|
||||||
ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset)
|
ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset)
|
||||||
|
|
||||||
if new[0].is_a("IfcElementAssembly"):
|
if new[0].is_a("IfcElementAssembly"):
|
||||||
linked_aggregate_group = [
|
linked_aggregate_group = [
|
||||||
r.RelatingGroup
|
r.RelatingGroup
|
||||||
@@ -987,7 +996,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
else:
|
else:
|
||||||
index = add_linked_aggregate_pset(part, index)
|
index = add_linked_aggregate_pset(part, index)
|
||||||
# index += 1
|
# index += 1
|
||||||
|
|
||||||
obj = tool.Ifc.get_object(part)
|
obj = tool.Ifc.get_object(part)
|
||||||
obj.select_set(True)
|
obj.select_set(True)
|
||||||
|
|
||||||
@@ -1021,9 +1030,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
return
|
return
|
||||||
|
|
||||||
linked_aggregate_group = ifcopenshell.api.run("group.add_group", tool.Ifc.get(), Name=self.group_name)
|
linked_aggregate_group = ifcopenshell.api.run("group.add_group", tool.Ifc.get(), Name=self.group_name)
|
||||||
ifcopenshell.api.run(
|
ifcopenshell.api.run("group.assign_group", tool.Ifc.get(), products=[element], group=linked_aggregate_group)
|
||||||
"group.assign_group", tool.Ifc.get(), products=[element], group=linked_aggregate_group
|
|
||||||
)
|
|
||||||
|
|
||||||
def custom_incremental_naming_for_element_assembly(old_to_new):
|
def custom_incremental_naming_for_element_assembly(old_to_new):
|
||||||
for new in old_to_new.values():
|
for new in old_to_new.values():
|
||||||
@@ -1047,10 +1054,10 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
if re.findall(pattern2, new_obj.name):
|
if re.findall(pattern2, new_obj.name):
|
||||||
split_name = new_obj.name.split(".")
|
split_name = new_obj.name.split(".")
|
||||||
new_obj.name = split_name[0] + "_" + number
|
new_obj.name = split_name[0] + "_" + number
|
||||||
|
|
||||||
def get_max_index(parts):
|
def get_max_index(parts):
|
||||||
psets = [ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate") for p in parts]
|
psets = [ifcopenshell.util.element.get_pset(p, "BBIM_Linked_Aggregate") for p in parts]
|
||||||
index = [i['Index'] for i in psets if i]
|
index = [i["Index"] for i in psets if i]
|
||||||
if len(index) > 0:
|
if len(index) > 0:
|
||||||
index = max(index)
|
index = max(index)
|
||||||
return index
|
return index
|
||||||
@@ -1064,14 +1071,14 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
new_pset = ifcopenshell.api.run(
|
new_pset = ifcopenshell.api.run(
|
||||||
"pset.add_pset", tool.Ifc.get(), product=new[0], name=self.pset_name
|
"pset.add_pset", tool.Ifc.get(), product=new[0], name=self.pset_name
|
||||||
)
|
)
|
||||||
|
|
||||||
ifcopenshell.api.run(
|
ifcopenshell.api.run(
|
||||||
"pset.edit_pset",
|
"pset.edit_pset",
|
||||||
tool.Ifc.get(),
|
tool.Ifc.get(),
|
||||||
pset=new_pset,
|
pset=new_pset,
|
||||||
properties={"Index": pset["Index"]},
|
properties={"Index": pset["Index"]},
|
||||||
)
|
)
|
||||||
|
|
||||||
if new[0].is_a("IfcElementAssembly"):
|
if new[0].is_a("IfcElementAssembly"):
|
||||||
linked_aggregate_group = [
|
linked_aggregate_group = [
|
||||||
r.RelatingGroup
|
r.RelatingGroup
|
||||||
@@ -1080,7 +1087,6 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
if "BBIM_Linked_Aggregate" in r.RelatingGroup.Name
|
if "BBIM_Linked_Aggregate" in r.RelatingGroup.Name
|
||||||
]
|
]
|
||||||
tool.Ifc.run("group.assign_group", group=linked_aggregate_group[0], products=new)
|
tool.Ifc.run("group.assign_group", group=linked_aggregate_group[0], products=new)
|
||||||
|
|
||||||
|
|
||||||
if len(context.selected_objects) != 1:
|
if len(context.selected_objects) != 1:
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
@@ -1101,7 +1107,7 @@ class DuplicateMoveLinkedAggregate(bpy.types.Operator):
|
|||||||
select_objects_and_add_data(selected_element)
|
select_objects_and_add_data(selected_element)
|
||||||
|
|
||||||
old_to_new = OverrideDuplicateMove.execute_ifc_duplicate_operator(self, context, linked=True)
|
old_to_new = OverrideDuplicateMove.execute_ifc_duplicate_operator(self, context, linked=True)
|
||||||
|
|
||||||
tool.Root.recreate_aggregate(old_to_new)
|
tool.Root.recreate_aggregate(old_to_new)
|
||||||
|
|
||||||
copy_linked_aggregate_data(old_to_new)
|
copy_linked_aggregate_data(old_to_new)
|
||||||
@@ -1250,9 +1256,9 @@ class RefreshLinkedAggregate(bpy.types.Operator):
|
|||||||
selected_matrix = selected_obj.matrix_world
|
selected_matrix = selected_obj.matrix_world
|
||||||
object_duplicate = tool.Ifc.get_object(element)
|
object_duplicate = tool.Ifc.get_object(element)
|
||||||
duplicate_matrix = object_duplicate.matrix_world.decompose()
|
duplicate_matrix = object_duplicate.matrix_world.decompose()
|
||||||
|
|
||||||
return selected_matrix, duplicate_matrix
|
return selected_matrix, duplicate_matrix
|
||||||
|
|
||||||
def set_new_matrix(selected_matrix, duplicate_matrix, old_to_new):
|
def set_new_matrix(selected_matrix, duplicate_matrix, old_to_new):
|
||||||
for old, new in old_to_new.items():
|
for old, new in old_to_new.items():
|
||||||
new_obj = tool.Ifc.get_object(new[0])
|
new_obj = tool.Ifc.get_object(new[0])
|
||||||
@@ -1260,7 +1266,6 @@ class RefreshLinkedAggregate(bpy.types.Operator):
|
|||||||
matrix_diff = Matrix.inverted(selected_matrix) @ new_obj.matrix_world
|
matrix_diff = Matrix.inverted(selected_matrix) @ new_obj.matrix_world
|
||||||
new_obj_matrix = new_base_matrix @ matrix_diff
|
new_obj_matrix = new_base_matrix @ matrix_diff
|
||||||
new_obj.matrix_world = new_obj_matrix
|
new_obj.matrix_world = new_obj_matrix
|
||||||
|
|
||||||
|
|
||||||
active_element = tool.Ifc.get_entity(context.active_object)
|
active_element = tool.Ifc.get_entity(context.active_object)
|
||||||
if not active_element:
|
if not active_element:
|
||||||
|
|||||||
Reference in New Issue
Block a user