mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-15 02:33:15 +02:00
Fix label creation for new netname driven from a pin
LIB_PIN is never used in the connectivity calculation, so it should use SCH_PIN instead. Additionally, the label orientation should take into account the orientation of the component to ensure they don't overlap.
This commit is contained in:
parent
967587adcc
commit
ae45c08ce4
@ -472,6 +472,73 @@ void BACK_ANNOTATE::applyChangelist()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static LABEL_SPIN_STYLE orientLabel( SCH_PIN* aPin )
|
||||||
|
{
|
||||||
|
LABEL_SPIN_STYLE spin = LABEL_SPIN_STYLE::RIGHT;
|
||||||
|
|
||||||
|
// Initial orientation from the pin
|
||||||
|
switch( aPin->GetLibPin()->GetOrientation() )
|
||||||
|
{
|
||||||
|
case PIN_UP: spin = LABEL_SPIN_STYLE::BOTTOM; break;
|
||||||
|
case PIN_DOWN: spin = LABEL_SPIN_STYLE::UP; break;
|
||||||
|
case PIN_LEFT: spin = LABEL_SPIN_STYLE::LEFT; break;
|
||||||
|
case PIN_RIGHT: spin = LABEL_SPIN_STYLE::RIGHT; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reorient based on the actual component orientation now
|
||||||
|
struct ORIENT
|
||||||
|
{
|
||||||
|
int flag;
|
||||||
|
int n_rots;
|
||||||
|
int mirror_x;
|
||||||
|
int mirror_y;
|
||||||
|
}
|
||||||
|
orientations[] =
|
||||||
|
{
|
||||||
|
{ CMP_ORIENT_0, 0, 0, 0 },
|
||||||
|
{ CMP_ORIENT_90, 1, 0, 0 },
|
||||||
|
{ CMP_ORIENT_180, 2, 0, 0 },
|
||||||
|
{ CMP_ORIENT_270, 3, 0, 0 },
|
||||||
|
{ CMP_MIRROR_X + CMP_ORIENT_0, 0, 1, 0 },
|
||||||
|
{ CMP_MIRROR_X + CMP_ORIENT_90, 1, 1, 0 },
|
||||||
|
{ CMP_MIRROR_Y, 0, 0, 1 },
|
||||||
|
{ CMP_MIRROR_X + CMP_ORIENT_270, 3, 1, 0 },
|
||||||
|
{ CMP_MIRROR_Y + CMP_ORIENT_0, 0, 0, 1 },
|
||||||
|
{ CMP_MIRROR_Y + CMP_ORIENT_90, 1, 0, 1 },
|
||||||
|
{ CMP_MIRROR_Y + CMP_ORIENT_180, 2, 0, 1 },
|
||||||
|
{ CMP_MIRROR_Y + CMP_ORIENT_270, 3, 0, 1 }
|
||||||
|
};
|
||||||
|
|
||||||
|
ORIENT o = orientations[ 0 ];
|
||||||
|
|
||||||
|
SCH_COMPONENT* comp = aPin->GetParentComponent();
|
||||||
|
|
||||||
|
if( !comp )
|
||||||
|
return spin;
|
||||||
|
|
||||||
|
int compOrient = comp->GetOrientation();
|
||||||
|
|
||||||
|
for( auto& i : orientations )
|
||||||
|
{
|
||||||
|
if( i.flag == compOrient )
|
||||||
|
{
|
||||||
|
o = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int i = 0; i < o.n_rots; i++ )
|
||||||
|
spin = spin.RotateCCW();
|
||||||
|
|
||||||
|
if( o.mirror_x )
|
||||||
|
spin = spin.MirrorX();
|
||||||
|
|
||||||
|
if( o.mirror_y )
|
||||||
|
spin = spin.MirrorY();
|
||||||
|
|
||||||
|
return spin;
|
||||||
|
}
|
||||||
|
|
||||||
void BACK_ANNOTATE::processNetNameChange( SCH_CONNECTION* aConn, const wxString& aOldName,
|
void BACK_ANNOTATE::processNetNameChange( SCH_CONNECTION* aConn, const wxString& aOldName,
|
||||||
const wxString& aNewName )
|
const wxString& aNewName )
|
||||||
{
|
{
|
||||||
@ -579,12 +646,12 @@ void BACK_ANNOTATE::processNetNameChange( SCH_CONNECTION* aConn, const wxString&
|
|||||||
m_reporter.ReportHead( msg, RPT_SEVERITY_ACTION );
|
m_reporter.ReportHead( msg, RPT_SEVERITY_ACTION );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LIB_PIN_T:
|
case SCH_PIN_T:
|
||||||
{
|
{
|
||||||
LIB_PIN* pin = dynamic_cast<LIB_PIN*>( driver );
|
SCH_PIN* schPin = static_cast<SCH_PIN*>( driver );
|
||||||
LABEL_SPIN_STYLE spin = LABEL_SPIN_STYLE::RIGHT;
|
LABEL_SPIN_STYLE spin = orientLabel( schPin );
|
||||||
|
|
||||||
if( pin->IsPowerConnection() )
|
if( schPin->IsPowerConnection() )
|
||||||
{
|
{
|
||||||
msg.Printf( _( "Net \"%s\" cannot be changed to \"%s\" because it "
|
msg.Printf( _( "Net \"%s\" cannot be changed to \"%s\" because it "
|
||||||
"is driven by a power pin." ),
|
"is driven by a power pin." ),
|
||||||
@ -595,14 +662,6 @@ void BACK_ANNOTATE::processNetNameChange( SCH_CONNECTION* aConn, const wxString&
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( pin->GetOrientation() )
|
|
||||||
{
|
|
||||||
case PIN_UP: spin = LABEL_SPIN_STYLE::UP; break;
|
|
||||||
case PIN_DOWN: spin = LABEL_SPIN_STYLE::BOTTOM; break;
|
|
||||||
case PIN_LEFT: spin = LABEL_SPIN_STYLE::LEFT; break;
|
|
||||||
case PIN_RIGHT: spin = LABEL_SPIN_STYLE::RIGHT; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
++m_changesCount;
|
++m_changesCount;
|
||||||
msg.Printf( _( "Add label \"%s\" to net \"%s\"." ), aNewName, aOldName );
|
msg.Printf( _( "Add label \"%s\" to net \"%s\"." ), aNewName, aOldName );
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user