// Создание визуального представления дуги 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); }
// Фоматированная строка для вывода в файл версии R13 public override string ToStringOfVerR13() { string str = ToString(); str = str.Insert(str.IndexOf("10\n" + DxfHelper.DoubleToString(X)), "100\nAcDb2dVertex\n"); return(str); }
public string ToStringOfVerR13() { string str = ToString(); str = str.Insert(str.IndexOf(Center.AsPoint.ToString()), "100\nAcDbCircle\n"); str = str.Insert(str.IndexOf("50\n" + DxfHelper.DoubleToString(StartAngle)), "100\nAcDbArc\n"); return(str); }
// Форматированная строка 2D для вывода в файл DXF public string ToStringOf2d(bool isWeight) { if (!isWeight) { return(base.ToStringOf2d()); } return("41\n" + DxfHelper.DoubleToString(Weight) + "\n" + base.ToStringOf2d()); }
// Форматированная строка для вывода в файл 2D public override string ToStringOf2d() { string str = string.Format("0\n{0}\n8\n0\n{1}", Name, base.ToStringOf2d()); if (Bulge != 0) { return(str += "42\n" + DxfHelper.DoubleToString(Bulge) + "\n"); } return(str); }
// Создание визуального представления точки 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); }
// Строка форматированная для вывода в файл DXF public override string ToString() { string str = string.Format("0\n{0}\n8\n0\n62\n{1}\n90\n{2}\n70\n{3}\n", Name, (int)Color, NumberOfVertices, Flag); foreach (DxfVertex vert in polyline.Vertexes) { str += "10\n" + DxfHelper.DoubleToString(vert.X) + "\n20\n" + DxfHelper.DoubleToString(vert.Y) + "\n"; if (vert.Bulge != 0) { str += "42\n" + DxfHelper.DoubleToString(vert.Bulge) + "\n"; } } return(str); }
// Метод создания визуального представления 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); }
} // имя в файле DXF #endregion #region Конструктор public ExtMin(DxfDot dot) : base(DxfHelper.NormalizeDouble(dot.X), DxfHelper.NormalizeDouble(dot.Y), DxfHelper.NormalizeDouble(dot.Z)) { }
// Формирование строки для вывода в файл DXF public override string ToString() { return(string.Format("0\n{0}\n8\n0\n{1}40\n{2}\n62\n{3}\n", Name, Center.AsPoint.ToString(), DxfHelper.DoubleToString(Radius), (int)Color)); }
// Создать объект Arc из двух вершин, в первой из который устанолен коэффициет искривления public static DxfArc Create(DxfVertex vertex1, DxfVertex vertex2, DxfColors color = DxfColors.MainOutline) { if (vertex1.Bulge == 0) { throw new ArgumentNullException(Properties.Resource.BulgeNotFound); } DxfArc arc = new DxfArc(); arc.Color = color; // цвет линии // Наити полный угол дуги double angleOfArc = 0; if (Math.Abs(vertex1.Bulge) == 1) { angleOfArc = 180; } else { angleOfArc = Math.Abs(Math.Atan(vertex1.Bulge) * DxfHelper.RadToDeg) * 4; } // Найти хорду и ее длинну, определить начало и конец дуги, // т.к. в файлах DXF направление дуги всегда по часовой стрелке, // если коэффициент искривления вершины имеет отрицательное значение, // то поменять точки местами Vector startPoint = vertex1.Bulge > 0 ? new Vector(vertex1.X, vertex1.Y) : new Vector(vertex2.X, vertex2.Y); // точка начала дуги Vector endPoint = vertex1.Bulge > 0 ? new Vector(vertex2.X, vertex2.Y) : new Vector(vertex1.X, vertex1.Y); // точка конца дуги Vector chord = endPoint - startPoint; // хорда // Радиус дуги // если угол дуги равен 180 градусов, то радиус равен половине длинны хорды if (angleOfArc == 180) { arc.Radius = chord.Length / 2; } else { arc.Radius = Math.Abs((chord.Length / Math.Sin(angleOfArc / 2 * DxfHelper.DegToRad)) / 2); } // найти центр хорды Vector centerChord = startPoint + chord / 2; if (angleOfArc == 180) { arc.Center = new DxfDot(centerChord.X, centerChord.Y); } else { // найти расстояние от центра дуги до середины хорды double length = Math.Sqrt(arc.Radius * arc.Radius - Math.Pow(chord.Length * .5, 2)); // единичный вектор, перпендикулярный хорде Vector perp = angleOfArc > 180 ? DxfHelper.RotateVector(chord, 270) : DxfHelper.RotateVector(chord, 90); perp.Normalize(); // умножить перпендикуляр на расстояние до центра дуги Vector size = perp * length; // найти центр дуги Vector centerArc = centerChord + size; arc.Center = new DxfDot(centerArc.X, centerArc.Y); } // найти начальный и конечный углы дуги arc.StartAngle = GetAngle(arc.Center, startPoint, arc.Radius); arc.EndAngel = arc.StartAngle + angleOfArc; arc.EndAngel = arc.EndAngel >= 360 ? arc.EndAngel - 360 : arc.EndAngel; CreateBound(arc); return(arc); }
// Создание форматированной строки для вывода в файл DXF public override string ToString() { return(string.Format("0\n{0}\n8\n0\n62\n{1}\n{2}{3}40\n{4}\n41\n{5}\n42\n{6}\n", Name, (int)Color, Center.AsPoint.ToString(), MajorAxis.ToStringOf2d(), DxfHelper.DoubleToString(Ratio), DxfHelper.DoubleToString(StartParam), DxfHelper.DoubleToString(EndParam))); }
// Формирование строки для вывода в файл DXF public override string ToString() { return(string.Format("0\n{0}\n8\n0\n62\n{1}\n{2}40\n{3}\n50\n{4}\n51\n{5}\n", Name, (int)Color, Center.AsPoint.ToString(), DxfHelper.DoubleToString(Radius), DxfHelper.DoubleToString(StartAngle), DxfHelper.DoubleToString(EndAngel))); }
public override string ToStringOf2d() { return(string.Format("13\n{0}\n23\n{1}\n", DxfHelper.DoubleToString(X), DxfHelper.DoubleToString(Y))); }
public override string ToString() { return(string.Format("11\n{0}\n21\n{1}\n31\n{2}\n", DxfHelper.DoubleToString(X), DxfHelper.DoubleToString(Y), DxfHelper.DoubleToString(Z))); }
// Определение координат точки, параметр угол в радианах private Vector GetVector(double param, double scale, double rotate) { Vector vector = DxfHelper.RotateVector(new Vector(scale * majorRadius * Math.Cos(param), scale * minorRadius * Math.Sin(param)), rotate); return(scale * center + vector); }
// Создание форматированной строки для вывода в файл DXF public override string ToString() { string str = string.Format("10\n{0}\n20\n{1}\n", DxfHelper.DoubleToString(X), DxfHelper.DoubleToString(Y)); return(str); }
public override string ToString() { return(string.Format("210\n{0}\n220\n{1}\n230\n{0}\n", DxfHelper.DoubleToString(X), DxfHelper.DoubleToString(Y), DxfHelper.DoubleToString(Z))); }