// Создание визуального представления дуги public DrawingVisual CreateVisual(double scale) { Vector center = new Vector(Center.X * scale, Center.Y * scale); double radius = Radius * scale; // найти начальную точку дуги Point startPoint = new Point(radius * Math.Cos(StartAngle * DxfHelper.DegToRad) + center.X, radius * Math.Sin(StartAngle * DxfHelper.DegToRad) + center.Y); // найти конечную точку дуги Point endPoint = new Point(radius * Math.Cos(EndAngel * DxfHelper.DegToRad) + center.X, radius * Math.Sin(EndAngel * DxfHelper.DegToRad) + center.Y); // определить угол дуги double angle = StartAngle < EndAngel ? EndAngel - StartAngle : 360 - (StartAngle - EndAngel); // установить флаг, если угол больше 180 градусов - 1, в обратном случае - 0 byte isLarge = angle > 180 ? (byte)1 : (byte)0; // сформировать строку пути string str = string.Format("M{0} {1}A{2} {2} {3} {4} {5} {6} {7}", DxfHelper.DoubleToString(startPoint.X), DxfHelper.DoubleToString(startPoint.Y), DxfHelper.DoubleToString(radius), 0, isLarge, 1, DxfHelper.DoubleToString(endPoint.X), DxfHelper.DoubleToString(endPoint.Y)); DrawingVisual visual = new DrawingVisual(); using (DrawingContext dc = visual.RenderOpen()) { // создать геометрию dc.DrawGeometry(null, new Pen(DxfHelper.GetBrush(Color), 2), Geometry.Parse(str)); } // вернуть объект DrawingVisual с созданной геометрией return(visual); }
// Создание визуального представления точки public DrawingVisual CreateVisual(double scale) { DrawingVisual visual = new DrawingVisual(); using (DrawingContext dc = visual.RenderOpen()) { dc.DrawRectangle(DxfHelper.GetBrush(Color), null, new Rect(new Point(Coordinates.X * scale - 1, Coordinates.Y * scale - 1), new Size(2, 2))); } return(visual); }
// Создание визуального представления окружности public DrawingVisual CreateVisual(double scale) { DrawingVisual visual = new DrawingVisual(); double radius = Radius * scale; Point center = new Point(Center.X * scale, Center.Y * scale); using (DrawingContext dc = visual.RenderOpen()) { dc.DrawEllipse(null, new Pen(DxfHelper.GetBrush(Color), 2.0), center, radius, radius); } return(visual); }
// Создание визуального представления линии public DrawingVisual CreateVisual(double scale) { DrawingVisual visual = new DrawingVisual(); Point startPoint = new Point(StartPoint.X * scale, StartPoint.Y * scale); Point endPoint = new Point(EndPoint.X * scale, EndPoint.Y * scale); using (DrawingContext dc = visual.RenderOpen()) { Pen pen = new Pen(DxfHelper.GetBrush(Color), 2); dc.DrawLine(pen, startPoint, endPoint); } return(visual); }
// Метод создания визуального представления public DrawingVisual CreateVisual(double scale) { DrawingVisual visual = new DrawingVisual(); if (IsFull) // эллипс полный { Point center = new Point(Center.X * scale, Center.Y * scale); using (DrawingContext dc = visual.RenderOpen()) { // Создать визуальное представление эллипса dc.DrawEllipse(null, new Pen(DxfHelper.GetBrush(Color), 2.0), center, majorRadius * scale, minorRadius * scale); } // задать трансформацию объекту DrawingVisual visual.Transform = new RotateTransform(); // определить центр поворота эллипса (visual.Transform as RotateTransform).CenterX = center.X; (visual.Transform as RotateTransform).CenterY = center.Y; // задать угол поворота (visual.Transform as RotateTransform).Angle = rotateAngle; } else // часть эллипса { Vector startPoint = GetVector(StartParam, scale, rotateAngle); // найти начальную точку эллипса Vector endPoint = GetVector(EndParam, scale, rotateAngle); // найти конечную точку byte isLarge = EndParam - StartParam > DxfHelper.Pi ? (byte)1 : (byte)0; // определить большая дуга или нет // создать строку пути для эллиптической дуги string str = string.Format("M{0} {1}A{2} {3} {4} {5} {6} {7} {8}", DxfHelper.DoubleToString(startPoint.X), DxfHelper.DoubleToString(startPoint.Y), DxfHelper.DoubleToString(majorRadius * scale), DxfHelper.DoubleToString(minorRadius * scale), DxfHelper.DoubleToString(rotateAngle), isLarge, 1, DxfHelper.DoubleToString(endPoint.X), DxfHelper.DoubleToString(endPoint.Y)); using (DrawingContext dc = visual.RenderOpen()) { // создать визуальное представление для эллиптической дуги dc.DrawGeometry(null, new Pen(DxfHelper.GetBrush(Color), 2), Geometry.Parse(str)); } } return(visual); }