// 切り口に近づく向きに曲線の点をついかする 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); }