diff --git a/samples/export_sample.dwg b/samples/export_sample.dwg index 3fbe003..192028d 100644 Binary files a/samples/export_sample.dwg and b/samples/export_sample.dwg differ diff --git a/src/ACadSharp.Pdf/Core/IO/PdfPen.cs b/src/ACadSharp.Pdf/Core/IO/PdfPen.cs index fa0aa94..d792cc8 100644 --- a/src/ACadSharp.Pdf/Core/IO/PdfPen.cs +++ b/src/ACadSharp.Pdf/Core/IO/PdfPen.cs @@ -49,6 +49,9 @@ public void DrawEntity(Entity entity, Transform transform) case Circle circle: this.drawCircle(circle, transform); break; + case Ellipse ellipse: + this.drawEllpise(ellipse, transform); + break; case Line line: this.drawLine(line, transform); break; @@ -109,16 +112,12 @@ private void applyStyle(Entity entity) private void drawArc(Arc arc, Transform transform) { - var vertices = arc.PolygonalVertexes(this._configuration.ArcPrecision) - .Select(v => transform.ApplyTransform((XYZ)v)).ToArray(); - this.appendXY(vertices.First(), PdfKey.BeginPath); - - for (int i = 1; vertices.Count() > i; i++) - { - this.appendXY(vertices[i], PdfKey.Line); - } + XY[] vertices = arc.PolygonalVertexes(this._configuration.ArcPrecision) + .Select(v => transform.ApplyTransform((XYZ)v)) + .Select(v => (XY)v) + .ToArray(); - this.appendXY(vertices.Last(), PdfKey.Stroke); + this.appendPath(vertices); } private void drawCircle(Circle circle, Transform transform) @@ -143,6 +142,17 @@ private void drawCircle(Circle circle, Transform transform) this._sb.AppendLine($"h {PdfKey.Stroke}"); } + private void drawEllpise(Ellipse ellipse, Transform transform) + { + XY[] vertices = ellipse.PolygonalVertexes(this._configuration.ArcPrecision) + .Select(v => v + (XY)ellipse.Center) + .Select(v => transform.ApplyTransform((XYZ)v)) + .Select(v => (XY)v) + .ToArray(); + + this.appendPath(vertices); + } + private void drawLine(Line line, Transform transform) { this.appendXY(transform.ApplyTransform(line.StartPoint), PdfKey.BeginPath); @@ -162,7 +172,7 @@ private void drawPoint(Point point, Transform transform) private void drawPolyline(IPolyline polyline, Transform transform) { - var vertices = polyline.Vertices.Select(v => transform.ApplyTransform(v.Location.Convert())); + IEnumerable vertices = polyline.Vertices.Select(v => transform.ApplyTransform(v.Location.Convert())); this.appendXY(vertices.First(), PdfKey.BeginPath); @@ -171,7 +181,6 @@ private void drawPolyline(IPolyline polyline, Transform transform) this.appendXY(vertices.ElementAt(i), PdfKey.Line); } - if (polyline.IsClosed) { this.appendXY(vertices.Last(), PdfKey.Line); @@ -179,8 +188,10 @@ private void drawPolyline(IPolyline polyline, Transform transform) } else { - this.appendXY(vertices.Last(), PdfKey.Stroke); + this.appendXY(vertices.Last(), PdfKey.Line); } + + this._sb.AppendLine(PdfKey.Stroke); } private void drawViewport(Viewport viewport) @@ -217,6 +228,18 @@ private void drawViewport(Viewport viewport) this._sb.AppendLine(PdfKey.StackEnd); } + private void appendPath(params XY[] vertices) + { + this.appendXY(vertices.First(), PdfKey.BeginPath); + + for (int i = 1; vertices.Count() > i; i++) + { + this.appendXY(vertices[i], PdfKey.Line); + } + + this.appendXY(vertices.Last(), PdfKey.Stroke); + } + private void appendArray(string key, params double[] arr) { this._sb.AppendJoin(" ", arr.Select(d => this.toPdfDouble(d)));