From 0d1945def7aeec0e00dee42437959f7fc0b6218b Mon Sep 17 00:00:00 2001
From: jean-pierre charras <jp.charras@wanadoo.fr>
Date: Wed, 14 Feb 2024 09:22:49 +0100
Subject: [PATCH] Gerber drill file: do not flash oblong holes: they must be
 routed. Fixes #16962 https://gitlab.com/kicad/code/kicad/-/issues/16962

---
 pcbnew/exporters/gendrill_gerber_writer.cpp | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/pcbnew/exporters/gendrill_gerber_writer.cpp b/pcbnew/exporters/gendrill_gerber_writer.cpp
index 8b58545b0d..9fdd4aff55 100644
--- a/pcbnew/exporters/gendrill_gerber_writer.cpp
+++ b/pcbnew/exporters/gendrill_gerber_writer.cpp
@@ -2,7 +2,7 @@
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
  * Copyright (C) 2017 Jean_Pierre Charras <jp.charras at wanadoo.fr>
- * Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2024 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -39,8 +39,11 @@
 #include <reporter.h>
 #include <gbr_metadata.h>
 
-// set to 1 to use flashed oblong holes, 0 to draw them by a line.
-#define FLASH_OVAL_HOLE 1
+// set to 1 to use flashed oblong holes, 0 to draw them by a line (route holes).
+// WARNING: currently ( gerber-layer-format-specification-revision-2023-08 ),
+// oblong holes **must be routed* in a drill file and not flashed,
+// so set FLASH_OVAL_HOLE to 0
+#define FLASH_OVAL_HOLE 0
 
 
 GERBER_WRITER::GERBER_WRITER( BOARD* aPcb )
@@ -131,7 +134,7 @@ bool GERBER_WRITER::CreateDrillandMapFilesSet( const wxString& aPlotDirectory, b
 
 #if !FLASH_OVAL_HOLE
 // A helper class to transform an oblong hole to a segment
-static void convertOblong2Segment( wxSize aSize, double aOrient, VECTOR2I& aStart, VECTOR2I& aEnd );
+static void convertOblong2Segment( VECTOR2I& aSize, const EDA_ANGLE& aOrient, VECTOR2I& aStart, VECTOR2I& aEnd );
 #endif
 
 
@@ -233,7 +236,7 @@ int GERBER_WRITER::createDrillFile( wxString& aFullFilename, bool aIsNpth,
         if( hole_descr.m_Hole_Shape )
         {
 #if FLASH_OVAL_HOLE     // set to 1 to use flashed oblong holes,
-                                    // 0 to draw them as a line.
+                        // 0 to draw them as a line.
             plotter.FlashPadOval( hole_pos, hole_descr.m_Hole_Size, hole_descr.m_Hole_Orient,
                                   FILLED, &gbr_metadata );
 #else
@@ -264,10 +267,10 @@ int GERBER_WRITER::createDrillFile( wxString& aFullFilename, bool aIsNpth,
 
 
 #if !FLASH_OVAL_HOLE
-void convertOblong2Segment( wxSize aSize, const EDA_ANGLE& aOrient, VECTOR2I& aStart,
+void convertOblong2Segment( VECTOR2I& aSize, const EDA_ANGLE& aOrient, VECTOR2I& aStart,
                             VECTOR2I& aEnd )
 {
-    wxSize    size( aSize );
+    VECTOR2I    size( aSize );
     EDA_ANGLE orient( aOrient );
 
     /* The pad will be drawn as an oblong shape with size.y > size.x