From 7ba65857bd2e088ec106cacdbb7bd74d900fdaa0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 12 Apr 2023 21:27:29 +1000 Subject: [PATCH] New activate model operator to switch back to a MODEL_VIEW target view subcontext --- .../blenderbim/bim/module/drawing/__init__.py | 3 +- .../blenderbim/bim/module/drawing/operator.py | 44 ++++++++++++++++--- .../blenderbim/bim/module/drawing/ui.py | 3 +- src/blenderbim/blenderbim/core/drawing.py | 2 +- src/blenderbim/blenderbim/core/tool.py | 2 +- src/blenderbim/blenderbim/tool/drawing.py | 2 +- 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/__init__.py b/src/blenderbim/blenderbim/bim/module/drawing/__init__.py index 59e192936e..49e7f38939 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/__init__.py @@ -20,8 +20,9 @@ import bpy from . import ui, prop, operator, handler, gizmos classes = ( + operator.ActivateDrawing, operator.ActivateDrawingStyle, - operator.ActivateView, + operator.ActivateModel, operator.AddAnnotation, operator.AddDrawing, operator.AddDrawingStyle, diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index e78273d72f..d8840a918b 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py @@ -176,7 +176,7 @@ class CreateDrawing(bpy.types.Operator): for drawing_id in drawings_to_print: if self.print_all: - bpy.ops.bim.activate_view(drawing=drawing_id) + bpy.ops.bim.activate_drawing(drawing=drawing_id) self.camera = context.scene.camera self.camera_element = tool.Ifc.get_entity(self.camera) @@ -218,7 +218,7 @@ class CreateDrawing(bpy.types.Operator): open_with_user_command(context.preferences.addons["blenderbim"].preferences.svg_command, svg_path) if self.print_all: - bpy.ops.bim.activate_view(drawing=original_drawing_id) + bpy.ops.bim.activate_drawing(drawing=original_drawing_id) return {"FINISHED"} def get_camera_dimensions(self): @@ -978,13 +978,47 @@ class OpenDrawing(bpy.types.Operator): return {"FINISHED"} -class ActivateView(bpy.types.Operator): +class ActivateModel(bpy.types.Operator): + bl_idname = "bim.activate_model" + bl_label = "Activate Model" + bl_options = {"REGISTER", "UNDO"} + bl_description = "Activates the model view" + + def execute(self, context): + CutDecorator.uninstall() + + bpy.ops.object.hide_view_clear() + + subcontext = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") + + for obj in context.visible_objects: + element = tool.Ifc.get_entity(obj) + if not element: + continue + model = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") + if model: + current_representation = tool.Geometry.get_active_representation(obj) + if current_representation != model: + blenderbim.core.geometry.switch_representation( + tool.Ifc, + tool.Geometry, + obj=obj, + representation=model, + should_reload=False, + is_global=True, + should_sync_changes_first=True, + ) + return {"FINISHED"} + + + +class ActivateDrawing(bpy.types.Operator): """ Activates the selected drawing view """ - bl_idname = "bim.activate_view" - bl_label = "Activate View" + bl_idname = "bim.activate_drawing" + bl_label = "Activate Drawing" bl_options = {"REGISTER", "UNDO"} bl_description = "Activates the selected drawing view" drawing: bpy.props.IntProperty() diff --git a/src/blenderbim/blenderbim/bim/module/drawing/ui.py b/src/blenderbim/blenderbim/bim/module/drawing/ui.py index 640feac072..64210467b0 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/ui.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/ui.py @@ -196,7 +196,8 @@ class BIM_PT_drawings(Panel): op = row.operator("bim.select_all_drawings", icon="SELECT_SUBTRACT", text="") op = row.operator("bim.open_drawing", icon="URL", text="") op.view = active_drawing.name - op = row.operator("bim.activate_view", icon="OUTLINER_OB_CAMERA", text="") + row.operator("bim.activate_model", icon="VIEW3D", text="") + op = row.operator("bim.activate_drawing", icon="OUTLINER_OB_CAMERA", text="") op.drawing = active_drawing.ifc_definition_id row.operator("bim.create_drawing", text="", icon="OUTPUT") self.layout.template_list( diff --git a/src/blenderbim/blenderbim/core/drawing.py b/src/blenderbim/blenderbim/core/drawing.py index 24d83da833..037ef0db14 100644 --- a/src/blenderbim/blenderbim/core/drawing.py +++ b/src/blenderbim/blenderbim/core/drawing.py @@ -386,4 +386,4 @@ def activate_drawing_view(ifc, drawing_tool, drawing): if not camera: camera = drawing_tool.import_drawing(drawing) drawing_tool.import_annotations_in_group(drawing_tool.get_drawing_group(drawing)) - drawing_tool.activate_view(camera) + drawing_tool.activate_drawing(camera) diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 042050899c..eed8325419 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -225,7 +225,7 @@ class Document: @interface class Drawing: - def activate_view(cls, camera): pass + def activate_drawing(cls, camera): pass def add_literal_to_annotation(cls, obj, Literal='Literal', Path='RIGHT', BoxAlignment='bottom-left'): pass def copy_representation(cls, source, dest): pass def create_annotation_object(cls, drawing, object_type): pass diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index dadf9a0ef9..382dc6e323 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -1324,7 +1324,7 @@ class Drawing(blenderbim.core.tool.Drawing): return True if (camera and camera.data.type == "ORTHO") else False @classmethod - def activate_view(cls, camera): + def activate_drawing(cls, camera): area = next(area for area in bpy.context.screen.areas if area.type == "VIEW_3D") is_local_view = area.spaces[0].local_view is not None if is_local_view: