Exemple #1
0
        /// <summary>
        /// 添加关节。将新控制点添加到控制点列表中,并更新前面的样条曲线。
        /// </summary>
        /// <param name="spline">上一条样条曲线</param>
        /// <param name="point">当前点</param>
        public void AddJoint(SplineCurves spline, Vector3 point)
        {
            //前一根样条曲线不为null,所以更新前一根样条曲线的控制点列表,同时更新当前样条曲线的控制点列表。
            if (spline != null)
            {
                //前一根样条曲线是第1根样条曲线,更新它的Pk+1和Pk+2点
                if (spline.First)
                {
                    origin      = spline.origin;
                    start       = spline.start;
                    end         = point;
                    destination = point;
                    GenerateSamplePoint();
                    return;
                }
                //前一根样条曲线不是第1根样条曲线,仅更新它的Pk+2点
                else
                {
                    spline.destination = point;
                    spline.GenerateSamplePoint();

                    origin      = spline.start;
                    start       = spline.end;
                    end         = point;
                    destination = point;
                    GenerateSamplePoint();
                }
            }
            //前一根样条曲线spline为null,说明控制点列表中只有一个点,所以4个控制点样同。
            else
            {
                origin      = point;
                start       = point;
                end         = point;
                destination = point;
                First       = true;
            }
        }