Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import bpy
from bpy.types import Operator
def set_scene_camera():
'''Makes the camera the active and sets it to the scene camera'''
ob = bpy.context.active_object
# find the children on the rig (the camera name)
active_cam = ob.children[0].name
# cam = bpy.data.cameras[bpy.data.objects[active_cam]]
scene_cam = bpy.context.scene.camera
if active_cam != scene_cam.name:
bpy.context.scene.camera = bpy.data.objects[active_cam]
else:
return None
class ADD_CAMERA_RIGS_OT_set_scene_camera(Operator):
bl_idname = "add_camera_rigs.set_scene_camera"
bl_label = "Make Camera Active"
bl_description = "Makes the camera parented to this rig the active scene camera"
@classmethod
def poll(cls, context):
return context.active_object is not None
def execute(self, context):
set_scene_camera()
return {'FINISHED'}
def markerBind():
'''Defines the function to add a marker to timeling and bind camera'''
rig = bpy.context.active_object # rig object
active_cam = rig.children[0] # camera object
# switch area to DOPESHEET to add marker
bpy.context.area.type = 'DOPESHEET_EDITOR'
# add marker
bpy.ops.marker.add() # it will automatiically have the name of the camera
# select rig camera
bpy.context.view_layer.objects.active = active_cam
# bind marker to selected camera
bpy.ops.marker.camera_bind()
# make the rig the active object before finishing
bpy.context.view_layer.objects.active = rig
bpy.data.objects[active_cam.name].select_set(False)
bpy.data.objects[rig.name].select_set(True)
# switch back to 3d view
bpy.context.area.type = 'VIEW_3D'
class ADD_CAMERA_RIGS_OT_add_marker_bind(Operator):
bl_idname = "add_camera_rigs.add_marker_bind"
bl_label = "Add Marker and Bind Camera"
bl_description = "Add marker to current frame then bind rig camera to it (for camera switching)"
@classmethod
def poll(cls, context):
return context.active_object is not None
def execute(self, context):
markerBind()
return {'FINISHED'}
def add_DOF_object():
"""Define the function to add an Empty as DOF object """
smode = bpy.context.mode
rig = bpy.context.active_object
bone = rig.data.bones['aim_MCH']
active_cam = rig.children[0].name
cam = bpy.data.cameras[bpy.data.objects[active_cam].data.name]
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
# Add Empty
bpy.ops.object.empty_add()
obj = bpy.context.active_object
obj.name = "Empty_DOF"
# parent to aim_MCH
obj.parent = rig
obj.parent_type = "BONE"
obj.parent_bone = "aim_MCH"
# clear loc and rot
bpy.ops.object.location_clear()
bpy.ops.object.rotation_clear()
# move to bone head
obj.location = bone.head
# make this new empty the dof_object
cam.dof.focus_object = obj
# make the rig the active object before finishing
bpy.context.view_layer.objects.active = rig
bpy.data.objects[obj.name].select_set(False)
bpy.data.objects[rig.name].select_set(True)
bpy.ops.object.mode_set(mode=smode, toggle=False)
class ADD_CAMERA_RIGS_OT_add_dof_object(Operator):
bl_idname = "add_camera_rigs.add_dof_object"
bl_label = "Add DOF Object"
bl_description = "Create Empty and add as DOF Object"
@classmethod
def poll(cls, context):
return context.active_object is not None
def execute(self, context):
add_DOF_object()
return {'FINISHED'}
classes = (
ADD_CAMERA_RIGS_OT_set_scene_camera,
ADD_CAMERA_RIGS_OT_add_marker_bind,
ADD_CAMERA_RIGS_OT_add_dof_object,
)
def register():
from bpy.utils import register_class
for cls in classes:
register_class(cls)
def unregister():
from bpy.utils import unregister_class
for cls in classes:
unregister_class(cls)