Blame view

moves.py 10 KB
d7f6d50c   gtaaas   versao atual
1
# -*- coding: UTF-8 -*-
4973c0eb   André Araújo   Renomeia arquivo ...
2

1880bcdf   Adabriand Furtado   Adicionado o movi...
3
import bpy
7357e74e   gtaaas   Corrige função do...
4
import math
1880bcdf   Adabriand Furtado   Adicionado o movi...
5
import util
7736a4b1   Adabriand Furtado   Integração do mov...
6
import pyutil
d7f6d50c   gtaaas   versao atual
7

e313bcb0   André Araújo   Atualiza moviment...
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
def read_hand_param(mov_param):
    conf_param = mov_param['configuracao'] if 'configuracao' in mov_param else 0
    artic_param = mov_param['articulacao'] if 'articulacao' in mov_param else 0
    orient_param = mov_param['orientacao'] if 'orientacao' in mov_param else 0
    return [conf_param, artic_param, orient_param]

def contato(action, contact_type, mov_param, bones, is_right_hand, initialFrame = 18, frameJump = 10):
    if (contact_type == "alisar"):
        currentFrame = alisar(action, mov_param, bones, is_right_hand, initialFrame, frameJump)
    elif (contact_type == "cocar"):
        currentFrame = cocar(action, mov_param, bones, initialFrame,  frameJump)
    elif (contact_type == "tocar"):
        currentFrame = tocar(action, mov_param, bones, is_right_hand, initialFrame, frameJump)
    elif (contact_type == "riscar"):
        currentFrame = riscar(action, mov_param, bones, is_right_hand, initialFrame, frameJump)
    return currentFrame

def riscar(action, mov_param, bones, is_right_hand, initialFrame = 25, frameJump = 10, bnAntBracoDegree = 2, bnMaoDegree = 45):
    currentFrame = initialFrame
    handParam = read_hand_param(mov_param)
    lado = "R" if is_right_hand else "L"

    bnAntBraco = bpy.context.object.pose.bones["BnAntBraco." + lado]
    currentFrame += frameJump
    util.apply_rotation(bnAntBraco, "Z", currentFrame, bnAntBracoDegree)
    currentFrame += frameJump
    util.apply_rotation(bnAntBraco, "Z", currentFrame, (-1)*(bnAntBracoDegree+1))

    currentFrame = initialFrame
    util.setPose(action, handParam, [currentFrame], bones)
    bnMao = bpy.context.object.pose.bones["BnMao." + lado]
    currentFrame += frameJump
    util.apply_rotation(bnMao, "Y", currentFrame, bnMaoDegree)
    currentFrame += int(frameJump/2)
    util.apply_rotation(bnMao, "Y", currentFrame, (-1)*bnMaoDegree)
    currentFrame += int(frameJump/2)
    util.apply_rotation(bnMao, "Y", currentFrame, (-2)*bnMaoDegree)
    currentFrame += frameJump
    util.setPose(action, handParam, [currentFrame], bones)
    return currentFrame

def tocar(action, mov_param, bones, is_right_hand, initialFrame = 25, degree = 30, frameJump = 10):
    currentFrame = initialFrame
    handParam = read_hand_param(mov_param)
    util.setPose(action, handParam, [initialFrame], bones)
7736a4b1   Adabriand Furtado   Integração do mov...
53
54
55
56
57
    pose = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"]

    lado = "BnMao.R" if is_right_hand else "BnMao.L"
    bnMao =  bpy.context.object.pose.bones[lado]
    currentFrame += frameJump
e48ef0c6   André Araújo   Adiciona moviment...
58
    util.apply_rotation(bnMao, "X", currentFrame, -degree)
2b000538   Adabriand Furtado   Correção do movim...
59
    pose = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"]
80c3096e   André Araújo   Remove parâmetros...
60
    currentFrame += frameJump
b698cccd   Adabriand Furtado   Adiciona moviment...
61
    util.apply_rotation(bnMao, "X", currentFrame, degree)
