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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-08-26 10:39:29 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-08-26 10:39:29 +0400
commitf453fc9baecd168b6e8ca06f525d563a376d9bb6 (patch)
treed44656dd878e86b9a75240bec176e5ffb10aff8d /io_anim_bvh
parent5f26ea87de0cce69559990bed2dcc45b973f53fe (diff)
added X rotate 90d on import by default, still need to to the reverse on export.
Diffstat (limited to 'io_anim_bvh')
-rw-r--r--io_anim_bvh/__init__.py40
-rw-r--r--io_anim_bvh/import_bvh.py55
2 files changed, 78 insertions, 17 deletions
diff --git a/io_anim_bvh/__init__.py b/io_anim_bvh/__init__.py
index 383d3bb9..53a4db09 100644
--- a/io_anim_bvh/__init__.py
+++ b/io_anim_bvh/__init__.py
@@ -46,7 +46,10 @@ from bpy.props import (StringProperty,
BoolProperty,
EnumProperty,
)
-from bpy_extras.io_utils import ImportHelper, ExportHelper
+from bpy_extras.io_utils import (ImportHelper,
+ ExportHelper,
+ axis_conversion,
+ )
class ImportBVH(bpy.types.Operator, ImportHelper):
@@ -100,8 +103,41 @@ class ImportBVH(bpy.types.Operator, ImportHelper):
default='NATIVE',
)
+ axis_forward = EnumProperty(
+ name="Forward",
+ items=(('X', "X Forward", ""),
+ ('Y', "Y Forward", ""),
+ ('Z', "Z Forward", ""),
+ ('-X', "-X Forward", ""),
+ ('-Y', "-Y Forward", ""),
+ ('-Z', "-Z Forward", ""),
+ ),
+ default='-Z',
+ )
+
+ axis_up = EnumProperty(
+ name="Up",
+ items=(('X', "X Up", ""),
+ ('Y', "Y Up", ""),
+ ('Z', "Z Up", ""),
+ ('-X', "-X Up", ""),
+ ('-Y', "-Y Up", ""),
+ ('-Z', "-Z Up", ""),
+ ),
+ default='Y',
+ )
+
def execute(self, context):
- keywords = self.as_keywords(ignore=("filter_glob",))
+ keywords = self.as_keywords(ignore=("axis_forward",
+ "axis_up",
+ "filter_glob",
+ ))
+
+ global_matrix = axis_conversion(from_forward=self.axis_forward,
+ from_up=self.axis_up,
+ ).to_4x4()
+
+ keywords["global_matrix"] = global_matrix
from . import import_bvh
return import_bvh.load(self, context, **keywords)
diff --git a/io_anim_bvh/import_bvh.py b/io_anim_bvh/import_bvh.py
index f8fd18e9..a21a1c1c 100644
--- a/io_anim_bvh/import_bvh.py
+++ b/io_anim_bvh/import_bvh.py
@@ -43,13 +43,13 @@ class BVH_Node(object):
'has_rot', # Conveinience function, bool, same as (channels[3]!=-1 or channels[4]!=-1 channels[5]!=-1)
'temp') # use this for whatever you want
- _eul_order_lookup = {
- (0, 1, 2): 'XYZ',
- (0, 2, 1): 'XZY',
- (1, 0, 2): 'YXZ',
- (1, 2, 0): 'YZX',
- (2, 0, 1): 'ZXY',
- (2, 1, 0): 'ZYX'}
+ _eul_order_lookup = {(0, 1, 2): 'XYZ',
+ (0, 2, 1): 'XZY',
+ (1, 0, 2): 'YXZ',
+ (1, 2, 0): 'YZX',
+ (2, 0, 1): 'ZXY',
+ (2, 1, 0): 'ZYX',
+ }
def __init__(self, name, rest_head_world, rest_head_local, parent, channels, rot_order):
self.name = name
@@ -331,7 +331,14 @@ def bvh_node_dict2objects(context, bvh_name, bvh_nodes, rotate_mode='NATIVE', fr
return objects
-def bvh_node_dict2armature(context, bvh_name, bvh_nodes, rotate_mode='XYZ', frame_start=1, IMPORT_LOOP=False):
+def bvh_node_dict2armature(context,
+ bvh_name,
+ bvh_nodes,
+ rotate_mode='XYZ',
+ frame_start=1,
+ IMPORT_LOOP=False,
+ global_matrix=None,
+ ):
if frame_start < 1:
frame_start = 1
@@ -507,10 +514,24 @@ def bvh_node_dict2armature(context, bvh_name, bvh_nodes, rotate_mode='XYZ', fram
for bez in cu.keyframe_points:
bez.interpolation = 'LINEAR'
+ # finally apply matrix
+ arm_ob.matrix_world = global_matrix
+ bpy.ops.object.transform_apply(rotation=True)
+
return arm_ob
-def load(operator, context, filepath="", target='ARMATURE', rotate_mode='NATIVE', global_scale=1.0, use_cyclic=False, frame_start=1):
+def load(operator,
+ context,
+ filepath="",
+ target='ARMATURE',
+ rotate_mode='NATIVE',
+ global_scale=1.0,
+ use_cyclic=False,
+ frame_start=1,
+ global_matrix=None,
+ ):
+
import time
t1 = time.time()
print('\tparsing bvh %r...' % filepath, end="")
@@ -530,15 +551,19 @@ def load(operator, context, filepath="", target='ARMATURE', rotate_mode='NATIVE'
if target == 'ARMATURE':
bvh_node_dict2armature(context, bvh_name, bvh_nodes,
- rotate_mode=rotate_mode,
- frame_start=frame_start,
- IMPORT_LOOP=use_cyclic)
+ rotate_mode=rotate_mode,
+ frame_start=frame_start,
+ IMPORT_LOOP=use_cyclic,
+ global_matrix=global_matrix,
+ )
elif target == 'OBJECT':
bvh_node_dict2objects(context, bvh_name, bvh_nodes,
- rotate_mode=rotate_mode,
- frame_start=frame_start,
- IMPORT_LOOP=use_cyclic)
+ rotate_mode=rotate_mode,
+ frame_start=frame_start,
+ IMPORT_LOOP=use_cyclic,
+ # global_matrix=global_matrix, # TODO
+ )
else:
raise Exception("invalid type")