Fix bug where drawing psets were needlessly updated and random objects would get drawing psets added on them

The prop update callbacks on has_underlay, has_linework, and has_annotation would edit the active object, which is not necessarily the camera. Yikes! Also, this means that when activating the drawing, it would sync references and every time it synced a reference it would attempt to sync these properties too which was slow and wasteful.
This commit is contained in:
Dion Moult
2024-04-06 23:37:30 +11:00
parent 0e410b4ac2
commit 46adb2b4db
3 changed files with 8 additions and 8 deletions
@@ -194,7 +194,7 @@ def update_document_name(self, context):
def update_has_underlay(self, context):
update_layer(self, context, "HasUnderlay", self.has_underlay)
# making sure that camera is active
if self.has_underlay and (context.active_object and context.active_object.data == self.id_data):
if self.has_underlay and (context.scene.camera and context.scene.camera.data == self.id_data):
bpy.ops.bim.reload_drawing_styles()
bpy.ops.bim.activate_drawing_style()
@@ -208,10 +208,12 @@ def update_has_annotation(self, context):
def update_layer(self, context, name, value):
element = tool.Ifc.get_entity(context.active_object)
if not context.scene.camera or context.scene.camera.data != self.id_data:
return
element = tool.Ifc.get_entity(context.scene.camera)
if not element:
return
pset = ifcopenshell.util.element.get_psets(element).get("EPset_Drawing")
pset = ifcopenshell.util.element.get_pset(element, "EPset_Drawing")
if pset:
pset = tool.Ifc.get().by_id(pset["id"])
else:
+1 -1
View File
@@ -394,7 +394,7 @@ def sync_references(ifc, collector, drawing_tool, drawing=None):
if reference_obj and (ifc.is_moved(reference_obj) or ifc.is_edited(reference_obj)):
should_delete_existing_annotation = True
if (should_delete_existing_annotation or not annotation):
if should_delete_existing_annotation or not annotation:
should_create_annotation = True
if should_delete_existing_annotation:
+2 -4
View File
@@ -671,8 +671,7 @@ class Drawing(blenderbim.core.tool.Drawing):
camera.angle = fov
psets = ifcopenshell.util.element.get_psets(drawing)
pset = psets.get("EPset_Drawing")
pset = ifcopenshell.util.element.get_pset(drawing, "EPset_Drawing")
if pset:
if "TargetView" in pset:
camera.BIMCameraProperties.target_view = pset["TargetView"]
@@ -1124,8 +1123,7 @@ class Drawing(blenderbim.core.tool.Drawing):
cls.import_annotations_in_group(cls.get_drawing_group(drawing))
tool.Blender.get_layer_collection(obj.users_collection[0]).hide_viewport = True
psets = ifcopenshell.util.element.get_psets(reference_element)
target_view = psets.get("EPset_Drawing", {}).get("TargetView", None)
target_view = ifcopenshell.util.element.get_pset(reference_element, "EPset_Drawing", "TargetView")
if target_view == "ELEVATION_VIEW":
ensure_referenced_drawing_obj_exists(reference_element)
return cls.generate_elevation_reference_annotation(drawing, reference_element, context)