From 676c6e81a4fb690c3a58a592c79a8a49bdb94ae9 Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Sun, 27 Aug 2023 20:42:09 +0100
Subject: [PATCH] Custom pads with round anchors in pre-7.0 files get 90 degree
 spokes.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/15518
---
 pcbnew/plugins/kicad/pcb_parser.cpp | 11 ++++++++++-
 pcbnew/plugins/kicad/pcb_plugin.h   |  4 ++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/pcbnew/plugins/kicad/pcb_parser.cpp b/pcbnew/plugins/kicad/pcb_parser.cpp
index 50d83bda563..e63f0b9f55a 100644
--- a/pcbnew/plugins/kicad/pcb_parser.cpp
+++ b/pcbnew/plugins/kicad/pcb_parser.cpp
@@ -4256,11 +4256,20 @@ PAD* PCB_PARSER::parsePAD( FOOTPRINT* aParent )
     }
 
     if( pad->GetShape() == PAD_SHAPE::CIRCLE )
+    {
         pad->SetThermalSpokeAngle( ANGLE_45 );
+    }
     else if( pad->GetShape() == PAD_SHAPE::CUSTOM && pad->GetAnchorPadShape() == PAD_SHAPE::CIRCLE )
-        pad->SetThermalSpokeAngle( ANGLE_45 );
+    {
+        if( m_requiredVersion < 20211226 )
+            pad->SetThermalSpokeAngle( ANGLE_90 );
+        else
+            pad->SetThermalSpokeAngle( ANGLE_45 );
+    }
     else
+    {
         pad->SetThermalSpokeAngle( ANGLE_90 );
+    }
 
     for( token = NextTok();  token != T_RIGHT;  token = NextTok() )
     {
diff --git a/pcbnew/plugins/kicad/pcb_plugin.h b/pcbnew/plugins/kicad/pcb_plugin.h
index 8330710aee5..21e1eeecb66 100644
--- a/pcbnew/plugins/kicad/pcb_plugin.h
+++ b/pcbnew/plugins/kicad/pcb_plugin.h
@@ -59,6 +59,7 @@ class PCB_PLUGIN;   // forward decl
 //#define SEXPR_BOARD_FILE_VERSION    3         // first s-expression format, used legacy cu stack
 //#define SEXPR_BOARD_FILE_VERSION    4         // reversed cu stack, changed Inner* to In* in reverse order
 //                                              // went to 32 Cu layers from 16.
+//----------------- Start of 5.0 development -----------------
 //#define SEXPR_BOARD_FILE_VERSION    20160815  // differential pair settings per net class
 //#define SEXPR_BOARD_FILE_VERSION    20170123  // EDA_TEXT refactor, moved 'hide'
 //#define SEXPR_BOARD_FILE_VERSION    20170920  // long pad names and custom pad shape
@@ -66,6 +67,7 @@ class PCB_PLUGIN;   // forward decl
 //#define SEXPR_BOARD_FILE_VERSION    20171114  // Save 3D model offset in mm, instead of inches
 //#define SEXPR_BOARD_FILE_VERSION    20171125  // Locked/unlocked FP_TEXT
 //#define SEXPR_BOARD_FILE_VERSION    20171130  // 3D model offset written using "offset" parameter
+//----------------- Start of 6.0 development -----------------
 //#define SEXPR_BOARD_FILE_VERSION    20190331  // hatched zones and chamfered round rect pads
 //#define SEXPR_BOARD_FILE_VERSION    20190421  // curves in custom pads
 //#define SEXPR_BOARD_FILE_VERSION    20190516  // Remove segment count from zones
@@ -110,6 +112,7 @@ class PCB_PLUGIN;   // forward decl
 //#define SEXPR_BOARD_FILE_VERSION    20210824  // Opacity in 3D colors
 //#define SEXPR_BOARD_FILE_VERSION    20210925  // Locked flag for fp_text
 //#define SEXPR_BOARD_FILE_VERSION    20211014  // Arc formatting
+//----------------- Start of 7.0 development -----------------
 //#define SEXPR_BOARD_FILE_VERSION    20211226  // Add radial dimension
 //#define SEXPR_BOARD_FILE_VERSION    20211227  // Add thermal relief spoke angle overrides
 //#define SEXPR_BOARD_FILE_VERSION    20211228  // Add allow_soldermask_bridges footprint attribute
@@ -130,6 +133,7 @@ class PCB_PLUGIN;   // forward decl
 //#define SEXPR_BOARD_FILE_VERSION    20220818  // First-class storage for net-ties
 //#define SEXPR_BOARD_FILE_VERSION    20220914  // Number boxes for custom-shape pads
 //#define SEXPR_BOARD_FILE_VERSION    20221018  // Via & pad zone-layer-connections
+//----------------- Start of 8.0 development -----------------
 //#define SEXPR_BOARD_FILE_VERSION    20230410  // DNP attribute propagated from schematic to attr
 //#define SEXPR_BOARD_FILE_VERSION    20230517  // Teardrop parameters for pads and vias
 //#define SEXPR_BOARD_FILE_VERSION    20230620  // PCB Fields
-- 
GitLab