Refactor pin orientation to be an enum class

Add various LIB_PIN properties
This commit is contained in:
Jon Evans 2023-07-26 23:46:15 -04:00
parent 000fa28ffc
commit 148e111579
22 changed files with 331 additions and 239 deletions

View File

@ -533,6 +533,10 @@ target_include_directories( common SYSTEM PUBLIC
$<TARGET_PROPERTY:nanodbc,INTERFACE_INCLUDE_DIRECTORIES>
)
target_include_directories( common PUBLIC
$<TARGET_PROPERTY:magic_enum,INTERFACE_INCLUDE_DIRECTORIES>
)
set( PCB_COMMON_SRCS
fp_lib_table.cpp

View File

@ -234,14 +234,14 @@ protected:
*/
SIDE getPinSide( SCH_PIN* aPin )
{
int pin_orient = aPin->GetLibPin()->PinDrawOrient( m_symbol->GetTransform() );
PIN_ORIENTATION pin_orient = aPin->GetLibPin()->PinDrawOrient( m_symbol->GetTransform() );
switch( pin_orient )
{
case PIN_RIGHT: return SIDE_LEFT;
case PIN_LEFT: return SIDE_RIGHT;
case PIN_UP: return SIDE_BOTTOM;
case PIN_DOWN: return SIDE_TOP;
case PIN_ORIENTATION::PIN_RIGHT: return SIDE_LEFT;
case PIN_ORIENTATION::PIN_LEFT: return SIDE_RIGHT;
case PIN_ORIENTATION::PIN_UP: return SIDE_BOTTOM;
case PIN_ORIENTATION::PIN_DOWN: return SIDE_TOP;
default:
wxFAIL_MSG( wxS( "Invalid pin orientation" ) );
return SIDE_LEFT;

View File

@ -329,10 +329,15 @@ public:
auto* cfg = Pgm().GetSettingsManager().GetAppSettings<SYMBOL_EDITOR_SETTINGS>();
if( last->GetOrientation() == PIN_LEFT || last->GetOrientation() == PIN_RIGHT )
if( last->GetOrientation() == PIN_ORIENTATION::PIN_LEFT
|| last->GetOrientation() == PIN_ORIENTATION::PIN_RIGHT )
{
pos.y -= schIUScale.MilsToIU( cfg->m_Repeat.pin_step );
}
else
{
pos.x += schIUScale.MilsToIU( cfg->m_Repeat.pin_step );
}
newPin->SetPosition( pos );
@ -957,10 +962,15 @@ void DIALOG_LIB_EDIT_PIN_TABLE::OnAddRow( wxCommandEvent& event )
SYMBOL_EDITOR_SETTINGS* cfg = m_editFrame->GetSettings();
if( last->GetOrientation() == PIN_LEFT || last->GetOrientation() == PIN_RIGHT )
pos.y -= schIUScale.MilsToIU(cfg->m_Repeat.pin_step);
if( last->GetOrientation() == PIN_ORIENTATION::PIN_LEFT
|| last->GetOrientation() == PIN_ORIENTATION::PIN_RIGHT )
{
pos.y -= schIUScale.MilsToIU( cfg->m_Repeat.pin_step );
}
else
pos.x += schIUScale.MilsToIU(cfg->m_Repeat.pin_step);
{
pos.x += schIUScale.MilsToIU( cfg->m_Repeat.pin_step );
}
newPin->SetPosition( pos );
}

View File

@ -392,7 +392,7 @@ void PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems()
pin->SetPosition( MILS_POINT( p.x - 300, p.y + 100 ) );
pin->SetLength( schIUScale.MilsToIU( 100 ) );
pin->SetOrientation( PIN_RIGHT );
pin->SetOrientation( PIN_ORIENTATION::PIN_RIGHT );
pin->SetType( ELECTRICAL_PINTYPE::PT_INPUT );
pin->SetNumber( wxT( "1" ) );
pin->SetName( wxT( "-" ) );
@ -404,7 +404,7 @@ void PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems()
pin->SetPosition( MILS_POINT( p.x - 300, p.y - 100 ) );
pin->SetLength( schIUScale.MilsToIU( 100 ) );
pin->SetOrientation( PIN_RIGHT );
pin->SetOrientation( PIN_ORIENTATION::PIN_RIGHT );
pin->SetType( ELECTRICAL_PINTYPE::PT_INPUT );
pin->SetNumber( wxT( "2" ) );
pin->SetName( wxT( "+" ) );
@ -416,7 +416,7 @@ void PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems()
pin->SetPosition( MILS_POINT( p.x + 300, p.y ) );
pin->SetLength( schIUScale.MilsToIU( 100 ) );
pin->SetOrientation( PIN_LEFT );
pin->SetOrientation( PIN_ORIENTATION::PIN_LEFT );
pin->SetType( ELECTRICAL_PINTYPE::PT_OUTPUT );
pin->SetNumber( wxT( "3" ) );
pin->SetName( wxT( "OUT" ) );

View File

@ -96,7 +96,7 @@ static int externalPinDecoSize( const RENDER_SETTINGS* aSettings, const LIB_PIN
LIB_PIN::LIB_PIN( LIB_SYMBOL* aParent ) :
LIB_ITEM( LIB_PIN_T, aParent ),
m_orientation( PIN_RIGHT ),
m_orientation( PIN_ORIENTATION::PIN_RIGHT ),
m_shape( GRAPHIC_PINSHAPE::LINE ),
m_type( ELECTRICAL_PINTYPE::PT_UNSPECIFIED ),
m_attributes( 0 )
@ -122,8 +122,9 @@ LIB_PIN::LIB_PIN( LIB_SYMBOL* aParent ) :
LIB_PIN::LIB_PIN( LIB_SYMBOL* aParent, const wxString& aName, const wxString& aNumber,
int aOrientation, ELECTRICAL_PINTYPE aPinType, int aLength, int aNameTextSize,
int aNumTextSize, int aConvert, const VECTOR2I& aPos, int aUnit ) :
PIN_ORIENTATION aOrientation, ELECTRICAL_PINTYPE aPinType, int aLength,
int aNameTextSize, int aNumTextSize, int aConvert, const VECTOR2I& aPos,
int aUnit ) :
LIB_ITEM( LIB_PIN_T, aParent ),
m_position( aPos ),
m_length( aLength ),
@ -186,10 +187,10 @@ VECTOR2I LIB_PIN::GetPinRoot() const
switch( m_orientation )
{
default:
case PIN_RIGHT: return VECTOR2I( m_position.x + m_length, -( m_position.y ) );
case PIN_LEFT: return VECTOR2I( m_position.x - m_length, -( m_position.y ) );
case PIN_UP: return VECTOR2I( m_position.x, -( m_position.y + m_length ) );
case PIN_DOWN: return VECTOR2I( m_position.x, -( m_position.y - m_length ) );
case PIN_ORIENTATION::PIN_RIGHT: return VECTOR2I( m_position.x + m_length, -( m_position.y ) );
case PIN_ORIENTATION::PIN_LEFT: return VECTOR2I( m_position.x - m_length, -( m_position.y ) );
case PIN_ORIENTATION::PIN_UP: return VECTOR2I( m_position.x, -( m_position.y + m_length ) );
case PIN_ORIENTATION::PIN_DOWN: return VECTOR2I( m_position.x, -( m_position.y - m_length ) );
}
}
@ -207,7 +208,7 @@ void LIB_PIN::print( const RENDER_SETTINGS* aSettings, const VECTOR2I& aOffset,
wxCHECK( part && opts, /* void */ );
/* Calculate pin orient taking in account the symbol orientation. */
int orient = PinDrawOrient( aTransform );
PIN_ORIENTATION orient = PinDrawOrient( aTransform );
/* Calculate the pin position */
VECTOR2I pos1 = aTransform.TransformCoordinate( m_position ) + aOffset;
@ -248,7 +249,8 @@ void LIB_PIN::print( const RENDER_SETTINGS* aSettings, const VECTOR2I& aOffset,
}
void LIB_PIN::printPinSymbol( const RENDER_SETTINGS* aSettings, const VECTOR2I& aPos, int aOrient, bool aDimmed )
void LIB_PIN::printPinSymbol( const RENDER_SETTINGS* aSettings, const VECTOR2I& aPos,
PIN_ORIENTATION aOrient, bool aDimmed )
{
wxDC* DC = aSettings->GetPrintDC();
int MapX1, MapY1, x1, y1;
@ -275,10 +277,10 @@ void LIB_PIN::printPinSymbol( const RENDER_SETTINGS* aSettings, const VECTOR2I&
switch( aOrient )
{
case PIN_UP: y1 = posY - len; MapY1 = 1; break;
case PIN_DOWN: y1 = posY + len; MapY1 = -1; break;
case PIN_LEFT: x1 = posX - len; MapX1 = 1; break;
case PIN_RIGHT: x1 = posX + len; MapX1 = -1; break;
case PIN_ORIENTATION::PIN_UP: y1 = posY - len; MapY1 = 1; break;
case PIN_ORIENTATION::PIN_DOWN: y1 = posY + len; MapY1 = -1; break;
case PIN_ORIENTATION::PIN_LEFT: x1 = posX - len; MapX1 = 1; break;
case PIN_ORIENTATION::PIN_RIGHT: x1 = posX + len; MapX1 = -1; break;
}
if( m_shape == GRAPHIC_PINSHAPE::INVERTED || m_shape == GRAPHIC_PINSHAPE::INVERTED_CLOCK )
@ -372,8 +374,9 @@ void LIB_PIN::printPinSymbol( const RENDER_SETTINGS* aSettings, const VECTOR2I&
}
void LIB_PIN::printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos, int aPinOrient,
int aTextInside, bool aDrawPinNum, bool aDrawPinName, bool aDimmed )
void LIB_PIN::printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos,
PIN_ORIENTATION aPinOrient, int aTextInside, bool aDrawPinNum,
bool aDrawPinName, bool aDimmed )
{
if( !aDrawPinName && !aDrawPinNum )
return;
@ -417,10 +420,10 @@ void LIB_PIN::printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos
switch( aPinOrient )
{
case PIN_UP: y1 -= m_length; break;
case PIN_DOWN: y1 += m_length; break;
case PIN_LEFT: x1 -= m_length; break;
case PIN_RIGHT: x1 += m_length; break;
case PIN_ORIENTATION::PIN_UP: y1 -= m_length; break;
case PIN_ORIENTATION::PIN_DOWN: y1 += m_length; break;
case PIN_ORIENTATION::PIN_LEFT: x1 -= m_length; break;
case PIN_ORIENTATION::PIN_RIGHT: x1 += m_length; break;
}
wxString name = GetShownName();
@ -434,12 +437,13 @@ void LIB_PIN::printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos
if( aTextInside ) // Draw the text inside, but the pin numbers outside.
{
if(( aPinOrient == PIN_LEFT) || ( aPinOrient == PIN_RIGHT) )
if( ( aPinOrient == PIN_ORIENTATION::PIN_LEFT )
|| ( aPinOrient == PIN_ORIENTATION::PIN_RIGHT ) )
{
// It is an horizontal line
if( aDrawPinName )
{
if( aPinOrient == PIN_RIGHT )
if( aPinOrient == PIN_ORIENTATION::PIN_RIGHT )
{
x = x1 + aTextInside;
GRPrintText( DC, VECTOR2I( x, y1 ), nameColor, name, ANGLE_HORIZONTAL,
@ -465,7 +469,7 @@ void LIB_PIN::printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos
else /* Its a vertical line. */
{
// Text is drawn from bottom to top (i.e. to negative value for Y axis)
if( aPinOrient == PIN_DOWN )
if( aPinOrient == PIN_ORIENTATION::PIN_DOWN )
{
y = y1 + aTextInside;
@ -505,19 +509,20 @@ void LIB_PIN::printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos
}
else /**** Draw num & text pin outside ****/
{
if( ( aPinOrient == PIN_LEFT) || ( aPinOrient == PIN_RIGHT) )
if( ( aPinOrient == PIN_ORIENTATION::PIN_LEFT )
|| ( aPinOrient == PIN_ORIENTATION::PIN_RIGHT ) )
{
/* Its an horizontal line. */
if( aDrawPinName )
{
x = ( x1 + aPinPos.x) / 2;
x = ( x1 + aPinPos.x ) / 2;
GRPrintText( DC, VECTOR2I( x, y1 - name_offset ), nameColor, name, ANGLE_HORIZONTAL,
pinNameSize, GR_TEXT_H_ALIGN_CENTER, GR_TEXT_V_ALIGN_BOTTOM,
namePenWidth, false, false, font );
}
if( aDrawPinNum )
{
x = ( x1 + aPinPos.x) / 2;
x = ( x1 + aPinPos.x ) / 2;
GRPrintText( DC, VECTOR2I( x, y1 + num_offset ), numColor, number, ANGLE_HORIZONTAL,
pinNumSize, GR_TEXT_H_ALIGN_CENTER, GR_TEXT_V_ALIGN_TOP,
numPenWidth, false, false, font );
@ -544,9 +549,8 @@ void LIB_PIN::printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos
}
void LIB_PIN::printPinElectricalTypeName( const RENDER_SETTINGS* aSettings, VECTOR2I& aPosition,
int aOrientation, bool aDimmed )
PIN_ORIENTATION aOrientation, bool aDimmed )
{
wxDC* DC = aSettings->GetPrintDC();
wxString typeName = GetElectricalTypeName();
@ -586,22 +590,22 @@ void LIB_PIN::printPinElectricalTypeName( const RENDER_SETTINGS* aSettings, VECT
switch( aOrientation )
{
case PIN_UP:
case PIN_ORIENTATION::PIN_UP:
txtpos.y += offset;
orient = ANGLE_VERTICAL;
hjustify = GR_TEXT_H_ALIGN_RIGHT;
break;
case PIN_DOWN:
case PIN_ORIENTATION::PIN_DOWN:
txtpos.y -= offset;
orient = ANGLE_VERTICAL;
break;
case PIN_LEFT:
case PIN_ORIENTATION::PIN_LEFT:
txtpos.x += offset;
break;
case PIN_RIGHT:
case PIN_ORIENTATION::PIN_RIGHT:
txtpos.x -= offset;
hjustify = GR_TEXT_H_ALIGN_RIGHT;
break;
@ -612,8 +616,8 @@ void LIB_PIN::printPinElectricalTypeName( const RENDER_SETTINGS* aSettings, VECT
}
void LIB_PIN::PlotSymbol( PLOTTER *aPlotter, const VECTOR2I &aPosition, int aOrientation,
bool aDimmed ) const
void LIB_PIN::PlotSymbol( PLOTTER *aPlotter, const VECTOR2I &aPosition,
PIN_ORIENTATION aOrientation, bool aDimmed ) const
{
int MapX1, MapY1, x1, y1;
COLOR4D color = aPlotter->RenderSettings()->GetLayerColor( LAYER_PIN );
@ -637,10 +641,10 @@ void LIB_PIN::PlotSymbol( PLOTTER *aPlotter, const VECTOR2I &aPosition, int aOri
switch( aOrientation )
{
case PIN_UP: y1 = aPosition.y - m_length; MapY1 = 1; break;
case PIN_DOWN: y1 = aPosition.y + m_length; MapY1 = -1; break;
case PIN_LEFT: x1 = aPosition.x - m_length; MapX1 = 1; break;
case PIN_RIGHT: x1 = aPosition.x + m_length; MapX1 = -1; break;
case PIN_ORIENTATION::PIN_UP: y1 = aPosition.y - m_length; MapY1 = 1; break;
case PIN_ORIENTATION::PIN_DOWN: y1 = aPosition.y + m_length; MapY1 = -1; break;
case PIN_ORIENTATION::PIN_LEFT: x1 = aPosition.x - m_length; MapX1 = 1; break;
case PIN_ORIENTATION::PIN_RIGHT: x1 = aPosition.x + m_length; MapX1 = -1; break;
}
if( m_shape == GRAPHIC_PINSHAPE::INVERTED || m_shape == GRAPHIC_PINSHAPE::INVERTED_CLOCK )
@ -755,8 +759,10 @@ void LIB_PIN::PlotSymbol( PLOTTER *aPlotter, const VECTOR2I &aPosition, int aOri
}
}
void LIB_PIN::PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, int aPinOrient,
int aTextInside, bool aDrawPinNum, bool aDrawPinName, bool aDimmed ) const
void LIB_PIN::PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, PIN_ORIENTATION aPinOrient,
int aTextInside, bool aDrawPinNum, bool aDrawPinName,
bool aDimmed ) const
{
RENDER_SETTINGS* settings = aPlotter->RenderSettings();
KIFONT::FONT* font = KIFONT::FONT::GetFont( settings->GetDefaultFont(), false, false );
@ -801,10 +807,10 @@ void LIB_PIN::PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, int aPin
switch( aPinOrient )
{
case PIN_UP: y1 -= m_length; break;
case PIN_DOWN: y1 += m_length; break;
case PIN_LEFT: x1 -= m_length; break;
case PIN_RIGHT: x1 += m_length; break;
case PIN_ORIENTATION::PIN_UP: y1 -= m_length; break;
case PIN_ORIENTATION::PIN_DOWN: y1 += m_length; break;
case PIN_ORIENTATION::PIN_LEFT: x1 -= m_length; break;
case PIN_ORIENTATION::PIN_RIGHT: x1 += m_length; break;
}
auto plotText =
@ -826,12 +832,14 @@ void LIB_PIN::PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, int aPin
/* Draw the text inside, but the pin numbers outside. */
if( aTextInside )
{
if( ( aPinOrient == PIN_LEFT) || ( aPinOrient == PIN_RIGHT) ) /* Its an horizontal line. */
if( ( aPinOrient == PIN_ORIENTATION::PIN_LEFT )
|| ( aPinOrient == PIN_ORIENTATION::PIN_RIGHT ) ) /* Its an horizontal line. */
{
if( aDrawPinName )
{
GR_TEXT_H_ALIGN_T hjustify;
if( aPinOrient == PIN_RIGHT )
if( aPinOrient == PIN_ORIENTATION::PIN_RIGHT )
{
x = x1 + aTextInside;
hjustify = GR_TEXT_H_ALIGN_LEFT;
@ -855,7 +863,7 @@ void LIB_PIN::PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, int aPin
}
else /* Its a vertical line. */
{
if( aPinOrient == PIN_DOWN )
if( aPinOrient == PIN_ORIENTATION::PIN_DOWN )
{
y = y1 + aTextInside;
@ -893,7 +901,8 @@ void LIB_PIN::PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, int aPin
}
else /* Draw num & text pin outside */
{
if(( aPinOrient == PIN_LEFT) || ( aPinOrient == PIN_RIGHT) )
if( ( aPinOrient == PIN_ORIENTATION::PIN_LEFT )
|| ( aPinOrient == PIN_ORIENTATION::PIN_RIGHT ) )
{
/* Its an horizontal line. */
if( aDrawPinName )
@ -929,34 +938,34 @@ void LIB_PIN::PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, int aPin
}
int LIB_PIN::PinDrawOrient( const TRANSFORM& aTransform ) const
PIN_ORIENTATION LIB_PIN::PinDrawOrient( const TRANSFORM& aTransform ) const
{
int orient;
PIN_ORIENTATION orient;
VECTOR2I end; // position of pin end starting at 0,0 according to its orientation, length = 1
switch( m_orientation )
{
case PIN_UP: end.y = 1; break;
case PIN_DOWN: end.y = -1; break;
case PIN_LEFT: end.x = -1; break;
case PIN_RIGHT: end.x = 1; break;
case PIN_ORIENTATION::PIN_UP: end.y = 1; break;
case PIN_ORIENTATION::PIN_DOWN: end.y = -1; break;
case PIN_ORIENTATION::PIN_LEFT: end.x = -1; break;
case PIN_ORIENTATION::PIN_RIGHT: end.x = 1; break;
}
// = pos of end point, according to the symbol orientation.
end = aTransform.TransformCoordinate( end );
orient = PIN_UP;
orient = PIN_ORIENTATION::PIN_UP;
if( end.x == 0 )
{
if( end.y > 0 )
orient = PIN_DOWN;
orient = PIN_ORIENTATION::PIN_DOWN;
}
else
{
orient = PIN_RIGHT;
orient = PIN_ORIENTATION::PIN_RIGHT;
if( end.x < 0 )
orient = PIN_LEFT;
orient = PIN_ORIENTATION::PIN_LEFT;
}
return orient;
@ -1000,7 +1009,7 @@ int LIB_PIN::compare( const LIB_ITEM& aOther, int aCompareFlags ) const
return m_length - tmp->m_length;
if( m_orientation != tmp->m_orientation )
return m_orientation - tmp->m_orientation;
return static_cast<int>( m_orientation ) - static_cast<int>( tmp->m_orientation );
if( m_shape != tmp->m_shape )
return static_cast<int>( m_shape ) - static_cast<int>( tmp->m_shape );
@ -1054,16 +1063,16 @@ void LIB_PIN::ChangeLength( int aLength )
switch( m_orientation )
{
case PIN_RIGHT:
case PIN_ORIENTATION::PIN_RIGHT:
offsetX = lengthChange;
break;
case PIN_LEFT:
case PIN_ORIENTATION::PIN_LEFT:
offsetX = -1 * lengthChange;
break;
case PIN_UP:
case PIN_ORIENTATION::PIN_UP:
offsetY = lengthChange;
break;
case PIN_DOWN:
case PIN_ORIENTATION::PIN_DOWN:
offsetY = -1 * lengthChange;
break;
}
@ -1092,10 +1101,10 @@ void LIB_PIN::MirrorHorizontal( const VECTOR2I& aCenter )
m_position.x *= -1;
m_position.x += aCenter.x;
if( m_orientation == PIN_RIGHT )
m_orientation = PIN_LEFT;
else if( m_orientation == PIN_LEFT )
m_orientation = PIN_RIGHT;
if( m_orientation == PIN_ORIENTATION::PIN_RIGHT )
m_orientation = PIN_ORIENTATION::PIN_LEFT;
else if( m_orientation == PIN_ORIENTATION::PIN_LEFT )
m_orientation = PIN_ORIENTATION::PIN_RIGHT;
}
@ -1105,10 +1114,10 @@ void LIB_PIN::MirrorVertical( const VECTOR2I& aCenter )
m_position.y *= -1;
m_position.y += aCenter.y;
if( m_orientation == PIN_UP )
m_orientation = PIN_DOWN;
else if( m_orientation == PIN_DOWN )
m_orientation = PIN_UP;
if( m_orientation == PIN_ORIENTATION::PIN_UP )
m_orientation = PIN_ORIENTATION::PIN_DOWN;
else if( m_orientation == PIN_ORIENTATION::PIN_DOWN )
m_orientation = PIN_ORIENTATION::PIN_UP;
}
@ -1122,20 +1131,20 @@ void LIB_PIN::Rotate( const VECTOR2I& aCenter, bool aRotateCCW )
{
switch( m_orientation )
{
case PIN_RIGHT: m_orientation = PIN_UP; break;
case PIN_UP: m_orientation = PIN_LEFT; break;
case PIN_LEFT: m_orientation = PIN_DOWN; break;
case PIN_DOWN: m_orientation = PIN_RIGHT; break;
case PIN_ORIENTATION::PIN_RIGHT: m_orientation = PIN_ORIENTATION::PIN_UP; break;
case PIN_ORIENTATION::PIN_UP: m_orientation = PIN_ORIENTATION::PIN_LEFT; break;
case PIN_ORIENTATION::PIN_LEFT: m_orientation = PIN_ORIENTATION::PIN_DOWN; break;
case PIN_ORIENTATION::PIN_DOWN: m_orientation = PIN_ORIENTATION::PIN_RIGHT; break;
}
}
else
{
switch( m_orientation )
{
case PIN_RIGHT: m_orientation = PIN_DOWN; break;
case PIN_UP: m_orientation = PIN_RIGHT; break;
case PIN_LEFT: m_orientation = PIN_UP; break;
case PIN_DOWN: m_orientation = PIN_LEFT; break;
case PIN_ORIENTATION::PIN_RIGHT: m_orientation = PIN_ORIENTATION::PIN_DOWN; break;
case PIN_ORIENTATION::PIN_UP: m_orientation = PIN_ORIENTATION::PIN_RIGHT; break;
case PIN_ORIENTATION::PIN_LEFT: m_orientation = PIN_ORIENTATION::PIN_UP; break;
case PIN_ORIENTATION::PIN_DOWN: m_orientation = PIN_ORIENTATION::PIN_LEFT; break;
}
}
}
@ -1147,7 +1156,7 @@ void LIB_PIN::Plot( PLOTTER* aPlotter, bool aBackground, const VECTOR2I& aOffset
if( !IsVisible() || aBackground )
return;
int orient = PinDrawOrient( aTransform );
PIN_ORIENTATION orient = PinDrawOrient( aTransform );
VECTOR2I pos = aTransform.TransformCoordinate( m_position ) + aOffset;
PlotSymbol( aPlotter, pos, orient, aDimmed );
@ -1171,8 +1180,7 @@ void LIB_PIN::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITE
// Display pin length
aList.emplace_back( _( "Length" ), aFrame->MessageTextFromValue( m_length, true ) );
int i = PinOrientationIndex( m_orientation );
aList.emplace_back( _( "Orientation" ), PinOrientationName( (unsigned) i ) );
aList.emplace_back( _( "Orientation" ), PinOrientationName( m_orientation ) );
VECTOR2I pinpos = GetPosition();
pinpos.y = -pinpos.y; // Display coords are top to bottom; lib item coords are bottom to top
@ -1326,30 +1334,30 @@ const BOX2I LIB_PIN::GetBoundingBox( bool aIncludeInvisiblePins, bool aIncludeNa
}
// Now, calculate boundary box corners position for the actual pin orientation
int orient = PinDrawOrient( DefaultTransform );
PIN_ORIENTATION orient = PinDrawOrient( DefaultTransform );
/* Calculate the pin position */
switch( orient )
{
case PIN_UP:
case PIN_ORIENTATION::PIN_UP:
// Pin is rotated and texts positions are mirrored
RotatePoint( begin, VECTOR2I( 0, 0 ), -ANGLE_90 );
RotatePoint( end, VECTOR2I( 0, 0 ), -ANGLE_90 );
break;
case PIN_DOWN:
case PIN_ORIENTATION::PIN_DOWN:
RotatePoint( begin, VECTOR2I( 0, 0 ), ANGLE_90 );
RotatePoint( end, VECTOR2I( 0, 0 ), ANGLE_90 );
begin.x = -begin.x;
end.x = -end.x;
break;
case PIN_LEFT:
case PIN_ORIENTATION::PIN_LEFT:
begin.x = -begin.x;
end.x = -end.x;
break;
case PIN_RIGHT:
case PIN_ORIENTATION::PIN_RIGHT:
break;
}
@ -1463,17 +1471,88 @@ static struct LIB_PIN_DESC
{
LIB_PIN_DESC()
{
auto& pinTypeEnum = ENUM_MAP<ELECTRICAL_PINTYPE>::Instance();
if( pinTypeEnum.Choices().GetCount() == 0 )
{
pinTypeEnum.Map( ELECTRICAL_PINTYPE::PT_INPUT, _HKI( "Input" ) )
.Map( ELECTRICAL_PINTYPE::PT_OUTPUT, _HKI( "Output" ) )
.Map( ELECTRICAL_PINTYPE::PT_BIDI, _HKI( "Bidirectional" ) )
.Map( ELECTRICAL_PINTYPE::PT_TRISTATE, _HKI( "Tri-state" ) )
.Map( ELECTRICAL_PINTYPE::PT_PASSIVE, _HKI( "Passive" ) )
.Map( ELECTRICAL_PINTYPE::PT_NIC, _HKI( "Free" ) )
.Map( ELECTRICAL_PINTYPE::PT_UNSPECIFIED, _HKI( "Unspecified" ) )
.Map( ELECTRICAL_PINTYPE::PT_POWER_IN, _HKI( "Power input" ) )
.Map( ELECTRICAL_PINTYPE::PT_POWER_OUT, _HKI( "Power output" ) )
.Map( ELECTRICAL_PINTYPE::PT_OPENCOLLECTOR, _HKI( "Open collector" ) )
.Map( ELECTRICAL_PINTYPE::PT_OPENEMITTER, _HKI( "Open emitter" ) )
.Map( ELECTRICAL_PINTYPE::PT_NC, _HKI( "Unconnected" ) );
}
auto& pinShapeEnum = ENUM_MAP<GRAPHIC_PINSHAPE>::Instance();
if( pinShapeEnum.Choices().GetCount() == 0 )
{
pinShapeEnum.Map( GRAPHIC_PINSHAPE::LINE, _HKI( "Line" ) )
.Map( GRAPHIC_PINSHAPE::INVERTED, _HKI( "Inverted" ) )
.Map( GRAPHIC_PINSHAPE::CLOCK, _HKI( "Clock" ) )
.Map( GRAPHIC_PINSHAPE::INVERTED_CLOCK, _HKI( "Inverted clock" ) )
.Map( GRAPHIC_PINSHAPE::INPUT_LOW, _HKI( "Input low" ) )
.Map( GRAPHIC_PINSHAPE::CLOCK_LOW, _HKI( "Clock low" ) )
.Map( GRAPHIC_PINSHAPE::OUTPUT_LOW, _HKI( "Output low" ) )
.Map( GRAPHIC_PINSHAPE::FALLING_EDGE_CLOCK, _HKI( "Falling edge clock" ) )
.Map( GRAPHIC_PINSHAPE::NONLOGIC, _HKI( "NonLogic" ) );
}
auto& orientationEnum = ENUM_MAP<PIN_ORIENTATION>::Instance();
if( orientationEnum.Choices().GetCount() == 0 )
{
orientationEnum.Map( PIN_ORIENTATION::PIN_RIGHT, _( "Right" ) )
.Map( PIN_ORIENTATION::PIN_LEFT, _( "Left" ) )
.Map( PIN_ORIENTATION::PIN_UP, _( "Up" ) )
.Map( PIN_ORIENTATION::PIN_DOWN, _( "Down" ) );
}
PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance();
REGISTER_TYPE( LIB_PIN );
propMgr.InheritsAfter( TYPE_HASH( LIB_PIN ), TYPE_HASH( SCH_ITEM ) );
propMgr.AddProperty( new PROPERTY<LIB_PIN, wxString>( _HKI( "Pin Name" ),
NO_SETTER( LIB_PIN, wxString ), &LIB_PIN::GetName ) );
&LIB_PIN::SetName, &LIB_PIN::GetName ) );
propMgr.AddProperty( new PROPERTY<LIB_PIN, int>( _HKI( "Name Text Size" ),
&LIB_PIN::SetNameTextSize, &LIB_PIN::GetNameTextSize, PROPERTY_DISPLAY::PT_SIZE ) );
propMgr.AddProperty( new PROPERTY<LIB_PIN, wxString>( _HKI( "Pin Number" ),
NO_SETTER( LIB_PIN, wxString ), &LIB_PIN::GetNumber ) );
&LIB_PIN::SetNumber, &LIB_PIN::GetNumber ) );
propMgr.AddProperty( new PROPERTY<LIB_PIN, int>( _HKI( "Number Text Size" ),
&LIB_PIN::SetNumberTextSize, &LIB_PIN::GetNumberTextSize,
PROPERTY_DISPLAY::PT_SIZE ) );
propMgr.AddProperty( new PROPERTY<LIB_PIN, int>( _HKI( "Length" ),
NO_SETTER( LIB_PIN, int ), &LIB_PIN::GetLength, PROPERTY_DISPLAY::PT_SIZE ) );
&LIB_PIN::SetLength, &LIB_PIN::GetLength, PROPERTY_DISPLAY::PT_SIZE ) );
propMgr.AddProperty( new PROPERTY_ENUM<LIB_PIN,
ELECTRICAL_PINTYPE>( _HKI( "Electrical Type" ),
&LIB_PIN::SetType, &LIB_PIN::GetType ) );
propMgr.AddProperty( new PROPERTY_ENUM<LIB_PIN, GRAPHIC_PINSHAPE>( _HKI( "Graphic Style" ),
&LIB_PIN::SetShape, &LIB_PIN::GetShape ) );
propMgr.AddProperty( new PROPERTY<LIB_PIN, int>( _HKI( "Position X" ),
&LIB_PIN::SetX, &LIB_PIN::GetX, PROPERTY_DISPLAY::PT_COORD ) );
propMgr.AddProperty( new PROPERTY<LIB_PIN, int>( _HKI( "Position Y" ),
&LIB_PIN::SetY, &LIB_PIN::GetY, PROPERTY_DISPLAY::PT_COORD ) );
propMgr.AddProperty( new PROPERTY_ENUM<LIB_PIN, PIN_ORIENTATION>( _HKI( "Orientation" ),
&LIB_PIN::SetOrientation, &LIB_PIN::GetOrientation ) );
}
} _LIB_PIN_DESC;
ENUM_TO_WXANY( PIN_ORIENTATION )
ENUM_TO_WXANY( GRAPHIC_PINSHAPE )
ENUM_TO_WXANY( ELECTRICAL_PINTYPE )

View File

@ -38,17 +38,6 @@
#define PIN_INVISIBLE 1 // Set makes pin invisible
/**
* The symbol library pin object orientations.
*/
enum DrawPinOrient {
PIN_RIGHT = 'R',
PIN_LEFT = 'L',
PIN_UP = 'U',
PIN_DOWN = 'D'
};
class LIB_PIN : public LIB_ITEM
{
public:
@ -76,8 +65,8 @@ public:
return _( "Pin" );
}
int GetOrientation() const { return m_orientation; }
void SetOrientation( int aOrientation ) { m_orientation = aOrientation; }
PIN_ORIENTATION GetOrientation() const { return m_orientation; }
void SetOrientation( PIN_ORIENTATION aOrientation ) { m_orientation = aOrientation; }
GRAPHIC_PINSHAPE GetShape() const { return m_shape; }
void SetShape( GRAPHIC_PINSHAPE aShape ) { m_shape = aShape; }
@ -171,13 +160,13 @@ public:
*
* @param aTransform Transform matrix
*/
int PinDrawOrient( const TRANSFORM& aTransform ) const;
PIN_ORIENTATION PinDrawOrient( const TRANSFORM& aTransform ) const;
LIB_PIN( LIB_SYMBOL* aParent );
LIB_PIN( LIB_SYMBOL* aParent, const wxString& aName, const wxString& aNumber, int aOrientation,
ELECTRICAL_PINTYPE aPinType, int aLength, int aNameTextSize, int aNumTextSize,
int aConvert, const VECTOR2I& aPos, int aUnit );
LIB_PIN( LIB_SYMBOL* aParent, const wxString& aName, const wxString& aNumber,
PIN_ORIENTATION aOrientation, ELECTRICAL_PINTYPE aPinType, int aLength,
int aNameTextSize, int aNumTextSize, int aConvert, const VECTOR2I& aPos, int aUnit );
// Do not create a copy constructor. The one generated by the compiler is adequate.
@ -230,11 +219,11 @@ public:
* If TextInside then the text is been put inside (moving from x1, y1 in
* the opposite direction to x2,y2), otherwise all is drawn outside.
*/
void PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, int aPinOrient, int aTextInside,
bool aDrawPinNum, bool aDrawPinName, bool aDimmed ) const;
void PlotPinTexts( PLOTTER *aPlotter, const VECTOR2I &aPinPos, PIN_ORIENTATION aPinOrient,
int aTextInside, bool aDrawPinNum, bool aDrawPinName, bool aDimmed ) const;
void PlotSymbol( PLOTTER *aPlotter, const VECTOR2I &aPosition, int aOrientation,
bool aDimmed ) const;
void PlotSymbol( PLOTTER *aPlotter, const VECTOR2I &aPosition, PIN_ORIENTATION aOrientation,
bool aDimmed ) const;
void Offset( const VECTOR2I& aOffset ) override;
@ -243,6 +232,12 @@ public:
VECTOR2I GetPosition() const override { return m_position; }
void SetPosition( const VECTOR2I& aPos ) override { m_position = aPos; }
// For properties system
int GetX() const { return m_position.x; }
void SetX( int aX ) { m_position.x = aX; }
int GetY() const { return m_position.y; }
void SetY( int aY ) { m_position.y = aY; }
VECTOR2I GetPinRoot() const;
void MirrorHorizontal( const VECTOR2I& aCenter ) override;
@ -285,8 +280,8 @@ protected:
* Print the pin symbol without text.
* If \a aColor != 0, draw with \a aColor, else with the normal pin color.
*/
void printPinSymbol( const RENDER_SETTINGS *aSettings, const VECTOR2I &aPos, int aOrientation,
bool aDimmed );
void printPinSymbol( const RENDER_SETTINGS *aSettings, const VECTOR2I &aPos,
PIN_ORIENTATION aOrientation, bool aDimmed );
/**
* Put the pin number and pin text info, given the pin line coordinates.
@ -296,14 +291,15 @@ protected:
* If aTextInside then the text is been put inside,otherwise all is drawn outside.
* Pin Name: substring between '~' is negated
*/
void printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos, int aPinOrient,
int aTextInside, bool aDrawPinNum, bool aDrawPinName, bool aDimmed );
void printPinTexts( const RENDER_SETTINGS* aSettings, VECTOR2I& aPinPos,
PIN_ORIENTATION aPinOrient, int aTextInside, bool aDrawPinNum,
bool aDrawPinName, bool aDimmed );
/**
* Draw the electrical type text of the pin (only for the footprint editor)
*/
void printPinElectricalTypeName( const RENDER_SETTINGS* aSettings, VECTOR2I& aPosition,
int aOrientation, bool aDimmed );
PIN_ORIENTATION aOrientation, bool aDimmed );
bool operator==( const LIB_PIN& aRhs ) const { return compare( aRhs, EQUALITY ) == 0; }
bool operator<( const LIB_PIN& aRhs ) const { return compare( aRhs, EQUALITY ) < 0; }
@ -325,7 +321,7 @@ private:
protected:
VECTOR2I m_position; // Position of the pin.
int m_length; // Length of the pin.
int m_orientation; // Pin orientation (Up, Down, Left, Right)
PIN_ORIENTATION m_orientation; // Pin orientation (Up, Down, Left, Right)
GRAPHIC_PINSHAPE m_shape; // Shape drawn around pin
ELECTRICAL_PINTYPE m_type; // Electrical type of the pin.
int m_attributes; // Set bit 0 to indicate pin is invisible.

View File

@ -24,6 +24,7 @@
#include <bitmaps.h>
#include <cstddef>
#include <core/arraydim.h>
#include <magic_enum.hpp>
#include <lib_pin.h>
#include "pgm_base.h"
@ -88,15 +89,6 @@ const std::map<GRAPHIC_PINSHAPE, struct pinShapeStruct> pinShapes = {
// clang-format on
static const int pin_orientation_codes[] =
{
PIN_RIGHT,
PIN_LEFT,
PIN_UP,
PIN_DOWN
};
// bitmaps to show pins orientations in dialog editor
// must have same order than pin_orientation_names
static const BITMAPS iconsPinsOrientations[] =
@ -108,53 +100,29 @@ static const BITMAPS iconsPinsOrientations[] =
};
#define PIN_ORIENTATION_CNT arrayDim( pin_orientation_codes )
// clang-format off
std::map<PIN_ORIENTATION, struct pinShapeStruct> pinOrientations = {
{ PIN_ORIENTATION::PIN_RIGHT, { _( "Right" ), BITMAPS::pinorient_right } },
{ PIN_ORIENTATION::PIN_LEFT, { _( "Left" ), BITMAPS::pinorient_left } },
{ PIN_ORIENTATION::PIN_UP, { _( "Up" ), BITMAPS::pinorient_up } },
{ PIN_ORIENTATION::PIN_DOWN, { _( "Down" ), BITMAPS::pinorient_down } },
};
// clang-format on
// Helper functions to get the pin orientation name from pin_orientation_codes
// Note: the strings are *not* static because they are translated and must be built
// on the fly, to be properly translated
wxString PinOrientationName( unsigned aPinOrientationCode )
PIN_ORIENTATION PinOrientationCode( size_t index )
{
/* Note: The following name lists are sentence capitalized per the GNOME UI
* standards for list controls. Please do not change the capitalization
* of these strings unless the GNOME UI standards are changed.
*/
const wxString pin_orientation_names[] =
{
_( "Right" ),
_( "Left" ),
_( "Up" ),
_( "Down" ),
wxT( "???" )
};
if( aPinOrientationCode > PIN_ORIENTATION_CNT )
aPinOrientationCode = PIN_ORIENTATION_CNT;
return pin_orientation_names[ aPinOrientationCode ];
wxASSERT( index < magic_enum::enum_count<PIN_ORIENTATION>() );
return magic_enum::enum_value<PIN_ORIENTATION>( index );
}
int PinOrientationCode( int index )
int PinOrientationIndex( PIN_ORIENTATION code )
{
if( index >= 0 && index < (int) PIN_ORIENTATION_CNT )
return pin_orientation_codes[ index ];
auto index = magic_enum::enum_index<PIN_ORIENTATION>( code );
return PIN_RIGHT;
}
int PinOrientationIndex( int code )
{
size_t i;
for( i = 0; i < PIN_ORIENTATION_CNT; i++ )
{
if( pin_orientation_codes[i] == code )
return (int) i;
}
if( index.has_value() )
return index.value();
return wxNOT_FOUND;
}
@ -174,10 +142,10 @@ void InitTables()
g_shapeNames.push_back( PinShapeGetText( static_cast<GRAPHIC_PINSHAPE>( i ) ) );
}
for( unsigned i = 0; i < PIN_ORIENTATION_CNT; ++i )
for( PIN_ORIENTATION orientation : magic_enum::enum_values<PIN_ORIENTATION>() )
{
g_orientationIcons.push_back( iconsPinsOrientations[ i ] );
g_orientationNames.push_back( PinOrientationName( i ) );
g_orientationIcons.push_back( PinOrientationGetBitmap( orientation ) );
g_orientationNames.push_back( PinOrientationName( orientation ) );
}
}
@ -294,3 +262,22 @@ BITMAPS PinShapeGetBitmap( GRAPHIC_PINSHAPE aShape )
}
wxString PinOrientationName( PIN_ORIENTATION aOrientation )
{
auto findIt = pinOrientations.find( aOrientation );
wxCHECK_MSG( findIt != pinOrientations.end(), wxT( "?" ), wxT( "Pin orientation not found!" ) );
return findIt->second.name;
}
BITMAPS PinOrientationGetBitmap( PIN_ORIENTATION aOrientation )
{
auto findIt = pinOrientations.find( aOrientation );
wxCHECK_MSG( findIt != pinOrientations.end(), BITMAPS::INVALID_BITMAP,
wxT( "Pin orientation not found!" ) );
return findIt->second.bitmap;
}

View File

@ -69,6 +69,16 @@ enum class GRAPHIC_PINSHAPE
#define GRAPHIC_PINSHAPES_TOTAL ( static_cast<int>( GRAPHIC_PINSHAPE::LAST_OPTION ) + 1 )
/**
* The symbol library pin object orientations.
*/
enum class PIN_ORIENTATION {
PIN_RIGHT = 'R',
PIN_LEFT = 'L',
PIN_UP = 'U',
PIN_DOWN = 'D',
};
// UI
@ -78,9 +88,10 @@ BITMAPS PinShapeGetBitmap( GRAPHIC_PINSHAPE shape );
wxString ElectricalPinTypeGetText( ELECTRICAL_PINTYPE );
BITMAPS ElectricalPinTypeGetBitmap( ELECTRICAL_PINTYPE );
wxString PinOrientationName( unsigned aPinOrientationCode );
int PinOrientationCode( int index );
int PinOrientationIndex( int code );
wxString PinOrientationName( PIN_ORIENTATION aPinOrientation );
BITMAPS PinOrientationGetBitmap( PIN_ORIENTATION aPinOrientation );
PIN_ORIENTATION PinOrientationCode( size_t index );
int PinOrientationIndex( PIN_ORIENTATION code );
const wxArrayString& PinTypeNames();
const std::vector<BITMAPS>& PinTypeIcons();

View File

@ -1350,27 +1350,27 @@ void SCH_PAINTER::draw( const LIB_PIN* aPin, int aLayer, bool aDimmed )
VECTOR2I p0;
VECTOR2I dir;
int len = aPin->GetLength();
int orient = aPin->GetOrientation();
PIN_ORIENTATION orient = aPin->GetOrientation();
switch( orient )
{
case PIN_UP:
case PIN_ORIENTATION::PIN_UP:
p0 = VECTOR2I( pos.x, pos.y - len );
dir = VECTOR2I( 0, 1 );
break;
case PIN_DOWN:
case PIN_ORIENTATION::PIN_DOWN:
p0 = VECTOR2I( pos.x, pos.y + len );
dir = VECTOR2I( 0, -1 );
break;
case PIN_LEFT:
case PIN_ORIENTATION::PIN_LEFT:
p0 = VECTOR2I( pos.x - len, pos.y );
dir = VECTOR2I( 1, 0 );
break;
default:
case PIN_RIGHT:
case PIN_ORIENTATION::PIN_RIGHT:
p0 = VECTOR2I( pos.x + len, pos.y );
dir = VECTOR2I( -1, 0 );
break;
@ -1701,7 +1701,7 @@ void SCH_PAINTER::draw( const LIB_PIN* aPin, int aLayer, bool aDimmed )
switch( orient )
{
case PIN_LEFT:
case PIN_ORIENTATION::PIN_LEFT:
if( size[INSIDE] )
{
drawText( INSIDE, pos + VECTOR2D( -insideOffset - (float) len, 0 ),
@ -1724,7 +1724,7 @@ void SCH_PAINTER::draw( const LIB_PIN* aPin, int aLayer, bool aDimmed )
}
break;
case PIN_RIGHT:
case PIN_ORIENTATION::PIN_RIGHT:
if( size[INSIDE] )
{
drawText( INSIDE, pos + VECTOR2D( insideOffset + (float) len, 0 ),
@ -1747,7 +1747,7 @@ void SCH_PAINTER::draw( const LIB_PIN* aPin, int aLayer, bool aDimmed )
}
break;
case PIN_DOWN:
case PIN_ORIENTATION::PIN_DOWN:
if( size[INSIDE] )
{
drawText( INSIDE, pos + VECTOR2D( 0, insideOffset + (float) len ),
@ -1770,7 +1770,7 @@ void SCH_PAINTER::draw( const LIB_PIN* aPin, int aLayer, bool aDimmed )
}
break;
case PIN_UP:
case PIN_ORIENTATION::PIN_UP:
if( size[INSIDE] )
{
drawText( INSIDE, pos + VECTOR2D( 0, -insideOffset - (float) len ),

View File

@ -132,7 +132,7 @@ GRAPHIC_PINSHAPE SCH_PIN::GetShape() const
}
int SCH_PIN::GetOrientation() const
PIN_ORIENTATION SCH_PIN::GetOrientation() const
{
return m_libPin->GetOrientation();
}
@ -224,8 +224,7 @@ void SCH_PIN::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITE
aList.emplace_back( _( "Length" ), aFrame->MessageTextFromValue( GetLength() ), true );
int i = PinOrientationIndex( GetOrientation() );
aList.emplace_back( _( "Orientation" ), PinOrientationName( (unsigned) i ) );
aList.emplace_back( _( "Orientation" ), PinOrientationName( GetOrientation() ) );
SCH_EDIT_FRAME* schframe = dynamic_cast<SCH_EDIT_FRAME*>( aFrame );
SCH_SHEET_PATH* currentSheet = schframe ? &schframe->GetCurrentSheet() : nullptr;

View File

@ -151,7 +151,7 @@ public:
GRAPHIC_PINSHAPE GetShape() const;
int GetOrientation() const;
PIN_ORIENTATION GetOrientation() const;
int GetLength() const;

View File

@ -909,22 +909,22 @@ void SCH_ALTIUM_PLUGIN::ParsePin( const std::map<wxString, wxString>& aPropertie
switch( elem.orientation )
{
case ASCH_RECORD_ORIENTATION::RIGHTWARDS:
pin->SetOrientation( DrawPinOrient::PIN_LEFT );
pin->SetOrientation( PIN_ORIENTATION::PIN_LEFT );
pinLocation.x += elem.pinlength;
break;
case ASCH_RECORD_ORIENTATION::UPWARDS:
pin->SetOrientation( DrawPinOrient::PIN_DOWN );
pin->SetOrientation( PIN_ORIENTATION::PIN_DOWN );
pinLocation.y -= elem.pinlength;
break;
case ASCH_RECORD_ORIENTATION::LEFTWARDS:
pin->SetOrientation( DrawPinOrient::PIN_RIGHT );
pin->SetOrientation( PIN_ORIENTATION::PIN_RIGHT );
pinLocation.x -= elem.pinlength;
break;
case ASCH_RECORD_ORIENTATION::DOWNWARDS:
pin->SetOrientation( DrawPinOrient::PIN_UP );
pin->SetOrientation( PIN_ORIENTATION::PIN_UP );
pinLocation.y += elem.pinlength;
break;

View File

@ -3303,13 +3303,13 @@ void CADSTAR_SCH_ARCHIVE_LOADER::fixUpLibraryPins( LIB_SYMBOL* aSymbolToFix, int
angle.Normalize180();
if( angle >= -ANGLE_45 && angle <= ANGLE_45 )
pin->SetOrientation( 'R' ); // 0 degrees
pin->SetOrientation( PIN_ORIENTATION::PIN_RIGHT ); // 0 degrees
else if( angle >= ANGLE_45 && angle <= ANGLE_135 )
pin->SetOrientation( 'U' ); // 90 degrees
pin->SetOrientation( PIN_ORIENTATION::PIN_UP ); // 90 degrees
else if( angle >= ANGLE_135 || angle <= -ANGLE_135 )
pin->SetOrientation( 'L' ); // 180 degrees
pin->SetOrientation( PIN_ORIENTATION::PIN_LEFT ); // 180 degrees
else
pin->SetOrientation( 'D' ); // -90 degrees
pin->SetOrientation( PIN_ORIENTATION::PIN_DOWN ); // -90 degrees
};
if( uniqueSegments.count( pin->GetPosition() ) )

View File

@ -2302,10 +2302,10 @@ LIB_PIN* SCH_EAGLE_PLUGIN::loadPin( std::unique_ptr<LIB_SYMBOL>& aSymbol, wxXmlN
switch( roti )
{
case 0: pin->SetOrientation( 'R' ); break;
case 90: pin->SetOrientation( 'U' ); break;
case 180: pin->SetOrientation( 'L' ); break;
case 270: pin->SetOrientation( 'D' ); break;
case 0: pin->SetOrientation( PIN_ORIENTATION::PIN_RIGHT ); break;
case 90: pin->SetOrientation( PIN_ORIENTATION::PIN_UP ); break;
case 180: pin->SetOrientation( PIN_ORIENTATION::PIN_LEFT ); break;
case 270: pin->SetOrientation( PIN_ORIENTATION::PIN_DOWN ); break;
default: wxFAIL_MSG( wxString::Format( wxT( "Unhandled orientation (%d degrees)." ), roti ) );
}
@ -3382,10 +3382,10 @@ void SCH_EAGLE_PLUGIN::addImplicitConnections( SCH_SYMBOL* aSymbol, SCH_SCREEN*
switch( pin->GetOrientation() )
{
case PIN_LEFT: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT ); break;
case PIN_RIGHT: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT ); break;
case PIN_UP: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::UP ); break;
case PIN_DOWN: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM ); break;
case PIN_ORIENTATION::PIN_LEFT: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT ); break;
case PIN_ORIENTATION::PIN_RIGHT: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT ); break;
case PIN_ORIENTATION::PIN_UP: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::UP ); break;
case PIN_ORIENTATION::PIN_DOWN: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM ); break;
}
aScreen->Append( netLabel );

View File

@ -1395,10 +1395,10 @@ LIB_PIN* SCH_SEXPR_PARSER::parsePin()
switch( parseInt( "pin orientation" ) )
{
case 0: pin->SetOrientation( PIN_RIGHT ); break;
case 90: pin->SetOrientation( PIN_UP ); break;
case 180: pin->SetOrientation( PIN_LEFT ); break;
case 270: pin->SetOrientation( PIN_DOWN ); break;
case 0: pin->SetOrientation( PIN_ORIENTATION::PIN_RIGHT ); break;
case 90: pin->SetOrientation( PIN_ORIENTATION::PIN_UP ); break;
case 180: pin->SetOrientation( PIN_ORIENTATION::PIN_LEFT ); break;
case 270: pin->SetOrientation( PIN_ORIENTATION::PIN_DOWN ); break;
default: Expecting( "0, 90, 180, or 270" );
}

View File

@ -149,14 +149,14 @@ const char* getPinShapeToken( GRAPHIC_PINSHAPE aShape )
}
EDA_ANGLE getPinAngle( int aOrientation )
EDA_ANGLE getPinAngle( PIN_ORIENTATION aOrientation )
{
switch( aOrientation )
{
case PIN_RIGHT: return ANGLE_0;
case PIN_LEFT: return ANGLE_180;
case PIN_UP: return ANGLE_90;
case PIN_DOWN: return ANGLE_270;
case PIN_ORIENTATION::PIN_RIGHT: return ANGLE_0;
case PIN_ORIENTATION::PIN_LEFT: return ANGLE_180;
case PIN_ORIENTATION::PIN_UP: return ANGLE_90;
case PIN_ORIENTATION::PIN_DOWN: return ANGLE_270;
default: wxFAIL_MSG( "Missing symbol library pin orientation type" ); return ANGLE_0;
}
}

View File

@ -43,7 +43,7 @@ extern const char* getPinElectricalTypeToken( ELECTRICAL_PINTYPE aType );
extern const char* getPinShapeToken( GRAPHIC_PINSHAPE aShape );
extern EDA_ANGLE getPinAngle( int aOrientation );
extern EDA_ANGLE getPinAngle( PIN_ORIENTATION aOrientation );
extern const char* getSheetPinShapeToken( LABEL_FLAG_SHAPE aShape );

View File

@ -17,6 +17,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <magic_enum.hpp>
#include <wx/log.h>
#include <lib_shape.h>
@ -1068,7 +1069,12 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr<LIB_SYMBOL>& aSymbol,
}
pos += tmp.size() + 1;
int orientation = tmp[0];
PIN_ORIENTATION orientation = PIN_ORIENTATION::PIN_RIGHT;
std::optional<PIN_ORIENTATION> optVal = magic_enum::enum_cast<PIN_ORIENTATION>( tmp[0] );
if( optVal.has_value() )
orientation = optVal.value();
tmp = tokens.GetNextToken();

View File

@ -1231,22 +1231,22 @@ void LTSPICE_SCH_PARSER::CreatePin( LTSPICE_SCHEMATIC::LT_SYMBOL& aLTSymbol, int
{
case LTSPICE_SCHEMATIC::JUSTIFICATION::LEFT:
case LTSPICE_SCHEMATIC::JUSTIFICATION::VLEFT:
aPin->SetOrientation( PIN_RIGHT );
aPin->SetOrientation( PIN_ORIENTATION::PIN_RIGHT );
break;
case LTSPICE_SCHEMATIC::JUSTIFICATION::RIGHT:
case LTSPICE_SCHEMATIC::JUSTIFICATION::VRIGHT:
aPin->SetOrientation( PIN_LEFT );
aPin->SetOrientation( PIN_ORIENTATION::PIN_LEFT );
break;
case LTSPICE_SCHEMATIC::JUSTIFICATION::BOTTOM:
case LTSPICE_SCHEMATIC::JUSTIFICATION::VBOTTOM:
aPin->SetOrientation( PIN_UP );
aPin->SetOrientation( PIN_ORIENTATION::PIN_UP );
break;
case LTSPICE_SCHEMATIC::JUSTIFICATION::TOP:
case LTSPICE_SCHEMATIC::JUSTIFICATION::VTOP:
aPin->SetOrientation( PIN_DOWN );
aPin->SetOrientation( PIN_ORIENTATION::PIN_DOWN );
break;
default: break;

View File

@ -576,19 +576,19 @@ TEXT_SPIN_STYLE SCH_SCREEN::GetLabelOrientationForPoint( const VECTOR2I& a
{
if( pin->GetPosition() == aPosition )
{
if( pin->GetOrientation() == PIN_RIGHT )
if( pin->GetOrientation() == PIN_ORIENTATION::PIN_RIGHT )
{
ret = TEXT_SPIN_STYLE::LEFT;
}
else if( pin->GetOrientation() == PIN_LEFT )
else if( pin->GetOrientation() == PIN_ORIENTATION::PIN_LEFT )
{
ret = TEXT_SPIN_STYLE::RIGHT;
}
else if( pin->GetOrientation() == PIN_UP )
else if( pin->GetOrientation() == PIN_ORIENTATION::PIN_UP )
{
ret = TEXT_SPIN_STYLE::BOTTOM;
}
else if( pin->GetOrientation() == PIN_DOWN )
else if( pin->GetOrientation() == PIN_ORIENTATION::PIN_DOWN )
{
ret = TEXT_SPIN_STYLE::UP;
}

View File

@ -485,10 +485,10 @@ static TEXT_SPIN_STYLE orientLabel( SCH_PIN* aPin )
// Initial orientation from the pin
switch( aPin->GetLibPin()->GetOrientation() )
{
case PIN_UP: spin = TEXT_SPIN_STYLE::BOTTOM; break;
case PIN_DOWN: spin = TEXT_SPIN_STYLE::UP; break;
case PIN_LEFT: spin = TEXT_SPIN_STYLE::RIGHT; break;
case PIN_RIGHT: spin = TEXT_SPIN_STYLE::LEFT; break;
case PIN_ORIENTATION::PIN_UP: spin = TEXT_SPIN_STYLE::BOTTOM; break;
case PIN_ORIENTATION::PIN_DOWN: spin = TEXT_SPIN_STYLE::UP; break;
case PIN_ORIENTATION::PIN_LEFT: spin = TEXT_SPIN_STYLE::RIGHT; break;
case PIN_ORIENTATION::PIN_RIGHT: spin = TEXT_SPIN_STYLE::LEFT; break;
}
// Reorient based on the actual symbol orientation now

View File

@ -36,7 +36,7 @@
static ELECTRICAL_PINTYPE g_LastPinType = ELECTRICAL_PINTYPE::PT_INPUT;
static int g_LastPinOrient = PIN_RIGHT;
static PIN_ORIENTATION g_LastPinOrient = PIN_ORIENTATION::PIN_RIGHT;
static GRAPHIC_PINSHAPE g_LastPinShape = GRAPHIC_PINSHAPE::LINE;
static bool g_LastPinCommonConvert = false;
static bool g_LastPinCommonUnit = false;
@ -419,10 +419,10 @@ LIB_PIN* SYMBOL_EDITOR_PIN_TOOL::RepeatPin( const LIB_PIN* aSourcePin )
switch( pin->GetOrientation() )
{
case PIN_UP: step.x = schIUScale.MilsToIU(settings->m_Repeat.pin_step); break;
case PIN_DOWN: step.x = schIUScale.MilsToIU(settings->m_Repeat.pin_step); break;
case PIN_LEFT: step.y = schIUScale.MilsToIU(-settings->m_Repeat.pin_step); break;
case PIN_RIGHT: step.y = schIUScale.MilsToIU(-settings->m_Repeat.pin_step); break;
case PIN_ORIENTATION::PIN_UP: step.x = schIUScale.MilsToIU(settings->m_Repeat.pin_step); break;
case PIN_ORIENTATION::PIN_DOWN: step.x = schIUScale.MilsToIU(settings->m_Repeat.pin_step); break;
case PIN_ORIENTATION::PIN_LEFT: step.y = schIUScale.MilsToIU(-settings->m_Repeat.pin_step); break;
case PIN_ORIENTATION::PIN_RIGHT: step.y = schIUScale.MilsToIU(-settings->m_Repeat.pin_step); break;
}
pin->Offset( step );