EasyEDA Std Schematic: import net ports as global labels.
This commit is contained in:
parent
25cca5adfe
commit
979274af7c
|
@ -371,8 +371,10 @@ void SCH_EASYEDA_PARSER::ParseSymbolShapes( LIB_SYMBOL* aSymbol
|
||||||
SHAPE_LINE_CHAIN chain;
|
SHAPE_LINE_CHAIN chain;
|
||||||
|
|
||||||
for( size_t i = 1; i < ptArr.size(); i += 2 )
|
for( size_t i = 1; i < ptArr.size(); i += 2 )
|
||||||
|
{
|
||||||
chain.Append(
|
chain.Append(
|
||||||
RelPosSym( VECTOR2I( Convert( ptArr[i - 1] ), Convert( ptArr[i] ) ) ) );
|
RelPosSym( VECTOR2I( Convert( ptArr[i - 1] ), Convert( ptArr[i] ) ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<LIB_SHAPE> line = std::make_unique<LIB_SHAPE>( aSymbol, SHAPE_T::POLY );
|
std::unique_ptr<LIB_SHAPE> line = std::make_unique<LIB_SHAPE>( aSymbol, SHAPE_T::POLY );
|
||||||
|
|
||||||
|
@ -1087,92 +1089,147 @@ void SCH_EASYEDA_PARSER::ParseSchematic( SCHEMATIC* aSchematic, SCH_SHEET* aRoot
|
||||||
wxString valueFontname = valueParts[7];
|
wxString valueFontname = valueParts[7];
|
||||||
wxString valueFontsize = valueParts[8];
|
wxString valueFontsize = valueParts[8];
|
||||||
|
|
||||||
auto pair = MakePowerSymbol( flagTypename, netnameValue );
|
if( flagTypename == wxS( "part_netLabel_netPort" ) )
|
||||||
LIB_SYMBOL* pwrLibSym = pair.first;
|
|
||||||
bool flip = pair.second;
|
|
||||||
|
|
||||||
LIB_ID libId = EasyEdaToKiCadLibID( wxEmptyString, netnameValue );
|
|
||||||
|
|
||||||
std::unique_ptr<SCH_SYMBOL> schSym = std::make_unique<SCH_SYMBOL>(
|
|
||||||
*pwrLibSym, libId, &aSchematic->CurrentSheet(), 0 );
|
|
||||||
|
|
||||||
if( flip )
|
|
||||||
schSym->SetOrientation( SYM_MIRROR_X );
|
|
||||||
|
|
||||||
if( angle == 0 )
|
|
||||||
{
|
{
|
||||||
}
|
std::unique_ptr<SCH_GLOBALLABEL> label =
|
||||||
else if( angle == 90 )
|
std::make_unique<SCH_GLOBALLABEL>( RelPos( pos ), netnameValue );
|
||||||
{
|
|
||||||
schSym->SetOrientation( SYM_ROTATE_COUNTERCLOCKWISE );
|
|
||||||
}
|
|
||||||
if( angle == 180 )
|
|
||||||
{
|
|
||||||
schSym->SetOrientation( SYM_ROTATE_COUNTERCLOCKWISE );
|
|
||||||
schSym->SetOrientation( SYM_ROTATE_COUNTERCLOCKWISE );
|
|
||||||
}
|
|
||||||
if( angle == 270 )
|
|
||||||
{
|
|
||||||
schSym->SetOrientation( SYM_ROTATE_CLOCKWISE );
|
|
||||||
}
|
|
||||||
|
|
||||||
schSym->SetPosition( RelPos( pos ) );
|
SPIN_STYLE spin = SPIN_STYLE::LEFT;
|
||||||
|
|
||||||
SCH_FIELD* valField = schSym->GetField( VALUE_FIELD );
|
for( double i = angle; i > 0; i -= 90 )
|
||||||
|
spin = spin.RotateCCW();
|
||||||
|
|
||||||
valField->SetPosition( RelPos( valuePos ) );
|
// If the shape was mirrored, we can't rely on angle value to determine direction.
|
||||||
valField->SetTextAngleDegrees( textAngle - angle );
|
if( segments.size() > 3 )
|
||||||
|
{
|
||||||
|
wxArrayString shapeParts = wxSplit( segments[3], '~', '\0' );
|
||||||
|
if( shapeParts[0] == wxS( "PL" ) )
|
||||||
|
{
|
||||||
|
wxArrayString ptArr = wxSplit( shapeParts[1], ' ', '\0' );
|
||||||
|
|
||||||
if( !flip )
|
SHAPE_LINE_CHAIN chain;
|
||||||
valField->SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM );
|
|
||||||
|
for( size_t i = 1; i < ptArr.size(); i += 2 )
|
||||||
|
{
|
||||||
|
chain.Append( RelPos(
|
||||||
|
VECTOR2I( Convert( ptArr[i - 1] ), Convert( ptArr[i] ) ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
chain.Move( -RelPos( pos ) );
|
||||||
|
|
||||||
|
VECTOR2I shapeCenter = chain.Centre();
|
||||||
|
|
||||||
|
if( std::abs( shapeCenter.x ) >= std::abs( shapeCenter.y ) )
|
||||||
|
{
|
||||||
|
if( shapeCenter.x >= 0 )
|
||||||
|
spin = SPIN_STYLE::RIGHT;
|
||||||
|
else
|
||||||
|
spin = SPIN_STYLE::LEFT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( shapeCenter.y >= 0 )
|
||||||
|
spin = SPIN_STYLE::BOTTOM;
|
||||||
|
else
|
||||||
|
spin = SPIN_STYLE::UP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
label->SetSpinStyle( spin );
|
||||||
|
label->SetShape( LABEL_FLAG_SHAPE::L_INPUT );
|
||||||
|
|
||||||
|
createdItems.push_back( std::move( label ) );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
valField->SetVertJustify( GR_TEXT_V_ALIGN_TOP );
|
|
||||||
|
|
||||||
if( halignStr == wxS( "middle" ) )
|
|
||||||
valField->SetHorizJustify( GR_TEXT_H_ALIGN_CENTER );
|
|
||||||
else if( halignStr == wxS( "end" ) )
|
|
||||||
valField->SetHorizJustify( GR_TEXT_H_ALIGN_RIGHT );
|
|
||||||
else
|
|
||||||
valField->SetHorizJustify( GR_TEXT_H_ALIGN_LEFT );
|
|
||||||
|
|
||||||
if( flip && ( angle == 90 || angle == 270 ) )
|
|
||||||
{
|
{
|
||||||
if( valField->GetVertJustify() == GR_TEXT_V_ALIGN_BOTTOM )
|
auto pair = MakePowerSymbol( flagTypename, netnameValue );
|
||||||
|
LIB_SYMBOL* pwrLibSym = pair.first;
|
||||||
|
bool flip = pair.second;
|
||||||
|
|
||||||
|
LIB_ID libId = EasyEdaToKiCadLibID( wxEmptyString, netnameValue );
|
||||||
|
|
||||||
|
std::unique_ptr<SCH_SYMBOL> schSym = std::make_unique<SCH_SYMBOL>(
|
||||||
|
*pwrLibSym, libId, &aSchematic->CurrentSheet(), 0 );
|
||||||
|
|
||||||
|
if( flip )
|
||||||
|
schSym->SetOrientation( SYM_MIRROR_X );
|
||||||
|
|
||||||
|
if( angle == 0 )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else if( angle == 90 )
|
||||||
|
{
|
||||||
|
schSym->SetOrientation( SYM_ROTATE_COUNTERCLOCKWISE );
|
||||||
|
}
|
||||||
|
if( angle == 180 )
|
||||||
|
{
|
||||||
|
schSym->SetOrientation( SYM_ROTATE_COUNTERCLOCKWISE );
|
||||||
|
schSym->SetOrientation( SYM_ROTATE_COUNTERCLOCKWISE );
|
||||||
|
}
|
||||||
|
if( angle == 270 )
|
||||||
|
{
|
||||||
|
schSym->SetOrientation( SYM_ROTATE_CLOCKWISE );
|
||||||
|
}
|
||||||
|
|
||||||
|
schSym->SetPosition( RelPos( pos ) );
|
||||||
|
|
||||||
|
SCH_FIELD* valField = schSym->GetField( VALUE_FIELD );
|
||||||
|
|
||||||
|
valField->SetPosition( RelPos( valuePos ) );
|
||||||
|
valField->SetTextAngleDegrees( textAngle - angle );
|
||||||
|
|
||||||
|
if( !flip )
|
||||||
|
valField->SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM );
|
||||||
|
else
|
||||||
valField->SetVertJustify( GR_TEXT_V_ALIGN_TOP );
|
valField->SetVertJustify( GR_TEXT_V_ALIGN_TOP );
|
||||||
else if( valField->GetVertJustify() == GR_TEXT_V_ALIGN_TOP )
|
|
||||||
|
if( halignStr == wxS( "middle" ) )
|
||||||
|
valField->SetHorizJustify( GR_TEXT_H_ALIGN_CENTER );
|
||||||
|
else if( halignStr == wxS( "end" ) )
|
||||||
|
valField->SetHorizJustify( GR_TEXT_H_ALIGN_RIGHT );
|
||||||
|
else
|
||||||
|
valField->SetHorizJustify( GR_TEXT_H_ALIGN_LEFT );
|
||||||
|
|
||||||
|
if( flip && ( angle == 90 || angle == 270 ) )
|
||||||
|
{
|
||||||
|
if( valField->GetVertJustify() == GR_TEXT_V_ALIGN_BOTTOM )
|
||||||
|
valField->SetVertJustify( GR_TEXT_V_ALIGN_TOP );
|
||||||
|
else if( valField->GetVertJustify() == GR_TEXT_V_ALIGN_TOP )
|
||||||
|
valField->SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM );
|
||||||
|
|
||||||
|
if( valField->GetHorizJustify() == GR_TEXT_H_ALIGN_RIGHT )
|
||||||
|
valField->SetHorizJustify( GR_TEXT_H_ALIGN_LEFT );
|
||||||
|
else if( valField->GetHorizJustify() == GR_TEXT_H_ALIGN_LEFT )
|
||||||
|
valField->SetHorizJustify( GR_TEXT_H_ALIGN_RIGHT );
|
||||||
|
|
||||||
|
if( flagTypename == wxS( "part_netLabel_Bar" ) ) // "Circle"
|
||||||
|
valField->SetVertJustify( GR_TEXT_V_ALIGN_CENTER );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( angle == 0 && flagTypename == wxS( "part_netLabel_Bar" ) ) // "Circle"
|
||||||
valField->SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM );
|
valField->SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM );
|
||||||
|
|
||||||
if( valField->GetHorizJustify() == GR_TEXT_H_ALIGN_RIGHT )
|
valField->SetFont( KIFONT::FONT::GetFont( valueFontname ) );
|
||||||
valField->SetHorizJustify( GR_TEXT_H_ALIGN_LEFT );
|
|
||||||
else if( valField->GetHorizJustify() == GR_TEXT_H_ALIGN_LEFT )
|
|
||||||
valField->SetHorizJustify( GR_TEXT_H_ALIGN_RIGHT );
|
|
||||||
|
|
||||||
if( flagTypename == wxS( "part_netLabel_Bar" ) ) // "Circle"
|
double ptSize = 7;
|
||||||
valField->SetVertJustify( GR_TEXT_V_ALIGN_CENTER );
|
|
||||||
|
if( valueFontsize.EndsWith( wxS( "pt" ) ) )
|
||||||
|
ptSize = Convert( valueFontsize.BeforeFirst( 'p' ) );
|
||||||
|
|
||||||
|
double ktextSize = ScaleSize( ptSize );
|
||||||
|
|
||||||
|
if( netnameValue.Contains( wxS( "\n" ) ) )
|
||||||
|
ktextSize *= 0.8;
|
||||||
|
else
|
||||||
|
ktextSize *= 0.95;
|
||||||
|
|
||||||
|
valField->SetTextSize( VECTOR2I( ktextSize, ktextSize ) );
|
||||||
|
|
||||||
|
//TransformToBaseline( valField, wxS( "" ), true );
|
||||||
|
|
||||||
|
createdItems.push_back( std::move( schSym ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( angle == 0 && flagTypename == wxS( "part_netLabel_Bar" ) ) // "Circle"
|
|
||||||
valField->SetVertJustify( GR_TEXT_V_ALIGN_BOTTOM );
|
|
||||||
|
|
||||||
valField->SetFont( KIFONT::FONT::GetFont( valueFontname ) );
|
|
||||||
|
|
||||||
double ptSize = 7;
|
|
||||||
|
|
||||||
if( valueFontsize.EndsWith( wxS( "pt" ) ) )
|
|
||||||
ptSize = Convert( valueFontsize.BeforeFirst( 'p' ) );
|
|
||||||
|
|
||||||
double ktextSize = ScaleSize( ptSize );
|
|
||||||
|
|
||||||
if( netnameValue.Contains( wxS( "\n" ) ) )
|
|
||||||
ktextSize *= 0.8;
|
|
||||||
else
|
|
||||||
ktextSize *= 0.95;
|
|
||||||
|
|
||||||
valField->SetTextSize( VECTOR2I( ktextSize, ktextSize ) );
|
|
||||||
|
|
||||||
//TransformToBaseline( valField, wxS( "" ), true );
|
|
||||||
|
|
||||||
createdItems.push_back( std::move( schSym ) );
|
|
||||||
}
|
}
|
||||||
else if( rootType == wxS( "W" ) )
|
else if( rootType == wxS( "W" ) )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue