Пример #1
0
        private Polyline2D method_24(DxfVertex2DCollection points)
        {
            bool       closed     = this.Closed;
            int        count      = points.Count;
            Polyline2D polyline2D = new Polyline2D(count, closed);

            if (count > 0)
            {
                DxfVertex2D dxfVertex2D = points[0];
                polyline2D.Add(dxfVertex2D.Position);
                for (int index = 1; index < count; ++index)
                {
                    DxfVertex2D point = points[index];
                    if (!(dxfVertex2D.Position == point.Position))
                    {
                        polyline2D.Add(point.Position);
                        dxfVertex2D = point;
                    }
                }
                if (closed && count > 1 && polyline2D[0] == polyline2D[polyline2D.Count - 1])
                {
                    polyline2D.RemoveAt(polyline2D.Count - 1);
                }
            }
            return(polyline2D);
        }
Пример #2
0
        private static void smethod_11(
            Polyline2D polyline,
            Point2D p0,
            Point2D p1,
            Point2D p2,
            Point2D p3,
            double epsilonSquared)
        {
            Vector2D dp01 = p1 - p0;
            Vector2D dp12 = p2 - p1;
            Vector2D dp23 = p3 - p2;

            if (ShapeTool.smethod_10(dp01, dp12, dp23, p3 - p0, epsilonSquared))
            {
                polyline.Add(p1);
                polyline.Add(p2);
                polyline.Add(p3);
            }
            else
            {
                Point2D  p1_1      = p0 + 0.5 * dp01;
                Point2D  point2D1  = p1 + 0.5 * dp12;
                Point2D  p2_1      = p2 + 0.5 * dp23;
                Vector2D vector2D1 = point2D1 - p1_1;
                Vector2D vector2D2 = p2_1 - point2D1;
                Point2D  p2_2      = p1_1 + 0.5 * vector2D1;
                Point2D  p1_2      = point2D1 + 0.5 * vector2D2;
                Vector2D vector2D3 = p1_2 - p2_2;
                Point2D  point2D2  = p2_2 + 0.5 * vector2D3;
                ShapeTool.smethod_11(polyline, p0, p1_1, p2_2, point2D2, epsilonSquared);
                ShapeTool.smethod_11(polyline, point2D2, p1_2, p2_1, p3, epsilonSquared);
            }
        }
Пример #3
0
        private static List <Polyline2D> smethod_7(
            Polyline2D[] borders,
            Point2D reference,
            Vector2D offset,
            Vector2D direction,
            double[] dashPattern,
            bool fillInterior)
        {
            IList <Segment2D[]> segment2DArrayList = (IList <Segment2D[]>)Class811.smethod_8(borders, reference, offset, direction, dashPattern, fillInterior);
            List <Polyline2D>   polyline2DList     = new List <Polyline2D>();

            foreach (Segment2D[] segment2DArray in (IEnumerable <Segment2D[]>)segment2DArrayList)
            {
                foreach (Segment2D segment2D in segment2DArray)
                {
                    Polyline2D polyline2D = new Polyline2D();
                    polyline2D.Add(new Point2D(segment2D.Start.X, segment2D.Start.Y));
                    if (segment2D.Start != segment2D.End)
                    {
                        polyline2D.Add(new Point2D(segment2D.End.X, segment2D.End.Y));
                    }
                    polyline2DList.Add(polyline2D);
                }
            }
            return(polyline2DList);
        }
Пример #4
0
        private static void smethod_7(
            Polyline2D polyline,
            Point2D p0,
            Point2D p1,
            Point2D p2,
            double epsilonSquared)
        {
            Vector2D dp02 = p2 - p0;
            Vector2D dp01 = p1 - p0;
            Vector2D dp12 = p2 - p1;

            if (ShapeTool.smethod_9(dp01, dp12, dp02, epsilonSquared))
            {
                polyline.Add(p1);
                polyline.Add(p2);
            }
            else
            {
                Point2D  p1_1     = p0 + 0.5 * dp01;
                Point2D  p1_2     = p1 + 0.5 * dp12;
                Vector2D vector2D = p1_2 - p1_1;
                Point2D  point2D  = p1_1 + 0.5 * vector2D;
                ShapeTool.smethod_7(polyline, p0, p1_1, point2D, epsilonSquared);
                ShapeTool.smethod_7(polyline, point2D, p1_2, p2, epsilonSquared);
            }
        }
Пример #5
0
        protected override Polyline2D vmethod_1(ns9.Class107 edge)
        {
            Point3D     location1        = edge.StartVertex.Point.Location;
            Point3D     location2        = edge.EndVertex.Point.Location;
            Polyline2D  polyline2D       = new Polyline2D(2);
            Interface26 pointParamMapper = this.PointParamMapper;

            polyline2D.Add(pointParamMapper.imethod_0(location1));
            polyline2D.Add(pointParamMapper.imethod_0(location2));
            return(polyline2D);
        }