2b000538   Adabriand Furtado   Correção do movim...
62
    util.setPose(action[0:2], handParam[0:2], [currentFrame], bones)
1880bcdf   Adabriand Furtado   Adicionado o movi...
63
    return currentFrame
7736a4b1   Adabriand Furtado   Integração do mov...
64

91c658b7   Adabriand Furtado   Adicionado o movi...
65
def cocar(action, mov_param, bones, initialFrame = 18, frameJump = 10):
2b000538   Adabriand Furtado   Correção do movim...
66
    currentFrame = initialFrame
91c658b7   Adabriand Furtado   Adicionado o movi...
67
    pa_index = mov_param['articulacao'] if 'articulacao' in mov_param else 0
2b000538   Adabriand Furtado   Correção do movim...
68
    repetition = mov_param['repeticoes'] if 'repeticoes' in mov_param else 2
b698cccd   Adabriand Furtado   Adiciona moviment...
69
70

    for i in range(0, repetition):
2b000538   Adabriand Furtado   Correção do movim...
71
        util.setPose(action, [util.cocar_mao_aberta_index, pa_index, util.cocar_orientation_index], [currentFrame], bones, False)
b698cccd   Adabriand Furtado   Adiciona moviment...
72
        currentFrame += frameJump
7736a4b1   Adabriand Furtado   Integração do mov...
73
        util.setPose(action, [util.cocar_mao_fechada_index, pa_index, util.cocar_orientation_index], [currentFrame], bones, False)
2b000538   Adabriand Furtado   Correção do movim...
74
        currentFrame += frameJump
2b000538   Adabriand Furtado   Correção do movim...
75
76
77
78
79
    return currentFrame

def alisar(action, mov_param, bones, is_right_hand, initialFrame = 18, frameJump = 10, width = 0.25):
    currentFrame = initialFrame
    plane = mov_param['plano'] if 'plano' in mov_param else "perpendicular"
91c658b7   Adabriand Furtado   Adicionado o movi...
80
81
    repetition = mov_param['repeticoes'] if 'repeticoes' in mov_param else 2
    handParam = read_hand_param(mov_param)
a0026fb0   Adabriand Furtado   Refactoring para ...
82
    util.setPose(action, handParam, [currentFrame], bones)
91c658b7   Adabriand Furtado   Adicionado o movi...
83
    boneIK = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"]
7736a4b1   Adabriand Furtado   Integração do mov...
84

6bf2e3c2   André Araújo   Adiciona moviment...
85
    if (plane == "perpendicular"):
7736a4b1   Adabriand Furtado   Integração do mov...
86
        currentFrame = alisar_xy(boneIK, 1, repetition, currentFrame, frameJump, width)
6bf2e3c2   André Araújo   Adiciona moviment...
87
    elif (plane == "paralelo"):
7736a4b1   Adabriand Furtado   Integração do mov...
88
        currentFrame = alisar_xy(boneIK, 0, repetition, currentFrame, frameJump, width)
91c658b7   Adabriand Furtado   Adicionado o movi...
89
    elif (plane == "diagonal-direita"):
7736a4b1   Adabriand Furtado   Integração do mov...
90
        currentFrame = alisar_diagonal(boneIK, True, repetition, currentFrame, frameJump, width)
91c658b7   Adabriand Furtado   Adicionado o movi...
91
92
    elif (plane == "diagonal-esquerda"):
        currentFrame = alisar_diagonal(boneIK, False, repetition, currentFrame, frameJump, width)
2b000538   Adabriand Furtado   Correção do movim...
93
    util.setPose(action, handParam, [currentFrame], bones)
91c658b7   Adabriand Furtado   Adicionado o movi...
94
    return currentFrame
7736a4b1   Adabriand Furtado   Integração do mov...
95

91c658b7   Adabriand Furtado   Adicionado o movi...
96
def alisar_xy(boneIK, orientation_index, repetition, initialFrame = 18, frameJump = 10, width = 0.25):
2b000538   Adabriand Furtado   Correção do movim...
97
    currentFrame = initialFrame
2b000538   Adabriand Furtado   Correção do movim...
98
    location = util.get_bone_data_from_frame(boneIK, currentFrame, 'location')
91c658b7   Adabriand Furtado   Adicionado o movi...
99
    center = location.x, location.y, location.z
91c658b7   Adabriand Furtado   Adicionado o movi...
100
    for i in range(0, repetition):
7736a4b1   Adabriand Furtado   Integração do mov...
101
        boneIK.location = center
2b000538   Adabriand Furtado   Correção do movim...
102
        boneIK.location[orientation_index] = center[orientation_index] - width
91c658b7   Adabriand Furtado   Adicionado o movi...
103
        util.keyframe_insert(boneIK, 'location', currentFrame)
7736a4b1   Adabriand Furtado   Integração do mov...
104
105
        currentFrame += frameJump
        boneIK.location = center
91c658b7   Adabriand Furtado   Adicionado o movi...
106
        boneIK.location[orientation_index] = center[orientation_index] + width
e48ef0c6   André Araújo   Adiciona moviment...
107
        util.keyframe_insert(boneIK, 'location', currentFrame)
7736a4b1   Adabriand Furtado   Integração do mov...
108
        currentFrame += frameJump
e48ef0c6   André Araújo   Adiciona moviment...
109
    return currentFrame
7736a4b1   Adabriand Furtado   Integração do mov...
110
111

def alisar_diagonal(boneIK, to_right, repetition, initialFrame = 18, frameJump = 10, width = 0.25):
1880bcdf   Adabriand Furtado   Adicionado o movi...
112
    currentFrame = initialFrame
7736a4b1   Adabriand Furtado   Integração do mov...
113
    location = util.get_bone_data_from_frame(boneIK, currentFrame, 'location')
1880bcdf   Adabriand Furtado   Adicionado o movi...
114
    center =  location.x, location.y, location.z
7736a4b1   Adabriand Furtado   Integração do mov...
115
    for i in range(0, repetition):
1880bcdf   Adabriand Furtado   Adicionado o movi...
116
117
118
        boneIK.location = center
        boneIK.location[0] = center[0] - width if to_right else center[0] - width
        boneIK.location[1] = center[1] - width if to_right else center[1] + width
2b000538   Adabriand Furtado   Correção do movim...
119
        util.keyframe_insert(boneIK, 'location', currentFrame)
1880bcdf   Adabriand Furtado   Adicionado o movi...
120
        currentFrame += frameJump
47ea08f7   Adabriand Furtado   Adicionado limite...
121
        boneIK.location = center
7736a4b1   Adabriand Furtado   Integração do mov...
122
123
124
        boneIK.location[0] = center[0] + width if to_right else center[0] + width
        boneIK.location[1] = center[1] + width if to_right else center[1] - width
        util.keyframe_insert(boneIK, 'location', currentFrame)
2b000538   Adabriand Furtado   Correção do movim...
125
        currentFrame += frameJump
7736a4b1   Adabriand Furtado   Integração do mov...
126
127
128
129
130
131
132
133
    return currentFrame

# Obs.: A velocidade do movimento vai ser a relacao entre tamanho do raio e o periodo
#       quanto maior o periodo mais keyframes
#       quanto menor o raio mais rapido
# exemplos:
# raio: "pequeno" raio = 0.5, velocidade: "rapido" periodo = 25
# raio: "pequeno" raio = 0.5, velocidade: "normal" periodo = 35
1880bcdf   Adabriand Furtado   Adicionado o movi...
134
# raio: "pequeno" raio = 0.5, velocidade: "lento" periodo = 45
eaa49245   Adabriand Furtado   Adicionada a orie...
135
136
# raio: "normal" raio = 1.0, velocidade: "rapido" periodo = 35
# raio: "normal" raio = 1.0, velocidade: "normal" periodo = 45
7736a4b1   Adabriand Furtado   Integração do mov...
137
# raio: "normal" raio = 1.0, velocidade: "lento" periodo = 55
eaa49245   Adabriand Furtado   Adicionada a orie...
138
# raio: "grande" raio = 1.5, velocidade: "rapido" periodo = 45
7736a4b1   Adabriand Furtado   Integração do mov...
139
140
# raio: "grande" raio = 1.5, velocidade: "normal" periodo = 55
# raio: "grande" raio = 1.5, velocidade: "lento" periodo = 65
b698cccd   Adabriand Furtado   Adiciona moviment...
141
# @param obj: (objeto) bone, mesh, e.g.
7736a4b1   Adabriand Furtado   Integração do mov...
142
143
144
# @param current_frame: (int) posicao onde o primeiro keyframe vai ser inserido
# @param raio: (int) raio da circunferencia
# @param periodo: (int) quantidade de keyframes necessarios para completar uma volta completa
b698cccd   Adabriand Furtado   Adiciona moviment...
145
# @param x: (int) in [0,1,2] define qual eixo vai variar no seno (0 = eixo X, 1 = eixo Y, 2 = eixo Z)
7736a4b1   Adabriand Furtado   Integração do mov...
146
147
148
# @param y: (int) in [0,1,2] define qual eixo vai variar no cosseno (0 = eixo X, 1 = eixo Y, 2 = eixo Z)
# @param usar_lado_oposto: (bool) inverte o lado da primeira posicao (pode ser util em alguns casos para espelhar)
# @param usar_sentido_oposto (bool) inverte o sentido do movimento (horario para anti-horario)
b698cccd   Adabriand Furtado   Adiciona moviment...
149
def circular(obj, current_frame, raio, periodo, x = 0, y = 1, usar_lado_oposto = False, usar_sentido_oposto = False, meia_volta = False):
b698cccd   Adabriand Furtado   Adiciona moviment...
150
    # limita inferiormente
eaa49245   Adabriand Furtado   Adicionada a orie...
151
    if (periodo < 16):
7736a4b1   Adabriand Furtado   Integração do mov...
152
        periodo = 16
eaa49245   Adabriand Furtado   Adicionada a orie...
153
    # limita superiormente
7736a4b1   Adabriand Furtado   Integração do mov...
154
155
    elif (periodo > 360):
        periodo = 360
eaa49245   Adabriand Furtado   Adicionada a orie...
156
    # muda lado inicial
7736a4b1   Adabriand Furtado   Integração do mov...
157
158
159
160
    if (usar_lado_oposto):
        k = round(periodo / 2)
    else:
        k = 0
eaa49245   Adabriand Furtado   Adicionada a orie...
161
    # evita estouro dos indices
7736a4b1   Adabriand Furtado   Integração do mov...
162
163
164
165
    x %= 3
    y %= 3
    # inverte direcao do movimento
    if (usar_sentido_oposto):
eaa49245   Adabriand Furtado   Adicionada a orie...
166
        tmp = x
eaa49245   Adabriand Furtado   Adicionada a orie...
167
168
        x = y
        y = tmp
e48ef0c6   André Araújo   Adiciona moviment...
169
170
171
    # copia posicao inicial para transladar
    loc = [obj.location[0], obj.location[1], obj.location[2]]
    # semi-circular
df32bc03   André Araújo   Adiciona parâmetr...
172
173
    limite = periodo + k
    if (meia_volta):
e48ef0c6   André Araújo   Adiciona moviment...
174
175
176
177
178
179
180
181
182
        limite = round(limite / 2)
    for i in range(k, limite + 1):
        # reduz a quantidade de keyframes
        if (current_frame % 2 == 0):
            obj.location[x] = loc[x] + (raio * math.cos(i / periodo * (2 * math.pi)))
            obj.location[y] = loc[y] + (raio * math.sin(i / periodo * (2 * math.pi)))
            util.keyframe_insert(obj, 'location', current_frame)
        current_frame += 1
    util.keyframe_insert(obj, 'location', current_frame)
a576064f   André Araújo   Adiciona flag sen...
183
    return periodo - 1
e313bcb0   André Araújo   Atualiza moviment...
184
185
186
187
188
189
190
191
192
193

def pontual(js_movement, current_frame, frame_jump, is_right_hand):
    hand_param = read_hand_param(js_movement)
    bones = util.right_bones_conf if is_right_hand else util.left_bones_conf
    hand_actions = util.right_hand_actions if is_right_hand else util.left_hand_actions
    util.keyframe_insert(bones, 'location', current_frame)
    current_frame += frame_jump
    util.setPose(hand_actions, hand_param, [current_frame], bones)
    current_frame += frame_jump
    util.keyframe_insert(bones, 'location', current_frame)
df32bc03   André Araújo   Adiciona parâmetr...
194
195
196
197
198
    return current_frame

def retilineo(js_movement, current_frame, frame_jump, is_right_hand):
    hand_param = [js_movement['configuracao'], js_movement['articulacao_inicial'], js_movement['orientacao']]
    bones = util.right_bones_conf if is_right_hand else util.left_bones_conf
a576064f   André Araújo   Adiciona flag sen...
199
    hand_actions = util.right_hand_actions if is_right_hand else util.left_hand_actions
df32bc03   André Araújo   Adiciona parâmetr...
200
    util.keyframe_insert(bones, 'location', current_frame)
a576064f   André Araújo   Adiciona flag sen...
201
202
203
204
205
206
207
    current_frame += frame_jump
    util.setPose(hand_actions, hand_param, [current_frame], bones)
    current_frame += 2* frame_jump
    hand_param = [js_movement['configuracao'], js_movement['articulacao_final'], js_movement['orientacao']]
    util.setPose(hand_actions, hand_param, [current_frame], bones)
    util.keyframe_insert(bones, 'location', current_frame)
    return current_frame
df32bc03   André Araújo   Adiciona parâmetr...

a576064f   André Araújo   Adiciona flag sen...

e313bcb0   André Araújo   Atualiza moviment...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

a576064f   André Araújo   Adiciona flag sen...

e313bcb0   André Araújo   Atualiza moviment...

80c3096e   André Araújo   Remove parâmetros...

a576064f   André Araújo   Adiciona flag sen...

80c3096e   André Araújo   Remove parâmetros...

a576064f   André Araújo   Adiciona flag sen...

80c3096e   André Araújo   Remove parâmetros...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

e48ef0c6   André Araújo   Adiciona moviment...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

6bf2e3c2   André Araújo   Adiciona moviment...

df32bc03   André Araújo   Adiciona parâmetr...

6bf2e3c2   André Araújo   Adiciona moviment...

6bf2e3c2   André Araújo   Adiciona moviment...

2b000538   Adabriand Furtado   Correção do movim...

e313bcb0   André Araújo   Atualiza moviment...

6bf2e3c2   André Araújo   Adiciona moviment...

2b000538   Adabriand Furtado   Correção do movim...

6bf2e3c2   André Araújo   Adiciona moviment...

e313bcb0   André Araújo   Atualiza moviment...

6bf2e3c2   André Araújo   Adiciona moviment...

42f9b71d   André Araújo   Adiciona moviment...

e313bcb0   André Araújo   Atualiza moviment...

42f9b71d   André Araújo   Adiciona moviment...

e313bcb0   André Araújo   Atualiza moviment...

42f9b71d   André Araújo   Adiciona moviment...

e313bcb0   André Araújo   Atualiza moviment...

42f9b71d   André Araújo   Adiciona moviment...

e313bcb0   André Araújo   Atualiza moviment...

a576064f   André Araújo   Adiciona flag sen...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...

e313bcb0   André Araújo   Atualiza moviment...

df32bc03   André Araújo   Adiciona parâmetr...