1 # SPDX-License-Identifier: GPL-2.0-or-later
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'
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
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")
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")
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")
65 panel
="ADD_CAMERA_RIGS_PT_composition_guides",
66 text
="Composition Guides",)
69 col
= layout
.column(align
=True)
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"):
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
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)
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")
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")
110 bpy
.utils
.register_class(ADD_CAMERA_RIGS_PT_camera_rig_ui
)
114 bpy
.utils
.unregister_class(ADD_CAMERA_RIGS_PT_camera_rig_ui
)