Das Problem ist, sobald ein If in diesem speziellen Menü steht wird der Rest abgesäbelt wenn die If Abfrage gar kein Objekt findet. Ist auch irgendwie logisch und nachvollziehbar. Null Objekt eben.
Also konkret:
Code: Alles auswählen
if obj.type == 'CAMERA':
layout.menu("VIEW3D_MT_object_specials")
Ich brauche also wohl eine Abfrage ob überhaupt ein Objekt in der Szene ist. Probiert habe ich schon ein if obj.type != None: . Geholfen hat es leider nichts. Das Menüteil nach dem If fehlt weiterhin ^^
Lustigerweise funktioniert das mit den if statements in dem submenü das ich hier anzeigen will tadellos. Da ist allerdings auch immer ein Objekt vorhanden wenn das aufgerufen wird.
Jemand ne Idee was ich hier falsch mache?
Mein Einbau sieht im Moment so aus:
Code: Alles auswählen
class VIEW3D_MT_object(Menu):
bl_context = "objectmode"
bl_label = "Object"
def draw(self, context):
layout = self.layout
scene = context.scene
obj = context.object
layout.operator("ed.undo")
layout.operator("ed.redo")
layout.operator("ed.undo_history")
if obj.type != None:
if obj.type == 'CAMERA':
layout.menu("VIEW3D_MT_object_specials")
layout.separator()
layout.menu("VIEW3D_MT_transform_object")
layout.menu("VIEW3D_MT_mirror")
layout.menu("VIEW3D_MT_object_clear")
layout.menu("VIEW3D_MT_object_apply")
layout.menu("VIEW3D_MT_snap")
layout.separator()
Code: Alles auswählen
class VIEW3D_MT_object_specials(Menu):
bl_label = "Specials"
@classmethod
def poll(cls, context):
# add more special types
return context.object
def draw(self, context):
layout = self.layout
scene = context.scene
obj = context.object
if obj.type == 'CAMERA':
layout.operator_context = 'INVOKE_REGION_WIN'
if obj.data.type == 'PERSP':
props = layout.operator("wm.context_modal_mouse", text="Camera Lens Angle")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.lens"
props.input_scale = 0.1
if obj.data.lens_unit == 'MILLIMETERS':
props.header_text = "Camera Lens Angle: %.1fmm"
else:
props.header_text = "Camera Lens Angle: %.1f\u00B0"
else:
props = layout.operator("wm.context_modal_mouse", text="Camera Lens Scale")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.ortho_scale"
props.input_scale = 0.01
props.header_text = "Camera Lens Scale: %.3f"
if not obj.data.dof_object:
view = context.space_data
if view and view.camera == obj and view.region_3d.view_perspective == 'CAMERA':
props = layout.operator("ui.eyedropper_depth", text="DOF Distance (Pick)")
else:
props = layout.operator("wm.context_modal_mouse", text="DOF Distance")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.dof_distance"
props.input_scale = 0.02
props.header_text = "DOF Distance: %.3f"
del view
layout.separator()
Wenn jemand von euch rumspielen will, das Script ist das space_view3d.py in scripts/startup/bl_ui, ab Zeile 1025 gehts los.