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
This commit is contained in:
John Beard 2024-11-28 05:37:47 +08:00
parent ed9e66399e
commit 37469b00b2
3 changed files with 22 additions and 16 deletions

View File

@ -172,10 +172,10 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
if( !m_tracks ) // first track in the list if( !m_tracks ) // first track in the list
{ {
m_trackStartX.SetValue( t->GetStart().x ); m_trackStartX.SetValue( t->GetStartX() );
m_trackStartY.SetValue( t->GetStart().y ); m_trackStartY.SetValue( t->GetStartY() );
m_trackEndX.SetValue( t->GetEnd().x ); m_trackEndX.SetValue( t->GetEndX() );
m_trackEndY.SetValue( t->GetEnd().y ); m_trackEndY.SetValue( t->GetEndY() );
m_trackWidth.SetValue( t->GetWidth() ); m_trackWidth.SetValue( t->GetWidth() );
track_selection_layer = t->GetLayer(); track_selection_layer = t->GetLayer();
m_trackHasSolderMask->SetValue ( t->HasSolderMask() ); 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 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 ); m_trackStartX.SetValue( INDETERMINATE_STATE );
if( m_trackStartY.GetValue() != t->GetStart().y ) if( m_trackStartY.GetValue() != t->GetStartY() )
m_trackStartY.SetValue( INDETERMINATE_STATE ); m_trackStartY.SetValue( INDETERMINATE_STATE );
if( m_trackEndX.GetValue() != t->GetEnd().x ) if( m_trackEndX.GetValue() != t->GetEndX() )
m_trackEndX.SetValue( INDETERMINATE_STATE ); m_trackEndX.SetValue( INDETERMINATE_STATE );
if( m_trackEndY.GetValue() != t->GetEnd().y ) if( m_trackEndY.GetValue() != t->GetEndY() )
m_trackEndY.SetValue( INDETERMINATE_STATE ); m_trackEndY.SetValue( INDETERMINATE_STATE );
if( m_trackWidth.GetValue() != t->GetWidth() ) if( m_trackWidth.GetValue() != t->GetWidth() )
@ -640,16 +640,16 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
PCB_TRACK* t = static_cast<PCB_TRACK*>( item ); PCB_TRACK* t = static_cast<PCB_TRACK*>( item );
if( !m_trackStartX.IsIndeterminate() ) if( !m_trackStartX.IsIndeterminate() )
t->SetStart( VECTOR2I( m_trackStartX.GetIntValue(), t->GetStart().y ) ); t->SetStartX( m_trackStartX.GetIntValue() );
if( !m_trackStartY.IsIndeterminate() ) if( !m_trackStartY.IsIndeterminate() )
t->SetStart( VECTOR2I( t->GetStart().x, m_trackStartY.GetIntValue() ) ); t->SetStartY( m_trackStartY.GetIntValue() );
if( !m_trackEndX.IsIndeterminate() ) if( !m_trackEndX.IsIndeterminate() )
t->SetEnd( VECTOR2I( m_trackEndX.GetIntValue(), t->GetEnd().y ) ); t->SetEndX( m_trackEndX.GetIntValue() );
if( !m_trackEndY.IsIndeterminate() ) if( !m_trackEndY.IsIndeterminate() )
t->SetEnd( VECTOR2I( t->GetEnd().x, m_trackEndY.GetIntValue() ) ); t->SetEndY( m_trackEndY.GetIntValue() );
if( !m_trackWidth.IsIndeterminate() ) if( !m_trackWidth.IsIndeterminate() )
t->SetWidth( m_trackWidth.GetIntValue() ); t->SetWidth( m_trackWidth.GetIntValue() );

View File

@ -2050,12 +2050,12 @@ static struct TRACK_VIA_DESC
propMgr.AddProperty( new PROPERTY<PCB_TRACK, int>( _HKI( "Width" ), propMgr.AddProperty( new PROPERTY<PCB_TRACK, int>( _HKI( "Width" ),
&PCB_TRACK::SetWidth, &PCB_TRACK::GetWidth, PROPERTY_DISPLAY::PT_SIZE ) ); &PCB_TRACK::SetWidth, &PCB_TRACK::GetWidth, PROPERTY_DISPLAY::PT_SIZE ) );
propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Position X" ), propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Position X" ),
new PROPERTY<PCB_TRACK, int, BOARD_ITEM>( _HKI( "Start X" ), new PROPERTY<PCB_TRACK, int>( _HKI( "Start X" ),
&PCB_TRACK::SetX, &PCB_TRACK::GetX, PROPERTY_DISPLAY::PT_COORD, &PCB_TRACK::SetStartX, &PCB_TRACK::GetStartX, PROPERTY_DISPLAY::PT_COORD,
ORIGIN_TRANSFORMS::ABS_X_COORD) ); ORIGIN_TRANSFORMS::ABS_X_COORD) );
propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Position Y" ), propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Position Y" ),
new PROPERTY<PCB_TRACK, int, BOARD_ITEM>( _HKI( "Start Y" ), new PROPERTY<PCB_TRACK, int>( _HKI( "Start Y" ),
&PCB_TRACK::SetY, &PCB_TRACK::GetY, PROPERTY_DISPLAY::PT_COORD, &PCB_TRACK::SetStartY, &PCB_TRACK::GetStartY, PROPERTY_DISPLAY::PT_COORD,
ORIGIN_TRANSFORMS::ABS_Y_COORD ) ); ORIGIN_TRANSFORMS::ABS_Y_COORD ) );
propMgr.AddProperty( new PROPERTY<PCB_TRACK, int>( _HKI( "End X" ), propMgr.AddProperty( new PROPERTY<PCB_TRACK, int>( _HKI( "End X" ),
&PCB_TRACK::SetEndX, &PCB_TRACK::GetEndX, PROPERTY_DISPLAY::PT_COORD, &PCB_TRACK::SetEndX, &PCB_TRACK::GetEndX, PROPERTY_DISPLAY::PT_COORD,

View File

@ -121,6 +121,12 @@ public:
void SetStart( const VECTOR2I& aStart ) { m_Start = aStart; } void SetStart( const VECTOR2I& aStart ) { m_Start = aStart; }
const VECTOR2I& GetStart() const { return m_Start; } 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 SetEndX( int aX ) { m_End.x = aX; }
void SetEndY( int aY ) { m_End.y = aY; } void SetEndY( int aY ) { m_End.y = aY; }