Sun Position: replace DMS label by the Enter Coordinates field
[blender-addons.git] / add_camera_rigs / ui_panels.py
blob5d545d3ad0563242ff2681d6ff1b190c68620807
1 # SPDX-License-Identifier: GPL-2.0-or-later
3 import bpy
4 from bpy.types import Panel
6 from .operators import get_rig_and_cam, CameraRigMixin
9 class ADD_CAMERA_RIGS_PT_camera_rig_ui(Panel, CameraRigMixin):
10 bl_label = "Camera Rig"
11 bl_space_type = 'VIEW_3D'
12 bl_region_type = 'UI'
13 bl_category = 'Item'
15 def draw(self, context):
16 active_object = context.active_object
17 rig, cam = get_rig_and_cam(context.active_object)
18 pose_bones = rig.pose.bones
19 cam_data = cam.data
20 layout = self.layout
22 # Camera lens
23 if rig["rig_id"].lower() in ("dolly_rig", "crane_rig"):
24 layout.prop(pose_bones["Camera"], '["lens"]',
25 text="Focal Length (mm)")
27 col = layout.column(align=True)
28 col.label(text="Clipping:")
29 col.prop(cam_data, "clip_start", text="Start")
30 col.prop(cam_data, "clip_end", text="End")
32 layout.prop(cam_data, "type")
34 # DoF
35 col = layout.column(align=False)
36 col.prop(cam_data.dof, "use_dof")
37 if cam_data.dof.use_dof:
38 sub = col.column(align=True)
39 if cam_data.dof.focus_object is None:
40 sub.operator("add_camera_rigs.set_dof_bone")
41 sub.prop(cam_data.dof, "focus_object")
42 if (cam_data.dof.focus_object is not None
43 and cam_data.dof.focus_object.type == 'ARMATURE'):
44 sub.prop_search(cam_data.dof, "focus_subtarget",
45 cam_data.dof.focus_object.data, "bones")
46 sub = col.column(align=True)
47 row = sub.row(align=True)
48 row.active = cam_data.dof.focus_object is None
49 row.prop(pose_bones["Camera"],
50 '["focus_distance"]', text="Focus Distance")
51 sub.prop(pose_bones["Camera"],
52 '["aperture_fstop"]', text="F-Stop")
54 # Viewport display
55 layout.prop(active_object, 'show_in_front',
56 toggle=False, text='Show in Front')
57 layout.prop(cam_data, "show_limits")
58 col = layout.column(align=True)
59 col.prop(cam_data, "show_passepartout")
60 if cam_data.show_passepartout:
61 col.prop(cam_data, "passepartout_alpha")
63 # Composition guides
64 layout.popover(
65 panel="ADD_CAMERA_RIGS_PT_composition_guides",
66 text="Composition Guides",)
68 # Props and operators
69 col = layout.column(align=True)
70 col.prop(cam,
71 "hide_select", text="Make Camera Unselectable")
72 col.operator("add_camera_rigs.add_marker_bind",
73 text="Add Marker and Bind", icon="MARKER_HLT")
74 col.operator("add_camera_rigs.set_scene_camera",
75 text="Make Camera Active", icon='CAMERA_DATA')
77 if rig["rig_id"].lower() in ("dolly_rig", "crane_rig"):
78 # Track to Constraint
79 col = layout.column(align=True)
80 track_to_constraint = None
81 for con in pose_bones["Camera"].constraints:
82 if con.type == 'TRACK_TO':
83 track_to_constraint = con
84 break
85 if track_to_constraint is not None:
86 col.label(text="Tracking:")
87 col.prop(track_to_constraint, 'influence',
88 text="Aim Lock", slider=True)
90 # Crane arm stuff
91 if rig["rig_id"].lower() == "crane_rig":
92 col = layout.column(align=True)
93 col.label(text="Crane Arm:")
94 col.prop(pose_bones["Crane_height"],
95 'scale', index=1, text="Arm Height")
96 col.prop(pose_bones["Crane_arm"],
97 'scale', index=1, text="Arm Length")
99 # 2D rig stuff
100 elif rig["rig_id"].lower() == "2d_rig":
101 col = layout.column(align=True)
102 col.label(text="2D Rig:")
103 col.prop(pose_bones["Camera"], '["rotation_shift"]',
104 text="Rotation/Shift")
105 if cam.data.sensor_width != 36:
106 col.label(text="Please set Camera Sensor Width to 36", icon="ERROR")
109 def register():
110 bpy.utils.register_class(ADD_CAMERA_RIGS_PT_camera_rig_ui)
113 def unregister():
114 bpy.utils.unregister_class(ADD_CAMERA_RIGS_PT_camera_rig_ui)