Welcome to mirror list, hosted at ThFree Co, Russian Federation.

operators.py « add_camera_rigs - git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: fe93041d0871ed19f207dc03f7205a4841f4e87b (plain)
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)