shift + click with bim.activate_drawing switches view without turning off/off objects in scene

This commit is contained in:
Ryan Schultz
2024-06-02 09:41:59 -05:00
parent 47704b1625
commit 2cc583b88b
@@ -1518,47 +1518,56 @@ class ActivateDrawing(bpy.types.Operator):
bl_idname = "bim.activate_drawing" bl_idname = "bim.activate_drawing"
bl_label = "Activate Drawing" bl_label = "Activate Drawing"
bl_options = {"REGISTER", "UNDO"} bl_options = {"REGISTER", "UNDO"}
bl_description = "Activates the selected drawing view.\n\n" + "ALT+CLICK to keep the viewport position" bl_description = "Activates the selected drawing view.\n\n" + "ALT+CLICK to keep the viewport position.\n\n" + "SHIFT+CLICK activiate drawing without turning objects on/off."
drawing: bpy.props.IntProperty() drawing: bpy.props.IntProperty()
camera_view_point: bpy.props.BoolProperty(name="Camera View Point", default=True, options={"SKIP_SAVE"}) camera_view_point: bpy.props.BoolProperty(name="Camera View Point", default=True, options={"SKIP_SAVE"})
switch_camera_only: bpy.props.BoolProperty(name="Only Changes Camera View", default=False, options={"SKIP_SAVE"})
def invoke(self, context, event): def invoke(self, context, event):
# keep the viewport position on alt+click # keep the viewport position on alt+click
# make sure to use SKIP_SAVE on property, otherwise it might get stuck # make sure to use SKIP_SAVE on property, otherwise it might get stuck
if event.type == "LEFTMOUSE" and event.alt: if event.type == "LEFTMOUSE" and event.alt:
self.camera_view_point = False self.camera_view_point = False
# Only activates the camera view on alt+shift. Does not turn on/off objects in scene
if event.type == "LEFTMOUSE" and event.shift:
self.switch_camera_only = True
return self.execute(context) return self.execute(context)
def execute(self, context): def execute(self, context):
drawing = tool.Ifc.get().by_id(self.drawing) drawing = tool.Ifc.get().by_id(self.drawing)
dprops = bpy.context.scene.DocProperties dprops = bpy.context.scene.DocProperties
if not self.camera_view_point: camera = tool.Drawing.import_drawing(drawing)
viewport_position = tool.Blender.get_viewport_position()
try: if self.switch_camera_only:
core.activate_drawing_view(tool.Ifc, tool.Blender, tool.Drawing, drawing=drawing) tool.Blender.activate_camera(camera)
except core.CameraNotAvailableError: else:
self.report( if not self.camera_view_point:
{"ERROR"}, viewport_position = tool.Blender.get_viewport_position()
"The drawing view is not available. Ensure you have not excluded it in the active view layer.",
)
return {"CANCELLED"}
if not self.camera_view_point: try:
tool.Blender.set_viewport_position(viewport_position) core.activate_drawing_view(tool.Ifc, tool.Blender, tool.Drawing, drawing=drawing)
except core.CameraNotAvailableError:
self.report(
{"ERROR"},
"The drawing view is not available. Ensure you have not excluded it in the active view layer.",
)
return {"CANCELLED"}
dprops.active_drawing_id = self.drawing if not self.camera_view_point:
# reset DrawingsData to reload_drawing_styles work correctly tool.Blender.set_viewport_position(viewport_position)
DrawingsData.is_loaded = False
dprops.drawing_styles.clear() dprops.active_drawing_id = self.drawing
if ifcopenshell.util.element.get_pset(drawing, "EPset_Drawing", "HasUnderlay"): # reset DrawingsData to reload_drawing_styles work correctly
bpy.ops.bim.reload_drawing_styles() DrawingsData.is_loaded = False
bpy.ops.bim.activate_drawing_style() dprops.drawing_styles.clear()
core.sync_references(tool.Ifc, tool.Collector, tool.Drawing, drawing=tool.Ifc.get().by_id(self.drawing)) if ifcopenshell.util.element.get_pset(drawing, "EPset_Drawing", "HasUnderlay"):
CutDecorator.install(context) bpy.ops.bim.reload_drawing_styles()
tool.Drawing.show_decorations() bpy.ops.bim.activate_drawing_style()
core.sync_references(tool.Ifc, tool.Collector, tool.Drawing, drawing=tool.Ifc.get().by_id(self.drawing))
CutDecorator.install(context)
tool.Drawing.show_decorations()
return {"FINISHED"} return {"FINISHED"}