// Преобразование POLYLINE в LWPOLILINE public static LwPolyline Create(DxfPolyline polyline) { LwPolyline lPolyline = new LwPolyline { polyline = polyline }; return(lPolyline); }
// Создание объекта из пар кодов public static LwPolyline Create(List <DxfCodePair> pairs, bool ignoreLineType) { LwPolyline lwPolyline = new LwPolyline(); lwPolyline.polyline = DxfPolyline.Create(pairs, ignoreLineType); if (lwPolyline.polyline == null) { return(null); } return(lwPolyline); }
// Преобразовать эллипс в POLYLINE public DxfPolyline ToPolyline(int precision) { DxfPolyline polyline = DxfPolyline.Create(); // Создать новую полилинию polyline.Color = Color; // присвоить цвет линии как у эллипса polyline.IsBulge = false; // искревленности нет Vector center = new Vector(Center.X, Center.Y); // определить угол поворота эллипса относительно оси 0X double[] ordX = new double[precision]; double[] ordY = new double[precision]; polyline.IsClosed = IsFull ? true : false; // определить тип полилинии // список вершин полилинии List <DxfVertex> vertexes = new List <DxfVertex>(); double step = (EndParam - StartParam) / (precision - 1); // шаг расчета вершин зависит от заданной точности for (int i = 0; i < precision; i++) { double angle = StartParam + step * i; // угол расчета вершины // создать новый вектор для этого угла Vector vector = GetVector(angle, 1, rotateAngle); // создать новую вершину DxfVertex vertex = new DxfVertex(vector); ordX[i] = vector.X; ordY[i] = vector.Y; // добавить вершину в коллекцию vertexes.Add(vertex); } // добавить созданный массив вершин в коллекцию полилинии polyline.AddRangeVerts(vertexes); Array.Sort(ordX); Array.Sort(ordY); Rect rt = new Rect(ordX[0], ordY[0], ordX[ordX.Length - 1] - ordX[0], ordY[ordY.Length - 1] - ordY[0]); polyline.Bound = rt; // вернуть созданную полилинию return(polyline); }