forked from bartvdbraak/blender
print_m3/m4 didnt use const char *, which gave an errror with passing strings & pedantic warnings.
also minor rename in bvh export
This commit is contained in:
parent
5cef085f77
commit
149955b3e2
@ -24,7 +24,7 @@
|
||||
import bpy
|
||||
|
||||
|
||||
def _read(context, filepath, frame_start, frame_end, global_scale=1.0):
|
||||
def write_armature(context, filepath, frame_start, frame_end, global_scale=1.0):
|
||||
|
||||
from mathutils import Matrix, Vector, Euler
|
||||
from math import degrees
|
||||
@ -34,40 +34,40 @@ def _read(context, filepath, frame_start, frame_end, global_scale=1.0):
|
||||
obj = context.object
|
||||
arm = obj.data
|
||||
|
||||
# Build a dictionary of bone children.
|
||||
# None is for parentless bones
|
||||
bone_children = {None: []}
|
||||
# Build a dictionary of children.
|
||||
# None for parentless
|
||||
children = {None: []}
|
||||
|
||||
# initialize with blank lists
|
||||
for bone in arm.bones:
|
||||
bone_children[bone.name] = []
|
||||
children[bone.name] = []
|
||||
|
||||
for bone in arm.bones:
|
||||
bone_children[getattr(bone.parent, "name", None)].append(bone.name)
|
||||
children[getattr(bone.parent, "name", None)].append(bone.name)
|
||||
|
||||
# sort the children
|
||||
for children_list in bone_children.values():
|
||||
for children_list in children.values():
|
||||
children_list.sort()
|
||||
|
||||
# bone name list in the order that the bones are written
|
||||
bones_serialized_names = []
|
||||
serialized_names = []
|
||||
|
||||
bone_locs = {}
|
||||
node_locations = {}
|
||||
|
||||
file.write("HIERARCHY\n")
|
||||
|
||||
def write_bones_recursive(bone_name, indent):
|
||||
my_bone_children = bone_children[bone_name]
|
||||
def write_recursive_nodes(bone_name, indent):
|
||||
my_children = children[bone_name]
|
||||
|
||||
indent_str = "\t" * indent
|
||||
|
||||
bone = arm.bones[bone_name]
|
||||
loc = bone.head_local
|
||||
bone_locs[bone_name] = loc
|
||||
node_locations[bone_name] = loc
|
||||
|
||||
# make relative if we can
|
||||
if bone.parent:
|
||||
loc = loc - bone_locs[bone.parent.name]
|
||||
loc = loc - node_locations[bone.parent.name]
|
||||
|
||||
if indent:
|
||||
file.write("%sJOINT %s\n" % (indent_str, bone_name))
|
||||
@ -78,31 +78,31 @@ def _read(context, filepath, frame_start, frame_end, global_scale=1.0):
|
||||
file.write("%s\tOFFSET %.6f %.6f %.6f\n" % (indent_str, loc.x * global_scale, loc.y * global_scale, loc.z * global_scale))
|
||||
file.write("%s\tCHANNELS 6 Xposition Yposition Zposition Xrotation Yrotation Zrotation\n" % indent_str)
|
||||
|
||||
if my_bone_children:
|
||||
if my_children:
|
||||
# store the location for the children
|
||||
# to het their relative offset
|
||||
|
||||
# Write children
|
||||
for child_bone in my_bone_children:
|
||||
bones_serialized_names.append(child_bone)
|
||||
write_bones_recursive(child_bone, indent + 1)
|
||||
for child_bone in my_children:
|
||||
serialized_names.append(child_bone)
|
||||
write_recursive_nodes(child_bone, indent + 1)
|
||||
|
||||
else:
|
||||
# Write the bone end.
|
||||
file.write("%s\tEnd Site\n" % indent_str)
|
||||
file.write("%s\t{\n" % indent_str)
|
||||
loc = bone.tail_local - bone_locs[bone_name]
|
||||
loc = bone.tail_local - node_locations[bone_name]
|
||||
file.write("%s\t\tOFFSET %.6f %.6f %.6f\n" % (indent_str, loc.x * global_scale, loc.y * global_scale, loc.z * global_scale))
|
||||
file.write("%s\t}\n" % indent_str)
|
||||
|
||||
file.write("%s}\n" % indent_str)
|
||||
|
||||
if len(bone_children[None]) == 1:
|
||||
key = bone_children[None][0]
|
||||
bones_serialized_names.append(key)
|
||||
if len(children[None]) == 1:
|
||||
key = children[None][0]
|
||||
serialized_names.append(key)
|
||||
indent = 0
|
||||
|
||||
write_bones_recursive(key, indent)
|
||||
write_recursive_nodes(key, indent)
|
||||
|
||||
else:
|
||||
# Write a dummy parent node
|
||||
@ -113,11 +113,11 @@ def _read(context, filepath, frame_start, frame_end, global_scale=1.0):
|
||||
key = None
|
||||
indent = 1
|
||||
|
||||
write_bones_recursive(key, indent)
|
||||
write_recursive_nodes(key, indent)
|
||||
|
||||
file.write("}\n")
|
||||
|
||||
# redefine bones as sorted by bones_serialized_names
|
||||
# redefine bones as sorted by serialized_names
|
||||
# so we can write motion
|
||||
|
||||
class decorated_bone(object):
|
||||
@ -164,7 +164,7 @@ def _read(context, filepath, frame_start, frame_end, global_scale=1.0):
|
||||
else:
|
||||
return "[\"%s\" root bone]\n" % (self.name)
|
||||
|
||||
bones_decorated = [decorated_bone(bone_name) for bone_name in bones_serialized_names]
|
||||
bones_decorated = [decorated_bone(bone_name) for bone_name in serialized_names]
|
||||
|
||||
# Assign parents
|
||||
bones_decorated_dict = {}
|
||||
@ -224,7 +224,7 @@ def save(operator, context, filepath="",
|
||||
global_scale=1.0,
|
||||
):
|
||||
|
||||
_read(context, filepath,
|
||||
write_armature(context, filepath,
|
||||
frame_start=frame_start,
|
||||
frame_end=frame_end,
|
||||
global_scale=global_scale,
|
||||
|
@ -165,8 +165,8 @@ int is_negative_m4(float mat[4][4]);
|
||||
|
||||
/*********************************** Other ***********************************/
|
||||
|
||||
void print_m3(char *str, float M[3][3]);
|
||||
void print_m4(char *str, float M[3][4]);
|
||||
void print_m3(const char *str, float M[3][3]);
|
||||
void print_m4(const char *str, float M[3][4]);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -1224,7 +1224,7 @@ void loc_axisangle_size_to_mat4(float mat[4][4], const float loc[3], const float
|
||||
|
||||
/*********************************** Other ***********************************/
|
||||
|
||||
void print_m3(char *str, float m[][3])
|
||||
void print_m3(const char *str, float m[][3])
|
||||
{
|
||||
printf("%s\n", str);
|
||||
printf("%f %f %f\n",m[0][0],m[1][0],m[2][0]);
|
||||
@ -1233,7 +1233,7 @@ void print_m3(char *str, float m[][3])
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void print_m4(char *str, float m[][4])
|
||||
void print_m4(const char *str, float m[][4])
|
||||
{
|
||||
printf("%s\n", str);
|
||||
printf("%f %f %f %f\n",m[0][0],m[1][0],m[2][0],m[3][0]);
|
||||
|
Loading…
Reference in New Issue
Block a user