diff options
Diffstat (limited to 'scripts/content_tools/skel_tool.py')
-rw-r--r-- | scripts/content_tools/skel_tool.py | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/scripts/content_tools/skel_tool.py b/scripts/content_tools/skel_tool.py index 7fefa59293..26f63326f1 100644 --- a/scripts/content_tools/skel_tool.py +++ b/scripts/content_tools/skel_tool.py @@ -252,8 +252,6 @@ def slider_info(ladtree,skeltree): scale = float_tuple(b.get("scale","0 0 0")) offset = float_tuple(b.get("offset","0 0 0")) print " bone", b.get("name"), "scale", scale, "offset", offset - print " scale",scale - print " offset",offset scale_min = [value_min * s for s in scale] scale_max = [value_max * s for s in scale] offset_min = [value_min * t for t in offset] @@ -296,12 +294,40 @@ def validate_lad_tree(ladtree,skeltree,orig_ladtree): # print etree.tostring(skel_param) # for k,v in skel_param.attrib.iteritems(): # print k,"->",v - #print "skel_param",skel_param_name for bone in skel_param.iter("bone"): bone_name = bone.get("name") if not bone_name in bone_names: print "skel param references invalid bone",bone_name print etree.tostring(bone) + bone_scale = float_tuple(bone.get("scale","0 0 0")) + bone_offset = float_tuple(bone.get("offset","0 0 0")) + param = bone.getparent().getparent() + if bone_scale==(0, 0, 0) and bone_offset==(0, 0, 0): + print "no-op bone",bone_name,"in param",param.get("id","-1") + # check symmetry of sliders + if "Right" in bone.get("name"): + left_name = bone_name.replace("Right","Left") + left_bone = None + for b in skel_param.iter("bone"): + if b.get("name")==left_name: + left_bone = b + if left_bone is None: + print "left_bone not found",left_name,"in",param.get("id","-1") + else: + left_scale = float_tuple(left_bone.get("scale","0 0 0")) + left_offset = float_tuple(left_bone.get("offset","0 0 0")) + if left_scale != bone_scale: + print "scale mismatch between",bone_name,"and",left_name,"in param",param.get("id","-1") + param_id = int(param.get("id","-1")) + if param_id in [661]: # shear + expected_offset = tuple([bone_offset[0],bone_offset[1],-bone_offset[2]]) + elif param_id in [30656, 31663, 32663]: # shift + expected_offset = bone_offset + else: + expected_offset = tuple([bone_offset[0],-bone_offset[1],bone_offset[2]]) + if left_offset != expected_offset: + print "offset mismatch between",bone_name,"and",left_name,"in param",param.get("id","-1") + drivers = {} for driven_param in ladtree.iter("driven"): driver = driven_param.getparent().getparent() @@ -418,7 +444,7 @@ if __name__ == "__main__": parser.add_argument("--list", action="store_true", help="list joint names") parser.add_argument("--compare", help="alternate skeleton file to compare") parser.add_argument("--slider_info", help="information about the lad file sliders and affected bones", action="store_true") - parser.add_argument("infilename", help="name of a skel .xml file to input", default="avatar_skeleton.xml") + parser.add_argument("infilename", nargs="?", help="name of a skel .xml file to input", default="avatar_skeleton.xml") parser.add_argument("outfilename", nargs="?", help="name of a skel .xml file to output") args = parser.parse_args() |