Beispiel #1
0
        public void UpdateSkeletalControlPoints(SkeletonAnnotation refAnnotation)
        {
            if (an == null)
            {
                return;
            }

            if (arap == null)
            {
                return;
            }

            var orgAn = new SkeletonAnnotation(an, false);

            foreach (var j in an.joints)
            {
                foreach (var jr in refAnnotation.joints)
                {
                    if (j.name == jr.name)
                    {
                        j.position = jr.position;
                        break;
                    }
                }
            }

            var transformDict = GetSkeletalTransforms(an, orgAn);

            foreach (var kv in boneToControls)
            {
                if (kv.Value == null || kv.Value.Count <= 0)
                {
                    continue;
                }
                var bone = kv.Key;
                foreach (var orgPt in kv.Value)
                {
                    if (!transformDict.ContainsKey(bone))
                    {
                        continue;
                    }
                    var transform = transformDict[bone];
                    var pt        = arap.OrgToCurControlPoint(orgPt);
                    if (pt == null)
                    {
                        continue;
                    }
                    var to = FMath.Transform(pt.Value, transform);
                    arap.TranslateControlPoint(pt.Value, to, false);
                }
            }
        }