7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-21 22:13:44 +00:00

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
{
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<PCB_TRACK*>( 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() );

View File

@ -2050,12 +2050,12 @@ static struct TRACK_VIA_DESC
propMgr.AddProperty( new PROPERTY<PCB_TRACK, int>( _HKI( "Width" ),
&PCB_TRACK::SetWidth, &PCB_TRACK::GetWidth, PROPERTY_DISPLAY::PT_SIZE ) );
propMgr.ReplaceProperty( TYPE_HASH( BOARD_ITEM ), _HKI( "Position X" ),
new PROPERTY<PCB_TRACK, int, BOARD_ITEM>( _HKI( "Start X" ),
&PCB_TRACK::SetX, &PCB_TRACK::GetX, PROPERTY_DISPLAY::PT_COORD,
new PROPERTY<PCB_TRACK, int>( _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<PCB_TRACK, int, BOARD_ITEM>( _HKI( "Start Y" ),
&PCB_TRACK::SetY, &PCB_TRACK::GetY, PROPERTY_DISPLAY::PT_COORD,
new PROPERTY<PCB_TRACK, int>( _HKI( "Start Y" ),
&PCB_TRACK::SetStartY, &PCB_TRACK::GetStartY, PROPERTY_DISPLAY::PT_COORD,
ORIGIN_TRANSFORMS::ABS_Y_COORD ) );
propMgr.AddProperty( new PROPERTY<PCB_TRACK, int>( _HKI( "End X" ),
&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; }
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; }