示例#1
0
        /// <summary>
        /// 指定された割合分割されたベジエを得るメソッド
        /// </summary>
        /// <param name="num">最大、最小はMaxRatio,MinRatioから</param>
        /// <param name="bcps1">分割1</param>
        /// <param name="bcps2">分割2</param>
        public void GetDevidedBeziers(float num, out BezierControlPoint[] bcps1, out BezierControlPoint[] bcps2)
        {
            bcps1 = null;
            bcps2 = null;
            if (bcps == null || bcps.Length == 0)
            {
                return;
            }
            if (num < MinRatio)
            {
                num = MinRatio;
            }
            else if (num > MaxRatio)
            {
                num = MaxRatio;
            }
            //find where
            float sumnum = 0;
            float rest = 0;
            BezierControlPoint previous = null, next = null;
            int foundindex = -1;

            for (int i = 0; i < bcps.Length; i++)
            {
                BezierControlPoint bcp = bcps[i];
                if (previous != null)
                {
                    float ratio = eachlength[i - 1] / length * MaxRatio;
                    if (sumnum + ratio >= num || (sumnum + ratio) >= MaxRatio - 0.0009765625)
                    {
                        next       = bcp;
                        rest       = num - sumnum;
                        foundindex = i;
                        break;
                    }
                    sumnum += ratio;
                }
                previous = bcp;
            }
            if (foundindex != -1)
            {
                float targetratio = 1 - rest / MaxRatio * length / eachlength[foundindex - 1];
                BezierCaliculate.GetDevidedBeziers(previous, next, targetratio, out BezierControlPoint bcp1, out BezierControlPoint bcp2, out BezierControlPoint bcp3);
                bcps1 = new BezierControlPoint[foundindex + 1];
                bcps2 = new BezierControlPoint[BCPS.Length - foundindex + 1];
                for (int i = 0; i < foundindex - 1; i++)
                {
                    bcps1[i] = BCPS[i].Clone();
                }
                bcps1[foundindex - 1] = bcp1;
                bcps1[foundindex]     = bcp2.Clone();
                bcps2[0] = bcp2;
                bcps2[1] = bcp3;
                for (int i = foundindex + 1; i < BCPS.Length; i++)
                {
                    bcps2[i - foundindex + 1] = BCPS[i].Clone();
                }
                return;
            }
        }