Пример #6
0
        public Polyline2D ToPolyline2D()
        {
            Polyline2D polyline2D = new Polyline2D(this.Count, this.Closed);

            foreach (Vector4D vector4D in (List <Vector4D>) this)
            {
                polyline2D.Add(vector4D.ToPoint2D());
            }
            return(polyline2D);
        }
Пример #7
0
        protected override Polyline2D vmethod_1(ns9.Class107 edge)
        {
            Point3D    location1  = edge.StartVertex.Point.Location;
            Point3D    location2  = edge.EndVertex.Point.Location;
            Polyline2D polyline2D = new Polyline2D(2);

            if (location1 == location2 && this.double_2 != 0.0)
            {
                Point3D  point3D1 = new Point3D(this.class247_0.Position);
                double   length   = this.class247_0.MajorAxis.GetLength();
                Vector3D normal   = this.class247_0.Normal;
                normal.Normalize();
                Point3D point3D2 = point3D1 - normal * (length / System.Math.Tan(this.double_2));
                if ((point3D2 - location1).GetLength() < 0.0001 * length)
                {
                    double x1 = Vector3D.DotProduct(point3D2 - point3D1, normal) / System.Math.Cos(this.double_2);
                    if (this.class690_0.Value)
                    {
                        double x2 = -x1;
                        polyline2D.Add(new Point2D(x2, 2.0 * System.Math.PI));
                        polyline2D.Add(new Point2D(x2, 4.0 * System.Math.PI / 3.0));
                        polyline2D.Add(new Point2D(x2, 2.0 * System.Math.PI / 3.0));
                        polyline2D.Add(new Point2D(x2, 0.0));
                    }
                    else
                    {
                        polyline2D.Add(new Point2D(x1, 0.0));
                        polyline2D.Add(new Point2D(x1, 2.0 * System.Math.PI / 3.0));
                        polyline2D.Add(new Point2D(x1, 4.0 * System.Math.PI / 3.0));
                        polyline2D.Add(new Point2D(x1, 2.0 * System.Math.PI));
                    }
                    return(polyline2D);
                }
            }
            Interface26 pointParamMapper = this.PointParamMapper;

            polyline2D.Add(pointParamMapper.imethod_0(location1));
            polyline2D.Add(pointParamMapper.imethod_0(location2));
            return(polyline2D);
        }
Пример #8
0
        public IShape2D ToShape2D(Matrix4D matrix)
        {
            Polyline2DCollection polyline2Dcollection = new Polyline2DCollection(this.ilist_0.Count);

            foreach (Polyline4D polyline4D in (IEnumerable <Polyline4D>) this.ilist_0)
            {
                Polyline2D polyline2D = new Polyline2D(polyline4D.Count, polyline4D.Closed);
                foreach (Vector4D vector in (List <Vector4D>)polyline4D)
                {
                    polyline2D.Add(matrix.TransformToPoint2D(vector));
                }
                polyline2Dcollection.Add(polyline2D);
            }
            return((IShape2D)polyline2Dcollection);
        }
Пример #9
0
        private FlatShape4D method_0(Matrix4D transform, Matrix4D inverse)
        {
            GeneralShape2D generalShape2D = new GeneralShape2D();

            foreach (Polyline4D polyline4D in (IEnumerable <Polyline4D>) this.ilist_0)
            {
                Polyline2D polyline2D = new Polyline2D(polyline4D.Closed);
                foreach (Vector4D point in (List <Vector4D>)polyline4D)
                {
                    polyline2D.Add(inverse.TransformTo2D(point));
                }
                generalShape2D.Append((IShape2D)polyline2D, false);
            }
            return(new FlatShape4D((IShape2D)generalShape2D, transform, this.IsFilled));
        }
