Commit 0f2ad8a3d6600d6df5181e70ad917590e1cf4300
1 parent
7736a4b1
Exists in
master
Corrige transição da expressão facial, realiza outros pequenos ajustes
Showing
7 changed files
with
112 additions
and
193 deletions
Show diff stats
Makefile
1 | -JSON_ALL = \ | ||
2 | -'{ \ | ||
3 | - "userId": "lavid", \ | ||
4 | - "sinal": "Modelo JSON", \ | ||
5 | - "interpolacao": "lento|normal|rapido", \ | ||
6 | - "movimentos": [ \ | ||
7 | - { \ | ||
8 | - "facial": { \ | ||
9 | - "expressao": 0..21, \ | ||
10 | - "transicao": "lento|normal|rapido", \ | ||
11 | - "duracao": "lento|normal|rapido" \ | ||
12 | - }, \ | ||
13 | - "mao_esquerda": { \ | ||
14 | - "circular": { \ | ||
15 | - "plano": "frente-esquerda|frente-cima|esquerda-cima", \ | ||
16 | - "raio": "pequeno|medio|grande", \ | ||
17 | - "velocidade": "lento|normal|rapido", \ | ||
18 | - "lado_oposto": true|false, \ | ||
19 | - "sentido_inverso": true|false, \ | ||
20 | - "articulacao": 0..124, \ | ||
21 | - "configuracao": 0..60, \ | ||
22 | - "orientacao": 0..142 \ | ||
23 | - }, \ | ||
24 | - "semicircular": { \ | ||
25 | - "plano": "frente-esquerda|frente-cima|esquerda-cima", \ | ||
26 | - "raio": "pequeno|medio|grande", \ | ||
27 | - "lado_oposto": true|false, \ | ||
28 | - "sentido_inverso": true|false, \ | ||
29 | - "articulacao": 0..124, \ | ||
30 | - "configuracao": 0..60, \ | ||
31 | - "orientacao": 0..142 \ | ||
32 | - }, \ | ||
33 | - "contato": { \ | ||
34 | - "alisar": { \ | ||
35 | - "movimento_orientacao": "perpendicular|paralelo|diagonal-direita|diagonal-esquerda", \ | ||
36 | - "articulacao": 0..124, \ | ||
37 | - "configuracao": 0..60, \ | ||
38 | - "orientacao": 0..142 \ | ||
39 | - }, \ | ||
40 | - "cocar": { \ | ||
41 | - "articulacao": 0..124, \ | ||
42 | - "configuracao": 0..60, \ | ||
43 | - "orientacao": 0..142 \ | ||
44 | - }, \ | ||
45 | - "tocar": { \ | ||
46 | - "articulacao": 0..124, \ | ||
47 | - "configuracao": 0..60, \ | ||
48 | - "orientacao": 0..142 \ | ||
49 | - }, \ | ||
50 | - "riscar": { \ | ||
51 | - "articulacao": 0..124, \ | ||
52 | - "configuracao": 0..60, \ | ||
53 | - "orientacao": 0..142 \ | ||
54 | - } \ | ||
55 | - }, \ | ||
56 | - "espiral": { \ | ||
57 | - "plano": "frente-esquerda|frente-cima|esquerda-cima", \ | ||
58 | - "raio": "pequeno|medio|grande", \ | ||
59 | - "lado_oposto": true|false, \ | ||
60 | - "sentido_inverso": true|false, \ | ||
61 | - "articulacao": 0..124, \ | ||
62 | - "configuracao": 0..60, \ | ||
63 | - "orientacao": 0..142 \ | ||
64 | - }, \ | ||
65 | - "helicoidal": { \ | ||
66 | - "plano": "frente-esquerda|frente-cima|esquerda-cima", \ | ||
67 | - "raio": "pequeno|medio|grande", \ | ||
68 | - "lado_oposto": true|false, \ | ||
69 | - "sentido_inverso": true|false, \ | ||
70 | - "articulacao": 0..124, \ | ||
71 | - "configuracao": 0..60, \ | ||
72 | - "orientacao": 0..142 \ | ||
73 | - }, \ | ||
74 | - "pontual": { \ | ||
75 | - "articulacao": 0..124, \ | ||
76 | - "configuracao": 0..60, \ | ||
77 | - "orientacao": 0..142 \ | ||
78 | - }, \ | ||
79 | - "retilineo": { \ | ||
80 | - "velocidade": "lento|normal|rapido", \ | ||
81 | - "articulacao_inicial": 0..124, \ | ||
82 | - "articulacao_final": 0..124, \ | ||
83 | - "configuracao": 0..60, \ | ||
84 | - "orientacao": 0..142 \ | ||
85 | - }, \ | ||
86 | - "senoidal": { \ | ||
87 | - "direcao": "frente|esquerda|cima", \ | ||
88 | - "direcao_oposta": true|false, \ | ||
89 | - "eixo_fixo": "frente-tras|esquerda-direita|cima-baixo", \ | ||
90 | - "comprimento_onda": "pequeno|medio|grande", \ | ||
91 | - "articulacao": 0..124, \ | ||
92 | - "configuracao": 0..60, \ | ||
93 | - "orientacao": 0..142 \ | ||
94 | - } \ | ||
95 | - }, \ | ||
96 | - "mao_direita": { \ | ||
97 | - } \ | ||
98 | - } \ | ||
99 | - ] \ | ||
100 | -}' | ||
101 | - | ||
102 | JSON = \ | 1 | JSON = \ |
103 | '{ \ | 2 | '{ \ |
104 | "userId": "lavid", \ | 3 | "userId": "lavid", \ |
105 | - "sinal": "Modelo JSON 2", \ | 4 | + "sinal": "Modelo JSON", \ |
106 | "interpolacao": "normal", \ | 5 | "interpolacao": "normal", \ |
107 | "movimentos": [ \ | 6 | "movimentos": [ \ |
108 | { \ | 7 | { \ |
109 | "facial": { \ | 8 | "facial": { \ |
110 | - "expressao": 20, \ | 9 | + "expressao": 10, \ |
111 | "transicao": "normal", \ | 10 | "transicao": "normal", \ |
112 | "duracao": "normal" \ | 11 | "duracao": "normal" \ |
113 | }, \ | 12 | }, \ |
@@ -128,7 +27,7 @@ JSON = \ | @@ -128,7 +27,7 @@ JSON = \ | ||
128 | }, \ | 27 | }, \ |
129 | { \ | 28 | { \ |
130 | "facial": { \ | 29 | "facial": { \ |
131 | - "expressao": 21, \ | 30 | + "expressao": 11, \ |
132 | "transicao": "normal", \ | 31 | "transicao": "normal", \ |
133 | "duracao": "normal" \ | 32 | "duracao": "normal" \ |
134 | }, \ | 33 | }, \ |
__init__.py
decode.py
1 | +import bpy | ||
1 | import moves | 2 | import moves |
2 | import util | 3 | import util |
3 | 4 | ||
@@ -29,18 +30,30 @@ def circular_semicircular(js_movement, current_frame, frame_jump, is_right_hand, | @@ -29,18 +30,30 @@ def circular_semicircular(js_movement, current_frame, frame_jump, is_right_hand, | ||
29 | ik = bpy.context.object.pose.bones['ik_FK.R'] | 30 | ik = bpy.context.object.pose.bones['ik_FK.R'] |
30 | else: | 31 | else: |
31 | ik = bpy.context.object.pose.bones['ik_FK.L'] | 32 | ik = bpy.context.object.pose.bones['ik_FK.L'] |
32 | - current_frame = insert_keyframe_pose_default(current_frame, frame_jump, [ik], ['location']) | ||
33 | - current_frame = moves.circular(ik, current_frame + frame_jump, ray, period, x, y, js_movement['lado_oposto'], js_movement['sentido_inverso'], is_semicircular) | 33 | + #current_frame = insert_keyframe_pose_default(current_frame, [ik], ['location']) |
34 | + current_frame = moves.circular(ik, current_frame, ray, period, x, y, js_movement['lado_oposto'], js_movement['sentido_inverso'], is_semicircular) | ||
34 | return current_frame | 35 | return current_frame |
35 | 36 | ||
36 | def contato(js_movement, current_frame, frame_jump, is_right_hand): | 37 | def contato(js_movement, current_frame, frame_jump, is_right_hand): |
37 | sub_type = next(iter(js_movement.keys())) | 38 | sub_type = next(iter(js_movement.keys())) |
38 | - mov_param = js_movement[sub_type] | 39 | + mov_param = js_movement[sub_type] |
39 | action = util.right_hand_actions if is_right_hand else util.left_hand_actions | 40 | action = util.right_hand_actions if is_right_hand else util.left_hand_actions |
40 | bones = util.rightBonesConf if is_right_hand else util.leftBonesConf | 41 | bones = util.rightBonesConf if is_right_hand else util.leftBonesConf |
41 | current_frame = current_frame + 2*frame_jump | 42 | current_frame = current_frame + 2*frame_jump |
42 | return moves.contato(action, sub_type, mov_param, bones, current_frame, frame_jump) | 43 | return moves.contato(action, sub_type, mov_param, bones, current_frame, frame_jump) |
43 | 44 | ||
45 | +def espiral(js_movement, current_frame, frame_jump, is_right_hand): | ||
46 | + pass | ||
47 | + | ||
48 | +def redemoinho(js_movement, current_frame, frame_jump, is_right_hand): | ||
49 | + pass | ||
50 | + | ||
51 | +def pontual(js_movement, current_frame, frame_jump, is_right_hand): | ||
52 | + pass | ||
53 | + | ||
54 | +def senoidal(js_movement, current_frame, frame_jump, is_right_hand): | ||
55 | + pass | ||
56 | + | ||
44 | def hand_mov(current_frame, frame_jump, js_mao, is_right_hand): | 57 | def hand_mov(current_frame, frame_jump, js_mao, is_right_hand): |
45 | if (js_mao == {}): | 58 | if (js_mao == {}): |
46 | return | 59 | return |
@@ -51,4 +64,12 @@ def hand_mov(current_frame, frame_jump, js_mao, is_right_hand): | @@ -51,4 +64,12 @@ def hand_mov(current_frame, frame_jump, js_mao, is_right_hand): | ||
51 | current_frame = circular_semicircular(js_mao[movement_name], current_frame, frame_jump, is_right_hand, True) | 64 | current_frame = circular_semicircular(js_mao[movement_name], current_frame, frame_jump, is_right_hand, True) |
52 | elif (movement_name == 'contato'): | 65 | elif (movement_name == 'contato'): |
53 | current_frame = contato(js_mao[movement_name], current_frame, frame_jump, is_right_hand) | 66 | current_frame = contato(js_mao[movement_name], current_frame, frame_jump, is_right_hand) |
54 | - return current_frame + frame_jump | ||
55 | \ No newline at end of file | 67 | \ No newline at end of file |
68 | + elif (movement_name == 'espiral'): | ||
69 | + current_frame = espiral(js_mao[movement_name], current_frame, frame_jump, is_right_hand) | ||
70 | + elif (movement_name == 'redemoinho'): | ||
71 | + current_frame = redemoinho(js_mao[movement_name], current_frame, frame_jump, is_right_hand) | ||
72 | + elif (movement_name == 'pontual'): | ||
73 | + current_frame = pontual(js_mao[movement_name], current_frame, frame_jump, is_right_hand) | ||
74 | + elif (movement_name == 'senoidal'): | ||
75 | + current_frame = senoidal(js_mao[movement_name], current_frame, frame_jump, is_right_hand) | ||
76 | + return current_frame + frame_jump |
facial.py
@@ -5,13 +5,16 @@ import util | @@ -5,13 +5,16 @@ import util | ||
5 | 5 | ||
6 | # duracao na posicao selecionada | 6 | # duracao na posicao selecionada |
7 | dict_duration = { | 7 | dict_duration = { |
8 | + 'inicial': 20, | ||
8 | 'lento': 15, | 9 | 'lento': 15, |
9 | 'normal': 10, | 10 | 'normal': 10, |
10 | - 'rapido': 5 | 11 | + 'rapido': 5, |
12 | + 'final': 20, | ||
11 | } | 13 | } |
12 | 14 | ||
13 | # tempo de entrada e saida na posicao selecionada | 15 | # tempo de entrada e saida na posicao selecionada |
14 | dict_transition = { | 16 | dict_transition = { |
17 | + 'inicial': 0, | ||
15 | 'lento': 15, | 18 | 'lento': 15, |
16 | 'normal': 10, | 19 | 'normal': 10, |
17 | 'rapido': 5 | 20 | 'rapido': 5 |
@@ -59,7 +62,7 @@ def apply_pose(index = 0, pose_library = list(bpy.data.actions)): | @@ -59,7 +62,7 @@ def apply_pose(index = 0, pose_library = list(bpy.data.actions)): | ||
59 | return | 62 | return |
60 | 63 | ||
61 | # consolida o movimento (faz insercao dos keyframes) e incrementa a timeline | 64 | # consolida o movimento (faz insercao dos keyframes) e incrementa a timeline |
62 | -def set_expression(timeline_facial, index, frame_duration = dict_duration['normal'], frame_transition = 0): | 65 | +def set_expression(timeline_facial, index, frame_duration = dict_duration['normal'], frame_transition = dict_transition['inicial']): |
63 | library_name = util.facial_expression_id | 66 | library_name = util.facial_expression_id |
64 | bones_facial = util.dict_bones[library_name] | 67 | bones_facial = util.dict_bones[library_name] |
65 | util.select_bones(bones_facial) | 68 | util.select_bones(bones_facial) |
@@ -80,7 +83,7 @@ def decode_expression(timeline_facial, js_facial, initial_interpolation = dict_d | @@ -80,7 +83,7 @@ def decode_expression(timeline_facial, js_facial, initial_interpolation = dict_d | ||
80 | global dict_transition | 83 | global dict_transition |
81 | index = js_facial['expressao'] | 84 | index = js_facial['expressao'] |
82 | frame_duration = dict_duration[js_facial['duracao']] | 85 | frame_duration = dict_duration[js_facial['duracao']] |
83 | - frame_transition = dict_duration[js_facial['transicao']] | 86 | + frame_transition = dict_transition[js_facial['transicao']] |
84 | # insere o primeiro keyframe | 87 | # insere o primeiro keyframe |
85 | if (timeline_facial == 0): | 88 | if (timeline_facial == 0): |
86 | set_expression(timeline_facial, 0, initial_interpolation) | 89 | set_expression(timeline_facial, 0, initial_interpolation) |
@@ -91,25 +94,21 @@ def decode_expression(timeline_facial, js_facial, initial_interpolation = dict_d | @@ -91,25 +94,21 @@ def decode_expression(timeline_facial, js_facial, initial_interpolation = dict_d | ||
91 | """ | 94 | """ |
92 | # unit test | 95 | # unit test |
93 | def main(): | 96 | def main(): |
94 | - import random | ||
95 | interpolation_start = 20 | 97 | interpolation_start = 20 |
96 | interpolation_end = 20 | 98 | interpolation_end = 20 |
99 | + timeline_facial = 0 | ||
97 | pose_max_range = round(bpy.data.actions[library_name].frame_range[1]) | 100 | pose_max_range = round(bpy.data.actions[library_name].frame_range[1]) |
98 | - | ||
99 | util.delete_all_keyframes() | 101 | util.delete_all_keyframes() |
100 | - apply_pose(0, library_name) | ||
101 | - | ||
102 | - js_facial = {"expressao": random.randint(0, pose_max_range), "transicao": 'normal', "duracao": 'normal'} | ||
103 | - print('facial expression %d current frame:' % (js_facial['expressao']), decode_expression(js_facial)) | ||
104 | - | ||
105 | - js_facial = {"expressao": random.randint(0, pose_max_range), "transicao": 'normal', "duracao": 'normal'} | ||
106 | - print('facial expression %d current frame:' % (js_facial['expressao']), decode_expression(js_facial)) | ||
107 | - | ||
108 | - #for i in range(0, pose_max_range + 1): | ||
109 | - # js_facial = {"expressao": i, "transicao": 'normal', "duracao": 'normal'} | ||
110 | - # print('facial expression %d current frame:' % (js_facial['expressao']), decode_expression(js_facial)) | ||
111 | - | ||
112 | - bpy.context.scene.frame_end = timeline_facial + interpolation_end | 102 | + apply_pose(0, util.facial_expression_id) |
103 | + for i in range(0, pose_max_range + 1): | ||
104 | + js_facial = { | ||
105 | + "expressao": i, # random.randint(0, pose_max_range), | ||
106 | + "transicao": 'normal', | ||
107 | + "duracao": 'normal' | ||
108 | + } | ||
109 | + timeline_facial = decode_expression(timeline_facial, js_facial, dict_duration['inicial']) | ||
110 | + print('facial expression %d current frame:' % (js_facial['expressao']), timeline_facial) | ||
111 | + bpy.context.scene.frame_end = timeline_facial + dict_duration['final'] | ||
113 | bpy.ops.screen.animation_play(reverse = False) | 112 | bpy.ops.screen.animation_play(reverse = False) |
114 | 113 | ||
115 | if __name__ == "__main__": | 114 | if __name__ == "__main__": |
libras.py
@@ -30,7 +30,7 @@ dict_interpolation = { | @@ -30,7 +30,7 @@ dict_interpolation = { | ||
30 | 'final': 20 | 30 | 'final': 20 |
31 | } | 31 | } |
32 | 32 | ||
33 | -def insert_keyframe_pose_default(current_frame = 0, frame_jump = 0, pose_bones = bpy.context.object.pose.bones, types_keyframe = ['location', 'rotation_quaternion']): | 33 | +def insert_keyframe_pose_default(current_frame = 0, pose_bones = bpy.context.object.pose.bones, types_keyframe = ['location', 'rotation_quaternion']): |
34 | for obj in (pose_bones): | 34 | for obj in (pose_bones): |
35 | obj.bone.select = True | 35 | obj.bone.select = True |
36 | for type_keyframe in types_keyframe: | 36 | for type_keyframe in types_keyframe: |
@@ -39,15 +39,15 @@ def insert_keyframe_pose_default(current_frame = 0, frame_jump = 0, pose_bones = | @@ -39,15 +39,15 @@ def insert_keyframe_pose_default(current_frame = 0, frame_jump = 0, pose_bones = | ||
39 | return current_frame | 39 | return current_frame |
40 | 40 | ||
41 | def pose_default(current_frame = 0, frame_jump = 0, actions = bpy.data.actions): | 41 | def pose_default(current_frame = 0, frame_jump = 0, actions = bpy.data.actions): |
42 | - result = current_frame | ||
43 | for action in actions: | 42 | for action in actions: |
44 | if (action.use_fake_user): | 43 | if (action.use_fake_user): |
45 | bpy.context.object.pose_library = action | 44 | bpy.context.object.pose_library = action |
46 | bpy.ops.poselib.apply_pose(pose_index = 0) | 45 | bpy.ops.poselib.apply_pose(pose_index = 0) |
47 | - result = insert_keyframe_pose_default(current_frame, frame_jump) | ||
48 | - return result + frame_jump | 46 | + insert_keyframe_pose_default(current_frame) |
47 | + return current_frame + frame_jump | ||
49 | 48 | ||
50 | def main(): | 49 | def main(): |
50 | + util.set_pose_mode() | ||
51 | util.delete_all_keyframes() | 51 | util.delete_all_keyframes() |
52 | util.configure_output() | 52 | util.configure_output() |
53 | bpy.context.scene.animation_data_create() | 53 | bpy.context.scene.animation_data_create() |
@@ -57,7 +57,7 @@ def main(): | @@ -57,7 +57,7 @@ def main(): | ||
57 | js_movimentos = js_input['movimentos'] | 57 | js_movimentos = js_input['movimentos'] |
58 | frame_jump = dict_interpolation[js_input['interpolacao']] | 58 | frame_jump = dict_interpolation[js_input['interpolacao']] |
59 | 59 | ||
60 | - endFrame = pose_default(0) | 60 | + endFrame = pose_default(0, frame_jump) |
61 | timeline_mao_esquerda = 0 | 61 | timeline_mao_esquerda = 0 |
62 | timeline_mao_direita = 0 | 62 | timeline_mao_direita = 0 |
63 | timeline_facial = 0 | 63 | timeline_facial = 0 |
@@ -105,7 +105,9 @@ def main(): | @@ -105,7 +105,9 @@ def main(): | ||
105 | endFrame += frame_jump | 105 | endFrame += frame_jump |
106 | 106 | ||
107 | # setar pose padrao final em todos os bones (location e rotation) | 107 | # setar pose padrao final em todos os bones (location e rotation) |
108 | - endFrame += pose_default(endFrame + dict_interpolation['final']) | 108 | + endFrame = pose_default(endFrame, frame_jump) |
109 | + endFrame += dict_interpolation['final'] | ||
110 | + | ||
109 | util.render_sign(js_input["userId"], js_input["sinal"], endFrame) | 111 | util.render_sign(js_input["userId"], js_input["sinal"], endFrame) |
110 | 112 | ||
111 | except: | 113 | except: |
param.json
1 | { | 1 | { |
2 | "userId": "lavid", | 2 | "userId": "lavid", |
3 | - "nome_sinal": "Modelo JSON", | ||
4 | - "velocidade_interpolacao": "lento|normal|rapido", | 3 | + "sinal": "Modelo JSON", |
4 | + "interpolacao": "lento|normal|rapido", | ||
5 | "movimentos": [ | 5 | "movimentos": [ |
6 | { | 6 | { |
7 | "facial": { | 7 | "facial": { |
8 | - "expressao": 21, | 8 | + "expressao": 0..21, |
9 | + "transicao": "lento|normal|rapido", | ||
9 | "duracao": "lento|normal|rapido" | 10 | "duracao": "lento|normal|rapido" |
10 | }, | 11 | }, |
11 | "mao_esquerda": { | 12 | "mao_esquerda": { |
12 | - "movimento": "semicircular", | ||
13 | "circular": { | 13 | "circular": { |
14 | "plano": "frente-esquerda|frente-cima|esquerda-cima", | 14 | "plano": "frente-esquerda|frente-cima|esquerda-cima", |
15 | "raio": "pequeno|medio|grande", | 15 | "raio": "pequeno|medio|grande", |
16 | "velocidade": "lento|normal|rapido", | 16 | "velocidade": "lento|normal|rapido", |
17 | - "lado_oposto": false, | ||
18 | - "sentido_inverso": false, | ||
19 | - "articulacao": 124, | ||
20 | - "configuracao": 129, | ||
21 | - "orientacao": 142 | 17 | + "lado_oposto": true|false, |
18 | + "sentido_inverso": true|false, | ||
19 | + "articulacao": 0..124, | ||
20 | + "configuracao": 0..59, | ||
21 | + "orientacao": 0..142 | ||
22 | }, | 22 | }, |
23 | "semicircular": { | 23 | "semicircular": { |
24 | "plano": "frente-esquerda|frente-cima|esquerda-cima", | 24 | "plano": "frente-esquerda|frente-cima|esquerda-cima", |
25 | "raio": "pequeno|medio|grande", | 25 | "raio": "pequeno|medio|grande", |
26 | - "velocidade": "lento|normal|rapido", | ||
27 | - "lado_oposto": false, | ||
28 | - "sentido_inverso": false, | ||
29 | - "articulacao": 124, | ||
30 | - "configuracao": 129, | ||
31 | - "orientacao": 142 | 26 | + "lado_oposto": true|false, |
27 | + "sentido_inverso": true|false, | ||
28 | + "articulacao": 0..124, | ||
29 | + "configuracao": 0..59, | ||
30 | + "orientacao": 0..142 | ||
32 | }, | 31 | }, |
33 | "contato": { | 32 | "contato": { |
34 | "alisar": { | 33 | "alisar": { |
35 | "movimento_orientacao": "perpendicular|paralelo|diagonal-direita|diagonal-esquerda", | 34 | "movimento_orientacao": "perpendicular|paralelo|diagonal-direita|diagonal-esquerda", |
36 | - "articulacao": 124, | ||
37 | - "configuracao": 129, | ||
38 | - "orientacao": 142 | 35 | + "articulacao": 0..124, |
36 | + "configuracao": 0..59, | ||
37 | + "orientacao": 0..142 | ||
39 | }, | 38 | }, |
40 | "cocar": { | 39 | "cocar": { |
41 | - "articulacao": 124, | ||
42 | - "configuracao": 129, | ||
43 | - "orientacao": 142 | 40 | + "articulacao": 0..124, |
41 | + "configuracao": 0..59, | ||
42 | + "orientacao": 0..142 | ||
44 | }, | 43 | }, |
45 | "tocar": { | 44 | "tocar": { |
46 | - "articulacao": 124, | ||
47 | - "configuracao": 129, | ||
48 | - "orientacao": 142 | 45 | + "articulacao": 0..124, |
46 | + "configuracao": 0..59, | ||
47 | + "orientacao": 0..142 | ||
49 | }, | 48 | }, |
50 | "riscar": { | 49 | "riscar": { |
51 | - "articulacao": 124, | ||
52 | - "configuracao": 129, | ||
53 | - "orientacao": 142 | 50 | + "articulacao": 0..124, |
51 | + "configuracao": 0..59, | ||
52 | + "orientacao": 0..142 | ||
54 | } | 53 | } |
55 | }, | 54 | }, |
56 | - "contato_sugestao": { | ||
57 | - "tipo": "cocar|riscar|tocar", | ||
58 | - "mov_orientacao": "perpendicular|paralelo|diagonal-direita|diagonal-esquerda", | ||
59 | - "articulacao": 124, | ||
60 | - "configuracao": 129, | ||
61 | - "orientacao": 142 | ||
62 | - }, | ||
63 | "espiral": { | 55 | "espiral": { |
64 | "plano": "frente-esquerda|frente-cima|esquerda-cima", | 56 | "plano": "frente-esquerda|frente-cima|esquerda-cima", |
65 | "raio": "pequeno|medio|grande", | 57 | "raio": "pequeno|medio|grande", |
66 | - "lado_oposto": false, | ||
67 | - "sentido_inverso": false, | ||
68 | - "articulacao": 124, | ||
69 | - "configuracao": 129, | ||
70 | - "orientacao": 142 | 58 | + "lado_oposto": true|false, |
59 | + "sentido_inverso": true|false, | ||
60 | + "articulacao": 0..124, | ||
61 | + "configuracao": 0..59, | ||
62 | + "orientacao": 0..142 | ||
71 | }, | 63 | }, |
72 | "helicoidal": { | 64 | "helicoidal": { |
73 | "plano": "frente-esquerda|frente-cima|esquerda-cima", | 65 | "plano": "frente-esquerda|frente-cima|esquerda-cima", |
74 | "raio": "pequeno|medio|grande", | 66 | "raio": "pequeno|medio|grande", |
75 | - "lado_oposto": false, | ||
76 | - "sentido_inverso": false, | ||
77 | - "articulacao": 124, | ||
78 | - "configuracao": 129, | ||
79 | - "orientacao": 142 | 67 | + "lado_oposto": true|false, |
68 | + "sentido_inverso": true|false, | ||
69 | + "articulacao": 0..124, | ||
70 | + "configuracao": 0..59, | ||
71 | + "orientacao": 0..142 | ||
80 | }, | 72 | }, |
81 | "pontual": { | 73 | "pontual": { |
82 | - "articulacao": 124, | ||
83 | - "configuracao": 129, | ||
84 | - "orientacao": 142 | 74 | + "transicao": "lento|normal|rapido", |
75 | + "duracao": "lento|normal|rapido" | ||
76 | + "articulacao": 0..124, | ||
77 | + "configuracao": 0..59, | ||
78 | + "orientacao": 0..142 | ||
85 | }, | 79 | }, |
86 | "retilineo": { | 80 | "retilineo": { |
87 | - "articulacao_inicial": 124, | ||
88 | - "articulacao_final": 124, | ||
89 | - "configuracao": 129, | ||
90 | - "orientacao": 142 | 81 | + "transicao": "lento|normal|rapido", |
82 | + "duracao": "lento|normal|rapido", | ||
83 | + "articulacao_inicial": 0..124, | ||
84 | + "articulacao_final": 0..124, | ||
85 | + "configuracao": 0..59, | ||
86 | + "orientacao": 0..142 | ||
91 | }, | 87 | }, |
92 | "senoidal": { | 88 | "senoidal": { |
93 | "direcao": "frente|esquerda|cima", | 89 | "direcao": "frente|esquerda|cima", |
94 | - "direcao_oposta": false, | 90 | + "direcao_oposta": true|false, |
95 | "eixo_fixo": "frente-tras|esquerda-direita|cima-baixo", | 91 | "eixo_fixo": "frente-tras|esquerda-direita|cima-baixo", |
96 | "comprimento_onda": "pequeno|medio|grande", | 92 | "comprimento_onda": "pequeno|medio|grande", |
97 | - "articulacao": 124, | ||
98 | - "configuracao": 129, | ||
99 | - "orientacao": 142 | 93 | + "articulacao": 0..124, |
94 | + "configuracao": 0..59, | ||
95 | + "orientacao": 0..142 | ||
100 | } | 96 | } |
101 | }, | 97 | }, |
102 | "mao_direita": { | 98 | "mao_direita": { |
103 | } | 99 | } |
104 | - }, | ||
105 | - { | ||
106 | } | 100 | } |
107 | ] | 101 | ] |
108 | } | 102 | } |
util.py
@@ -2,10 +2,10 @@ | @@ -2,10 +2,10 @@ | ||
2 | 2 | ||
3 | import bpy | 3 | import bpy |
4 | import math | 4 | import math |
5 | -import pyutil | ||
6 | import os | 5 | import os |
7 | import sys | 6 | import sys |
8 | import copy | 7 | import copy |
8 | +import pyutil | ||
9 | from bmesh_collision import bmesh_check_intersect_objects | 9 | from bmesh_collision import bmesh_check_intersect_objects |
10 | 10 | ||
11 | armature = bpy.context.scene.objects.get('Armature.001') | 11 | armature = bpy.context.scene.objects.get('Armature.001') |
@@ -71,10 +71,12 @@ def deselect_bones(bones = bpy.context.object.pose.bones): | @@ -71,10 +71,12 @@ def deselect_bones(bones = bpy.context.object.pose.bones): | ||
71 | pose_bone.bone.select = False | 71 | pose_bone.bone.select = False |
72 | return | 72 | return |
73 | 73 | ||
74 | -def delete_all_keyframes(): | 74 | +def set_pose_mode(): |
75 | bpy.ops.object.mode_set(mode = 'OBJECT') | 75 | bpy.ops.object.mode_set(mode = 'OBJECT') |
76 | bpy.ops.object.select_all(action = "DESELECT") | 76 | bpy.ops.object.select_all(action = "DESELECT") |
77 | bpy.ops.object.mode_set(mode = 'POSE') | 77 | bpy.ops.object.mode_set(mode = 'POSE') |
78 | + | ||
79 | +def delete_all_keyframes(): | ||
78 | bpy.context.active_object.animation_data_clear() | 80 | bpy.context.active_object.animation_data_clear() |
79 | for obj in bpy.data.objects: | 81 | for obj in bpy.data.objects: |
80 | obj.animation_data_clear() | 82 | obj.animation_data_clear() |
@@ -116,7 +118,7 @@ def resetIKPosition(isRightHand): | @@ -116,7 +118,7 @@ def resetIKPosition(isRightHand): | ||
116 | def resetBnMaoPosition(isRightHand): | 118 | def resetBnMaoPosition(isRightHand): |
117 | armature.pose_library = bpy.data.actions[orient_direita_id if isRightHand else orient_esquerda_id] | 119 | armature.pose_library = bpy.data.actions[orient_direita_id if isRightHand else orient_esquerda_id] |
118 | bpy.ops.poselib.apply_pose(pose_index = 0) | 120 | bpy.ops.poselib.apply_pose(pose_index = 0) |
119 | - | 121 | + |
120 | def get_bone_data_from_frame(bone, positionFrame, path): | 122 | def get_bone_data_from_frame(bone, positionFrame, path): |
121 | scene = bpy.context.scene | 123 | scene = bpy.context.scene |
122 | frame_current = scene.frame_current | 124 | frame_current = scene.frame_current |
@@ -164,7 +166,7 @@ def check_collision(objName, otherObjName, initFrame, endFrame): | @@ -164,7 +166,7 @@ def check_collision(objName, otherObjName, initFrame, endFrame): | ||
164 | frame_current = scene.frame_current | 166 | frame_current = scene.frame_current |
165 | startFrame = initFrame + int(math.fabs((endFrame - initFrame)/2)) | 167 | startFrame = initFrame + int(math.fabs((endFrame - initFrame)/2)) |
166 | collisionFrame = -1 | 168 | collisionFrame = -1 |
167 | - | 169 | + |
168 | for i in range(startFrame, endFrame + 1, 1): | 170 | for i in range(startFrame, endFrame + 1, 1): |
169 | scene.frame_set(i) | 171 | scene.frame_set(i) |
170 | obj = scene.objects.get(objName) | 172 | obj = scene.objects.get(objName) |