diff --git a/samples/svg/export_sample.dwg b/samples/svg/export_sample.dwg index c2f66c6d3..bf32ae7e0 100644 Binary files a/samples/svg/export_sample.dwg and b/samples/svg/export_sample.dwg differ diff --git a/src/ACadSharp/Entities/Hatch.BoundaryPath.Spline.cs b/src/ACadSharp/Entities/Hatch.BoundaryPath.Spline.cs index 61a3989f8..62b64fe24 100644 --- a/src/ACadSharp/Entities/Hatch.BoundaryPath.Spline.cs +++ b/src/ACadSharp/Entities/Hatch.BoundaryPath.Spline.cs @@ -1,6 +1,7 @@ using ACadSharp.Attributes; using CSMath; using System.Collections.Generic; +using System.Drawing; using System.Linq; namespace ACadSharp.Entities @@ -130,7 +131,16 @@ public override Entity ToEntity() spline.EndTangent = this.EndTangent.Convert(); spline.ControlPoints.AddRange(this.ControlPoints); - spline.Weights.AddRange(this.ControlPoints.Select(x => x.Z)); + + if (this.Weights.Any(w => w == 0)) + { + spline.Weights.AddRange(Enumerable.Repeat(1.0d, this.ControlPoints.Count)); + } + else + { + spline.Weights.AddRange(this.Weights); + } + spline.FitPoints.AddRange(this.FitPoints.Select(x => x.Convert())); spline.Knots.AddRange(this.Knots); diff --git a/src/ACadSharp/IO/SVG/SvgXmlWriter.cs b/src/ACadSharp/IO/SVG/SvgXmlWriter.cs index 17382ff51..76470260e 100644 --- a/src/ACadSharp/IO/SVG/SvgXmlWriter.cs +++ b/src/ACadSharp/IO/SVG/SvgXmlWriter.cs @@ -145,9 +145,9 @@ protected void writeEntity(Entity entity, Transform transform) case IText text: this.writeText(text, transform); break; - //case Spline spline: - // this.writeSpline(spline, transform); - // break; + case Spline spline: + this.writeSpline(spline, transform); + break; default: this.notify($"[{entity.ObjectName}] Entity not implemented.", NotificationType.NotImplemented); break; @@ -402,6 +402,8 @@ private void writeEntityAsPath(Entity entity, Transform transform, params IEn this.WriteAttributeString("d", this.createPath(lines)); + this.WriteAttributeString("fill", "none"); + this.WriteEndElement(); } @@ -691,7 +693,7 @@ private void writeText(IText text, Transform transform) this.WriteValue("px"); } - if(text.Style.TrueType.HasFlag(FontFlags.Bold)) + if (text.Style.TrueType.HasFlag(FontFlags.Bold)) { this.WriteValue("bold"); } @@ -807,8 +809,33 @@ private void writeText(IText text, Transform transform) private void writeSpline(Spline spline, Transform transform) { - spline.UpdateFromFitPoints(); - this.writeEntityAsPath(spline, transform, spline.PolygonalVertexes(this.Configuration.ArcPoints)); + if (!spline.ControlPoints.Any()) + { + spline.UpdateFromFitPoints(); + } + + if (!spline.TryPolygonalVertexes(this.Configuration.ArcPoints, out var pts)) + { + return; + } + + if (spline.IsClosed) + { + this.WriteStartElement("polygon"); + } + else + { + this.WriteStartElement("polyline"); + } + + this.writeEntityHeader(spline, transform); + + string svgPts = this.svgPoints(pts, transform); + + this.WriteAttributeString("points", svgPts); + this.WriteAttributeString("fill", "none"); + + this.WriteEndElement(); } private void writeTransform(Transform transform)