You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by pe...@apache.org on 2026/07/07 04:01:09 UTC

(openoffice) 07/11: added support for dashed lines.

This is an automated email from the ASF dual-hosted git repository.

leginee pushed a commit to branch bugfix-dxf-filter
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit 5c16e86bab0e68eb3d5705294866fc9c545d63dd
Author: Peter Kovacs <pe...@apache.org>
AuthorDate: Sun Jul 5 15:55:45 2026 +0200

    added support for dashed lines.
---
 main/filter/source/graphicfilter/idxf/dxf2mtf.cxx | 26 +++++++++++++++--------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/main/filter/source/graphicfilter/idxf/dxf2mtf.cxx b/main/filter/source/graphicfilter/idxf/dxf2mtf.cxx
index 96ab298f1c..658a6520f3 100644
--- a/main/filter/source/graphicfilter/idxf/dxf2mtf.cxx
+++ b/main/filter/source/graphicfilter/idxf/dxf2mtf.cxx
@@ -132,15 +132,23 @@ DXFLineInfo DXF2GDIMetaFile::LTypeToDXFLineInfo(const char * sLineType)
 		}
 	}
 
-#if 0
-	if (aDXFLineInfo.DashCount > 0 && aDXFLineInfo.DashLen == 0.0)
-		aDXFLineInfo.DashLen ( 1 );
-	if (aDXFLineInfo.DotCount > 0 && aDXFLineInfo.DotLen() == 0.0)
-		aDXFLineInfo.SetDotLen( 1 );
-	if (aDXFLineInfo.GetDashCount > 0 || aDXFLineInfo.GetDotCount > 0)
-		if (aDXFLineInfo.GetDistance() == 0)
-			aDXFLineInfo.SetDistance( 1 );
-#endif
+	// A DXF pattern element of exactly 0.0 is a *dot* (a point), distinct from a
+	// positive-length dash (e.g. DOT2 = 0,-3.175). AutoCAD paints it as a small
+	// dot, but VCL has no round dot: LineInfo strokes every "on" run as a short
+	// segment, so a dot is just a very short dash. Rendered verbatim the length
+	// collapses to a sub-unit mark (Transform() only clamps it to 1/100mm) and the
+	// line came out invisible (issue 70275). Give a zero-length dot/dash a small
+	// model-unit length so it survives scaling; keep it a SMALL fraction of the
+	// gap (0.05) so it reads as a dot, not a dash. Done here in model units, not
+	// after scaling, so it tracks the drawing size. Only true 0.0 elements are
+	// adjusted — real authored dashes keep their length.
+	const double fDotOnFraction = 0.05;   // dot mark length as a fraction of the gap
+	if (aDXFLineInfo.fDistance != 0.0) {
+		if (aDXFLineInfo.nDotCount > 0 && aDXFLineInfo.fDotLen == 0.0)
+			aDXFLineInfo.fDotLen = aDXFLineInfo.fDistance * fDotOnFraction;
+		if (aDXFLineInfo.nDashCount > 0 && aDXFLineInfo.fDashLen == 0.0)
+			aDXFLineInfo.fDashLen = aDXFLineInfo.fDistance * fDotOnFraction;
+	}
 
 	return aDXFLineInfo;
 }