mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-28 11:18:18 +00:00
Fix enable/disable for ActivateDrawing operator icons.
This was a strange one. They have common invoke and execute methods, but the polling has different conditions. I tried subclassing the original ActivateDrawing for the Sheets version, but something about Blenders operators breaks the classmethod decorated poll. This was the cleanest solution I found, but maybe there's a better one.
This commit is contained in:
@@ -21,6 +21,7 @@ from . import ui, prop, operator, handler, gizmos, workspace
|
|||||||
|
|
||||||
classes = (
|
classes = (
|
||||||
operator.ActivateDrawing,
|
operator.ActivateDrawing,
|
||||||
|
operator.ActivateDrawingFromSheet,
|
||||||
operator.ActivateDrawingStyle,
|
operator.ActivateDrawingStyle,
|
||||||
operator.ActivateModel,
|
operator.ActivateModel,
|
||||||
operator.AddAnnotation,
|
operator.AddAnnotation,
|
||||||
|
|||||||
@@ -1916,21 +1916,7 @@ class ActivateModel(bpy.types.Operator):
|
|||||||
bonsai.bim.handler.refresh_ui_data()
|
bonsai.bim.handler.refresh_ui_data()
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
class ActivateDrawingBase:
|
||||||
class ActivateDrawing(bpy.types.Operator):
|
|
||||||
bl_idname = "bim.activate_drawing"
|
|
||||||
bl_label = "Activate Drawing"
|
|
||||||
bl_options = {"REGISTER", "UNDO"}
|
|
||||||
bl_description = (
|
|
||||||
"Activates the selected drawing view.\n\n"
|
|
||||||
+ "ALT+CLICK to keep the viewport position.\n\n"
|
|
||||||
+ "SHIFT+CLICK to load a quick preview of the drawing view."
|
|
||||||
)
|
|
||||||
|
|
||||||
drawing: bpy.props.IntProperty()
|
|
||||||
should_view_from_camera: bpy.props.BoolProperty(name="Should View From Camera", default=True, options={"SKIP_SAVE"})
|
|
||||||
use_quick_preview: bpy.props.BoolProperty(name="Use Quick Preview", default=False, options={"SKIP_SAVE"})
|
|
||||||
|
|
||||||
def invoke(self, context, event):
|
def invoke(self, context, event):
|
||||||
if event.type == "LEFTMOUSE" and event.alt:
|
if event.type == "LEFTMOUSE" and event.alt:
|
||||||
self.should_view_from_camera = False
|
self.should_view_from_camera = False
|
||||||
@@ -1977,7 +1963,54 @@ class ActivateDrawing(bpy.types.Operator):
|
|||||||
bpy.ops.bim.update_representation(obj=camera.name, ifc_representation_class="")
|
bpy.ops.bim.update_representation(obj=camera.name, ifc_representation_class="")
|
||||||
|
|
||||||
return {"FINISHED"}
|
return {"FINISHED"}
|
||||||
|
|
||||||
|
class ActivateDrawing(bpy.types.Operator, ActivateDrawingBase):
|
||||||
|
bl_idname = "bim.activate_drawing"
|
||||||
|
bl_label = "Activate Drawing"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
bl_description = (
|
||||||
|
"Activates the selected drawing view.\n\n"
|
||||||
|
+ "ALT+CLICK to keep the viewport position.\n\n"
|
||||||
|
+ "SHIFT+CLICK to load a quick preview of the drawing view"
|
||||||
|
)
|
||||||
|
|
||||||
|
drawing: bpy.props.IntProperty()
|
||||||
|
should_view_from_camera: bpy.props.BoolProperty(name="Should View From Camera", default=True, options={"SKIP_SAVE"})
|
||||||
|
use_quick_preview: bpy.props.BoolProperty(name="Use Quick Preview", default=False, options={"SKIP_SAVE"})
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
props = context.scene.DocProperties
|
||||||
|
active_drawing = props.drawings[props.active_drawing_index]
|
||||||
|
is_drawing_selected = active_drawing.ifc_definition_id > 0
|
||||||
|
if not is_drawing_selected:
|
||||||
|
cls.poll_message_set("No drawing selected.")
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
class ActivateDrawingFromSheet(bpy.types.Operator, ActivateDrawingBase):
|
||||||
|
bl_idname = "bim.activate_drawing_from_sheet"
|
||||||
|
bl_label = "Activate Drawing"
|
||||||
|
bl_options = {"REGISTER", "UNDO"}
|
||||||
|
bl_description = (
|
||||||
|
"Activates the selected drawing view.\n\n"
|
||||||
|
+ "ALT+CLICK to keep the viewport position.\n\n"
|
||||||
|
+ "SHIFT+CLICK to load a quick preview of the drawing view"
|
||||||
|
)
|
||||||
|
|
||||||
|
drawing: bpy.props.IntProperty()
|
||||||
|
should_view_from_camera: bpy.props.BoolProperty(name="Should View From Camera", default=True, options={"SKIP_SAVE"})
|
||||||
|
use_quick_preview: bpy.props.BoolProperty(name="Use Quick Preview", default=False, options={"SKIP_SAVE"})
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
props = context.scene.DocProperties
|
||||||
|
active_sheet = props.sheets[props.active_sheet_index]
|
||||||
|
is_drawing_selected = active_sheet.reference_type == "DRAWING"
|
||||||
|
if not is_drawing_selected:
|
||||||
|
cls.poll_message_set("No drawing selected.")
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
class SelectDocIfcFile(bpy.types.Operator):
|
class SelectDocIfcFile(bpy.types.Operator):
|
||||||
bl_idname = "bim.select_doc_ifc_file"
|
bl_idname = "bim.select_doc_ifc_file"
|
||||||
|
|||||||
Reference in New Issue
Block a user