From 37469b00b2ecf03b44f2f6ea3a66bef04eb3c8f5 Mon Sep 17 00:00:00 2001 From: John Beard Date: Thu, 28 Nov 2024 05:37:47 +0800 Subject: [PATCH] Pcbnew: fix track start property display The display in the properties manager for arc tracks was wrong. Implement a set of Get/SetStartX/Y functions for the traces, to match the End functions. This is needed because PCB_ARC overrides GetPosition to return the arc center, not the start position (whereas PCB_TRACK does return the start for GetPosition) Fixes: https://gitlab.com/kicad/code/kicad/-/issues/19215 --- .../dialogs/dialog_track_via_properties.cpp | 24 +++++++++---------- pcbnew/pcb_track.cpp | 8 +++---- pcbnew/pcb_track.h | 6 +++++ 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/pcbnew/dialogs/dialog_track_via_properties.cpp b/pcbnew/dialogs/dialog_track_via_properties.cpp index 54c13ed10e..c7e0ba1e56 100644 --- a/pcbnew/dialogs/dialog_track_via_properties.cpp +++ b/pcbnew/dialogs/dialog_track_via_properties.cpp @@ -172,10 +172,10 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen if( !m_tracks ) // first track in the list { - m_trackStartX.SetValue( t->GetStart().x ); - m_trackStartY.SetValue( t->GetStart().y ); - m_trackEndX.SetValue( t->GetEnd().x ); - m_trackEndY.SetValue( t->GetEnd().y ); + m_trackStartX.SetValue( t->GetStartX() ); + m_trackStartY.SetValue( t->GetStartY() ); + m_trackEndX.SetValue( t->GetEndX() ); + m_trackEndY.SetValue( t->GetEndY() ); m_trackWidth.SetValue( t->GetWidth() ); track_selection_layer = t->GetLayer(); m_trackHasSolderMask->SetValue ( t->HasSolderMask() ); @@ -189,16 +189,16 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen } else // check if values are the same for every selected track { - if( m_trackStartX.GetValue() != t->GetStart().x ) + if( m_trackStartX.GetValue() != t->GetStartX() ) m_trackStartX.SetValue( INDETERMINATE_STATE ); - if( m_trackStartY.GetValue() != t->GetStart().y ) + if( m_trackStartY.GetValue() != t->GetStartY() ) m_trackStartY.SetValue( INDETERMINATE_STATE ); - if( m_trackEndX.GetValue() != t->GetEnd().x ) + if( m_trackEndX.GetValue() != t->GetEndX() ) m_trackEndX.SetValue( INDETERMINATE_STATE ); - if( m_trackEndY.GetValue() != t->GetEnd().y ) + if( m_trackEndY.GetValue() != t->GetEndY() ) m_trackEndY.SetValue( INDETERMINATE_STATE ); if( m_trackWidth.GetValue() != t->GetWidth() ) @@ -640,16 +640,16 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow() PCB_TRACK* t = static_cast( item ); if( !m_trackStartX.IsIndeterminate() ) - t->SetStart( VECTOR2I( m_trackStartX.GetIntValue(), t->GetStart().y ) ); + t->SetStartX( m_trackStartX.GetIntValue() ); if( !m_trackStartY.IsIndeterminate() ) - t->SetStart( VECTOR2I( t->GetStart().x, m_trackStartY.GetIntValue() ) ); + t->SetStartY( m_trackStartY.GetIntValue() ); if( !m_trackEndX.IsIndeterminate() ) - t->SetEnd( VECTOR2I( m_trackEndX.GetIntValue(), t->GetEnd().y ) ); + t->SetEndX( m_trackEndX.GetIntValue() ); if( !m_trackEndY.IsIndeterminate() ) - t->SetEnd( VECTOR2I( t->GetEnd().x, m_trackEndY.GetIntValue() ) ); + t->SetEndY( m_trackEndY.GetIntValue() ); if( !m_trackWidth.IsIndeterminate() ) t->SetWidth( m_trackWidth.GetIntValue() ); diff --git a/pcbnew/pcb_track.cpp b/pcbnew/pcb_track.cpp index 116d9a85a8..a5cd24efe8 100644 --- a/pcbnew/pcb_track.cpp +++ b/pcbnew/pcb_track.cpp @@ -2050,12 +2050,12 @@ static struct TRACK_VIA_DESC propMgr.AddProperty( new PROPERTY( _HKI( "Width" ), &PCB_TRACK::SetWidth, &PCB_TRACK::GetWidth, PROPERTY_DISPLAY::PT_SIZE ) ); propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Position X" ), - new PROPERTY( _HKI( "Start X" ), - &PCB_TRACK::SetX, &PCB_TRACK::GetX, PROPERTY_DISPLAY::PT_COORD, + new PROPERTY( _HKI( "Start X" ), + &PCB_TRACK::SetStartX, &PCB_TRACK::GetStartX, PROPERTY_DISPLAY::PT_COORD, ORIGIN_TRANSFORMS::ABS_X_COORD) ); propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Position Y" ), - new PROPERTY( _HKI( "Start Y" ), - &PCB_TRACK::SetY, &PCB_TRACK::GetY, PROPERTY_DISPLAY::PT_COORD, + new PROPERTY( _HKI( "Start Y" ), + &PCB_TRACK::SetStartY, &PCB_TRACK::GetStartY, PROPERTY_DISPLAY::PT_COORD, ORIGIN_TRANSFORMS::ABS_Y_COORD ) ); propMgr.AddProperty( new PROPERTY( _HKI( "End X" ), &PCB_TRACK::SetEndX, &PCB_TRACK::GetEndX, PROPERTY_DISPLAY::PT_COORD, diff --git a/pcbnew/pcb_track.h b/pcbnew/pcb_track.h index d66b0fb282..f64374d956 100644 --- a/pcbnew/pcb_track.h +++ b/pcbnew/pcb_track.h @@ -121,6 +121,12 @@ public: void SetStart( const VECTOR2I& aStart ) { m_Start = aStart; } const VECTOR2I& GetStart() const { return m_Start; } + void SetStartX( int aX ) { m_Start.x = aX; } + void SetStartY( int aY ) { m_Start.y = aY; } + + int GetStartX() const { return m_Start.x; } + int GetStartY() const { return m_Start.y; } + void SetEndX( int aX ) { m_End.x = aX; } void SetEndY( int aY ) { m_End.y = aY; }