Exemple #1
0
        // 切り口に近づく向きに曲線の点をついかする
        static List <List <PointF> > GetSortedCurves(List <PointF> path, Tuple <CharacterRange, CharacterRange> ranges, PatchSkeletonBone baseBone)
        {
            List <List <PointF> > curves = new List <List <PointF> >();

            foreach (var range in new[] { ranges.Item1, ranges.Item2 })
            {
                var ls = new List <PointF>();
                for (int i = range.First; i < range.First + range.Length; i++)
                {
                    ls.Add(path[FMath.Rem(i, path.Count)]);
                }
                curves.Add(ls);
            }

            // 向きを揃える
            curves[1].Reverse();

            // ボーンに対する位置関係を揃える
            PointF pt = path[FMath.Rem(ranges.Item2.First, path.Count)];

            if (FMath.GetSide(pt, baseBone.src.position, baseBone.dst.position) < 0)
            {
                var ls = curves[0];
                curves[0] = curves[1];
                curves[1] = ls;
            }

            return(curves);
        }