Ejemplo n.º 1
0
        private WW.Cad.Drawing.Polyline2D2N method_26(
            DxfVertex2DCollection points,
            bool isInterpolatedPoint)
        {
            bool closed = this.Closed;
            int  count  = points.Count;

            WW.Cad.Drawing.Polyline2D2N polyline2D2N = new WW.Cad.Drawing.Polyline2D2N(count, closed);
            if (count > 0)
            {
                DxfVertex2D dxfVertex2D = points[0];
                for (int index = 1; index < count; ++index)
                {
                    DxfVertex2D point = points[index];
                    if (!(dxfVertex2D.Position == point.Position))
                    {
                        Vector2D unit     = (point.Position - dxfVertex2D.Position).GetUnit();
                        Vector2D vector2D = new Vector2D(-unit.Y, unit.X);
                        polyline2D2N.Add(new Point2D2N(dxfVertex2D.Position, vector2D, vector2D)
                        {
                            IsInterpolatedPoint = isInterpolatedPoint
                        });
                        dxfVertex2D = point;
                    }
                }
                if (closed)
                {
                    DxfVertex2D point = points[0];
                    if (dxfVertex2D.Position != point.Position)
                    {
                        Vector2D unit     = (point.Position - dxfVertex2D.Position).GetUnit();
                        Vector2D vector2D = new Vector2D(-unit.Y, unit.X);
                        polyline2D2N.Add(new Point2D2N(dxfVertex2D.Position, vector2D, vector2D)
                        {
                            IsInterpolatedPoint = isInterpolatedPoint
                        });
                    }
                }
                else
                {
                    polyline2D2N.Add(new Point2D2N(dxfVertex2D.Position)
                    {
                        IsInterpolatedPoint = isInterpolatedPoint
                    });
                }
            }
            return(polyline2D2N);
        }
Ejemplo n.º 2
0
        private WW.Cad.Drawing.Polyline2D2N method_29(int power, int noOfSplineLineParts)
        {
            WW.Cad.Drawing.Polyline2D2N polyline2D2N = new WW.Cad.Drawing.Polyline2D2N();
            int count = this.dxfVertex2DCollection_0.Count;

            if (count <= power)
            {
                return(this.method_21());
            }
            BSplineD bsplineD = new BSplineD(power, count, this.Closed);

            double[] result = new double[power + 1];
            double   maxU   = bsplineD.MaxU;
            int      num1   = noOfSplineLineParts + 1;
            double   num2   = maxU / (double)(num1 - 1);

            double[,] derivatives = new double[2, power + 1];
            Point2D2N point2D2N1 = (Point2D2N)null;
            int       num3       = 0;
            double    u          = 0.0;

            while (num3 < num1)
            {
                int knotSpanIndex = bsplineD.GetKnotSpanIndex(u);
                bsplineD.EvaluateBasisFunctions(knotSpanIndex, u, result);
                WW.Math.Point2D zero1 = WW.Math.Point2D.Zero;
                for (int index = 0; index <= power; ++index)
                {
                    DxfVertex2D dxfVertex2D = this.dxfVertex2DCollection_0[(knotSpanIndex - power + index) % count];
                    zero1 += result[index] * new Vector2D(dxfVertex2D.Position);
                }
                bsplineD.GetDerivativesBasisFunctions(knotSpanIndex, u, 1, derivatives);
                Vector2D zero2 = Vector2D.Zero;
                for (int index = 0; index <= power; ++index)
                {
                    zero2 += (Vector2D)this.dxfVertex2DCollection_0[(knotSpanIndex - power + index) % count].Position * derivatives[1, index];
                }
                Vector2D  unit       = new Vector2D(-zero2.Y, zero2.X).GetUnit();
                Point2D2N point2D2N2 = new Point2D2N(zero1)
                {
                    IsInterpolatedPoint = true
                };
                point2D2N2.StartNormal = unit;
                if (point2D2N1 != null)
                {
                    point2D2N1.EndNormal = unit;
                }
                polyline2D2N.Add(point2D2N2);
                point2D2N1 = point2D2N2;
                ++num3;
                u += num2;
            }
            if (this.Closed)
            {
                polyline2D2N[num1 - 1].EndNormal = polyline2D2N[0].StartNormal;
            }
            return(polyline2D2N);
        }