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); }
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); }