Пример #10
0
        private Polyline2D method_30(int degree, GraphicsConfig config)
        {
            int count1 = this.dxfVertex2DCollection_0.Count;

            if (count1 <= degree)
            {
                return(this.method_18());
            }
            BSplineCurve2D bsplineCurve2D = new BSplineCurve2D(degree);

            bsplineCurve2D.AddKnots(BSplineD.CreateDefaultKnotValues(degree, count1, this.Closed));
            foreach (DxfVertex2D dxfVertex2D in (DxfHandledObjectCollection <DxfVertex2D>) this.dxfVertex2DCollection_0)
            {
                bsplineCurve2D.ControlPoints.AddLast(dxfVertex2D.Position);
            }
            if (this.Closed)
            {
                for (int index = 0; index < degree; ++index)
                {
                    bsplineCurve2D.ControlPoints.AddLast(this.dxfVertex2DCollection_0[index].Position);
                }
                double u = 0.0;
                LinkedListNode <double>          previousKnot1  = bsplineCurve2D.Knots.First;
                LinkedListNode <WW.Math.Point2D> previousPoint1 = bsplineCurve2D.ControlPoints.First;
                for (int index = 0; index < degree; ++index)
                {
                    previousKnot1 = previousKnot1.Next;
                }
                for (int index = 0; index < degree; ++index)
                {
                    bsplineCurve2D.InsertKnot(previousKnot1, previousPoint1, u);
                    previousKnot1  = previousKnot1.Next;
                    previousPoint1 = previousPoint1.Next;
                }
                double count2 = (double)this.dxfVertex2DCollection_0.Count;
                LinkedListNode <double>          previousKnot2  = bsplineCurve2D.Knots.Last.Previous;
                LinkedListNode <WW.Math.Point2D> previousPoint2 = bsplineCurve2D.ControlPoints.Last;
                for (int index = 0; index < degree; ++index)
                {
                    previousKnot2  = previousKnot2.Previous;
                    previousPoint2 = previousPoint2.Previous;
                }
                for (int index = 0; index < degree; ++index)
                {
                    bsplineCurve2D.InsertKnot(previousKnot2, previousPoint2, count2);
                    previousKnot2  = previousKnot2.Next;
                    previousPoint2 = previousPoint2.Next;
                }
                for (int index = 0; index < degree; ++index)
                {
                    bsplineCurve2D.ControlPoints.RemoveFirst();
                    bsplineCurve2D.Knots.RemoveFirst();
                    bsplineCurve2D.ControlPoints.RemoveLast();
                    bsplineCurve2D.Knots.RemoveLast();
                }
            }
            double epsilon = config.ShapeFlattenEpsilon;

            if (epsilon < 0.0)
            {
                Bounds2D bounds2D = new Bounds2D();
                foreach (DxfVertex2D dxfVertex2D in (DxfHandledObjectCollection <DxfVertex2D>) this.dxfVertex2DCollection_0)
                {
                    bounds2D.Update(dxfVertex2D.Position);
                }
                epsilon = !bounds2D.Initialized ? 0.01 : -epsilon *bounds2D.Delta.GetLength();
            }
            bsplineCurve2D.RefineKnots(epsilon, 20);
            Polyline2D polyline2D = new Polyline2D(this.Closed);

            foreach (WW.Math.Point2D controlPoint in bsplineCurve2D.ControlPoints)
            {
                polyline2D.Add(controlPoint);
            }
            return(polyline2D);
        }
Пример #11
0
        public static Polyline2DCollection GetFlattened(
            IShape2D shape,
            double epsilon)
        {
            if (epsilon == 0.0)
            {
                epsilon = -0.01;
            }
            Polyline2DCollection polyline2Dcollection = new Polyline2DCollection();

            if (epsilon < 0.0)
            {
                Bounds2D bounds = ShapeTool.GetBounds(shape);
                if (!bounds.Initialized)
                {
                    return(polyline2Dcollection);
                }
                epsilon *= -System.Math.Max(bounds.Delta.X, bounds.Delta.Y);
            }
            epsilon *= epsilon;
            ISegment2DIterator iterator = shape.CreateIterator();

            if (iterator.MoveNext())
            {
                Point2D[]  points   = new Point2D[3];
                Polyline2D polyline = (Polyline2D)null;
                do
                {
                    switch (iterator.Current(points, 0))
                    {
                    case SegmentType.MoveTo:
                        polyline = new Polyline2D();
                        polyline2Dcollection.Add(polyline);
                        polyline.Add(points[0]);
                        break;

                    case SegmentType.LineTo:
                        polyline.Add(points[0]);
                        break;

                    case SegmentType.QuadTo:
                        ShapeTool.smethod_7(polyline, polyline[polyline.Count - 1], points[0], points[1], epsilon);
                        break;

                    case SegmentType.CubicTo:
                        ShapeTool.smethod_11(polyline, polyline[polyline.Count - 1], points[0], points[1], points[2], epsilon);
                        break;

                    case SegmentType.Close:
                        polyline.Closed = true;
                        if (polyline.Count > 1 && polyline[polyline.Count - 1] == polyline[0])
                        {
                            polyline.RemoveAt(polyline.Count - 1);
                            break;
                        }
                        break;
                    }
                }while (iterator.MoveNext());
            }
            return(polyline2Dcollection);
        }