Beispiel #1
0
        void BendPolyline(Point3d origin, Point3d fromp, Point3d to, ref Polyline pl)
        {
            Matrix3d M = BendMatrix(origin, fromp, to);

            bool forward = true;
            int  segment = CheckSegment(origin, fromp, ref pl, out forward);

            int     start, end;
            Point3d temp_p;             //временная точка для чтения вершины и преобразования ее

            if (forward)
            {
                start = segment + 1; end = pl.NumberOfVertices - 1;         //номера изменяемых вершин включительно
            }
            else
            {
                start = 0; end = segment;
            }

            for (int i = start; i <= end; i++)
            {
                temp_p = pl.GetPoint3dAt(i);
                temp_p = temp_p.TransformBy(M);
                pl.SetPointAt(i, UT.from3dto2d(temp_p));
            }
            pl.AddVertexAt(segment + 1, UT.from3dto2d(origin), pl.GetBulgeAt(segment), pl.GetStartWidthAt(segment), pl.GetEndWidthAt(segment));
        }
Beispiel #2
0
        Polyline BendSingleLine(Point3d origin, Point3d fromp, Point3d to, Line ln)
        {
            Polyline result = new Polyline();

            result.SetPropertiesFrom(ln);
            result.AddVertexAt(0, UT.from3dto2d(ln.StartPoint), 0, 0, 0);
            result.AddVertexAt(1, UT.from3dto2d(ln.EndPoint), 0, 0, 0);

            BendPolyline(origin, fromp, to, ref result);

            return(result);
        }