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 | 1 | JSON = \ |
| 103 | 2 | '{ \ |
| 104 | 3 | "userId": "lavid", \ |
| 105 | - "sinal": "Modelo JSON 2", \ | |
| 4 | + "sinal": "Modelo JSON", \ | |
| 106 | 5 | "interpolacao": "normal", \ |
| 107 | 6 | "movimentos": [ \ |
| 108 | 7 | { \ |
| 109 | 8 | "facial": { \ |
| 110 | - "expressao": 20, \ | |
| 9 | + "expressao": 10, \ | |
| 111 | 10 | "transicao": "normal", \ |
| 112 | 11 | "duracao": "normal" \ |
| 113 | 12 | }, \ |
| ... | ... | @@ -128,7 +27,7 @@ JSON = \ |
| 128 | 27 | }, \ |
| 129 | 28 | { \ |
| 130 | 29 | "facial": { \ |
| 131 | - "expressao": 21, \ | |
| 30 | + "expressao": 11, \ | |
| 132 | 31 | "transicao": "normal", \ |
| 133 | 32 | "duracao": "normal" \ |
| 134 | 33 | }, \ | ... | ... |
__init__.py
decode.py
| 1 | +import bpy | |
| 1 | 2 | import moves |
| 2 | 3 | import util |
| 3 | 4 | |
| ... | ... | @@ -29,18 +30,30 @@ def circular_semicircular(js_movement, current_frame, frame_jump, is_right_hand, |
| 29 | 30 | ik = bpy.context.object.pose.bones['ik_FK.R'] |
| 30 | 31 | else: |
| 31 | 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 | 35 | return current_frame |
| 35 | 36 | |
| 36 | 37 | def contato(js_movement, current_frame, frame_jump, is_right_hand): |
| 37 | 38 | sub_type = next(iter(js_movement.keys())) |
| 38 | - mov_param = js_movement[sub_type] | |
| 39 | + mov_param = js_movement[sub_type] | |
| 39 | 40 | action = util.right_hand_actions if is_right_hand else util.left_hand_actions |
| 40 | 41 | bones = util.rightBonesConf if is_right_hand else util.leftBonesConf |
| 41 | 42 | current_frame = current_frame + 2*frame_jump |
| 42 | 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 | 57 | def hand_mov(current_frame, frame_jump, js_mao, is_right_hand): |
| 45 | 58 | if (js_mao == {}): |
| 46 | 59 | return |
| ... | ... | @@ -51,4 +64,12 @@ def hand_mov(current_frame, frame_jump, js_mao, is_right_hand): |
| 51 | 64 | current_frame = circular_semicircular(js_mao[movement_name], current_frame, frame_jump, is_right_hand, True) |
| 52 | 65 | elif (movement_name == 'contato'): |
| 53 | 66 | current_frame = contato(js_mao[movement_name], current_frame, frame_jump, is_right_hand) |
| 54 | - return current_frame + frame_jump | |
| 55 | 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 | 5 | |
| 6 | 6 | # duracao na posicao selecionada |
| 7 | 7 | dict_duration = { |
| 8 | + 'inicial': 20, | |
| 8 | 9 | 'lento': 15, |
| 9 | 10 | 'normal': 10, |
| 10 | - 'rapido': 5 | |
| 11 | + 'rapido': 5, | |
| 12 | + 'final': 20, | |
| 11 | 13 | } |
| 12 | 14 | |
| 13 | 15 | # tempo de entrada e saida na posicao selecionada |
| 14 | 16 | dict_transition = { |
| 17 | + 'inicial': 0, | |
| 15 | 18 | 'lento': 15, |
| 16 | 19 | 'normal': 10, |
| 17 | 20 | 'rapido': 5 |
| ... | ... | @@ -59,7 +62,7 @@ def apply_pose(index = 0, pose_library = list(bpy.data.actions)): |
| 59 | 62 | return |
| 60 | 63 | |
| 61 | 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 | 66 | library_name = util.facial_expression_id |
| 64 | 67 | bones_facial = util.dict_bones[library_name] |
| 65 | 68 | util.select_bones(bones_facial) |
| ... | ... | @@ -80,7 +83,7 @@ def decode_expression(timeline_facial, js_facial, initial_interpolation = dict_d |
| 80 | 83 | global dict_transition |
| 81 | 84 | index = js_facial['expressao'] |
| 82 | 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 | 87 | # insere o primeiro keyframe |
| 85 | 88 | if (timeline_facial == 0): |
| 86 | 89 | set_expression(timeline_facial, 0, initial_interpolation) |
| ... | ... | @@ -91,25 +94,21 @@ def decode_expression(timeline_facial, js_facial, initial_interpolation = dict_d |
| 91 | 94 | """ |
| 92 | 95 | # unit test |
| 93 | 96 | def main(): |
| 94 | - import random | |
| 95 | 97 | interpolation_start = 20 |
| 96 | 98 | interpolation_end = 20 |
| 99 | + timeline_facial = 0 | |
| 97 | 100 | pose_max_range = round(bpy.data.actions[library_name].frame_range[1]) |
| 98 | - | |
| 99 | 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 | 112 | bpy.ops.screen.animation_play(reverse = False) |
| 114 | 113 | |
| 115 | 114 | if __name__ == "__main__": | ... | ... |
libras.py
| ... | ... | @@ -30,7 +30,7 @@ dict_interpolation = { |
| 30 | 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 | 34 | for obj in (pose_bones): |
| 35 | 35 | obj.bone.select = True |
| 36 | 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 | 39 | return current_frame |
| 40 | 40 | |
| 41 | 41 | def pose_default(current_frame = 0, frame_jump = 0, actions = bpy.data.actions): |
| 42 | - result = current_frame | |
| 43 | 42 | for action in actions: |
| 44 | 43 | if (action.use_fake_user): |
| 45 | 44 | bpy.context.object.pose_library = action |
| 46 | 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 | 49 | def main(): |
| 50 | + util.set_pose_mode() | |
| 51 | 51 | util.delete_all_keyframes() |
| 52 | 52 | util.configure_output() |
| 53 | 53 | bpy.context.scene.animation_data_create() |
| ... | ... | @@ -57,7 +57,7 @@ def main(): |
| 57 | 57 | js_movimentos = js_input['movimentos'] |
| 58 | 58 | frame_jump = dict_interpolation[js_input['interpolacao']] |
| 59 | 59 | |
| 60 | - endFrame = pose_default(0) | |
| 60 | + endFrame = pose_default(0, frame_jump) | |
| 61 | 61 | timeline_mao_esquerda = 0 |
| 62 | 62 | timeline_mao_direita = 0 |
| 63 | 63 | timeline_facial = 0 |
| ... | ... | @@ -105,7 +105,9 @@ def main(): |
| 105 | 105 | endFrame += frame_jump |
| 106 | 106 | |
| 107 | 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 | 111 | util.render_sign(js_input["userId"], js_input["sinal"], endFrame) |
| 110 | 112 | |
| 111 | 113 | except: | ... | ... |
param.json
| 1 | 1 | { |
| 2 | 2 | "userId": "lavid", |
| 3 | - "nome_sinal": "Modelo JSON", | |
| 4 | - "velocidade_interpolacao": "lento|normal|rapido", | |
| 3 | + "sinal": "Modelo JSON", | |
| 4 | + "interpolacao": "lento|normal|rapido", | |
| 5 | 5 | "movimentos": [ |
| 6 | 6 | { |
| 7 | 7 | "facial": { |
| 8 | - "expressao": 21, | |
| 8 | + "expressao": 0..21, | |
| 9 | + "transicao": "lento|normal|rapido", | |
| 9 | 10 | "duracao": "lento|normal|rapido" |
| 10 | 11 | }, |
| 11 | 12 | "mao_esquerda": { |
| 12 | - "movimento": "semicircular", | |
| 13 | 13 | "circular": { |
| 14 | 14 | "plano": "frente-esquerda|frente-cima|esquerda-cima", |
| 15 | 15 | "raio": "pequeno|medio|grande", |
| 16 | 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 | 23 | "semicircular": { |
| 24 | 24 | "plano": "frente-esquerda|frente-cima|esquerda-cima", |
| 25 | 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 | 32 | "contato": { |
| 34 | 33 | "alisar": { |
| 35 | 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 | 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 | 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 | 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 | 55 | "espiral": { |
| 64 | 56 | "plano": "frente-esquerda|frente-cima|esquerda-cima", |
| 65 | 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 | 64 | "helicoidal": { |
| 73 | 65 | "plano": "frente-esquerda|frente-cima|esquerda-cima", |
| 74 | 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 | 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 | 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 | 88 | "senoidal": { |
| 93 | 89 | "direcao": "frente|esquerda|cima", |
| 94 | - "direcao_oposta": false, | |
| 90 | + "direcao_oposta": true|false, | |
| 95 | 91 | "eixo_fixo": "frente-tras|esquerda-direita|cima-baixo", |
| 96 | 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 | 98 | "mao_direita": { |
| 103 | 99 | } |
| 104 | - }, | |
| 105 | - { | |
| 106 | 100 | } |
| 107 | 101 | ] |
| 108 | 102 | } | ... | ... |
util.py
| ... | ... | @@ -2,10 +2,10 @@ |
| 2 | 2 | |
| 3 | 3 | import bpy |
| 4 | 4 | import math |
| 5 | -import pyutil | |
| 6 | 5 | import os |
| 7 | 6 | import sys |
| 8 | 7 | import copy |
| 8 | +import pyutil | |
| 9 | 9 | from bmesh_collision import bmesh_check_intersect_objects |
| 10 | 10 | |
| 11 | 11 | armature = bpy.context.scene.objects.get('Armature.001') |
| ... | ... | @@ -71,10 +71,12 @@ def deselect_bones(bones = bpy.context.object.pose.bones): |
| 71 | 71 | pose_bone.bone.select = False |
| 72 | 72 | return |
| 73 | 73 | |
| 74 | -def delete_all_keyframes(): | |
| 74 | +def set_pose_mode(): | |
| 75 | 75 | bpy.ops.object.mode_set(mode = 'OBJECT') |
| 76 | 76 | bpy.ops.object.select_all(action = "DESELECT") |
| 77 | 77 | bpy.ops.object.mode_set(mode = 'POSE') |
| 78 | + | |
| 79 | +def delete_all_keyframes(): | |
| 78 | 80 | bpy.context.active_object.animation_data_clear() |
| 79 | 81 | for obj in bpy.data.objects: |
| 80 | 82 | obj.animation_data_clear() |
| ... | ... | @@ -116,7 +118,7 @@ def resetIKPosition(isRightHand): |
| 116 | 118 | def resetBnMaoPosition(isRightHand): |
| 117 | 119 | armature.pose_library = bpy.data.actions[orient_direita_id if isRightHand else orient_esquerda_id] |
| 118 | 120 | bpy.ops.poselib.apply_pose(pose_index = 0) |
| 119 | - | |
| 121 | + | |
| 120 | 122 | def get_bone_data_from_frame(bone, positionFrame, path): |
| 121 | 123 | scene = bpy.context.scene |
| 122 | 124 | frame_current = scene.frame_current |
| ... | ... | @@ -164,7 +166,7 @@ def check_collision(objName, otherObjName, initFrame, endFrame): |
| 164 | 166 | frame_current = scene.frame_current |
| 165 | 167 | startFrame = initFrame + int(math.fabs((endFrame - initFrame)/2)) |
| 166 | 168 | collisionFrame = -1 |
| 167 | - | |
| 169 | + | |
| 168 | 170 | for i in range(startFrame, endFrame + 1, 1): |
| 169 | 171 | scene.frame_set(i) |
| 170 | 172 | obj = scene.objects.get(objName) | ... | ... |