Example #1
0
        /// <summary>
        /// 通过限定分段长度来对多段线变稀或者变密(保留首尾两个点)
        /// </summary>
        /// <param name="cs"></param>
        /// <param name="segLength">每一分段的长度</param>
        /// <returns></returns>
        public static CompositeCurve3d GetThinedPolyline(Curve3d cs, double segLength)
        {
            var startPara = cs.GetParameterOf(cs.StartPoint);
            var endPara   = cs.GetParameterOf(cs.EndPoint);
            var startPt   = cs.StartPoint;
            var endPt     = startPt;
            var para      = startPara;
            //
            var segCount = (int)Math.Ceiling((endPara - startPara) / segLength);
            var lines    = new Curve3d[segCount];

            // 最后一段的间距不由 segLength 控制
            for (int i = 0; i < segCount - 1; i++)
            {
                para += segLength;
                endPt = cs.EvaluatePoint(para);
                //
                lines[i] = new LineSegment3d(startPt, endPt);
                //
                startPt = endPt;
            }
            // 处理最后一段曲线
            lines[segCount - 1] = new LineSegment3d(startPt, cs.EndPoint);
            //
            return(new CompositeCurve3d(lines));
        }