summaryrefslogtreecommitdiff
path: root/scripts/content_tools/skel_tool.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/content_tools/skel_tool.py')
-rw-r--r--scripts/content_tools/skel_tool.py34
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()