Eeschema Eagle Import: Update text alignment parsing
This commit is contained in:
parent
8f66e73749
commit
a6f7cdc949
|
@ -196,24 +196,74 @@ static COMPONENT_ORIENTATION_T kicadComponentRotation( float eagleDegrees )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void eagleToKicadAlignment(EDA_TEXT* aText, int aEagleAlignment)
|
void eagleToKicadAlignment( EDA_TEXT* aText, int aEagleAlignment, int reldegrees, bool mirror, bool spin, int absdegrees )
|
||||||
{
|
{
|
||||||
|
int align = aEagleAlignment;
|
||||||
|
|
||||||
switch( aEagleAlignment )
|
if( reldegrees == 90)
|
||||||
|
{
|
||||||
|
aText->SetTextAngle( 900 );
|
||||||
|
}
|
||||||
|
else if( reldegrees == 180 )
|
||||||
|
align = -align;
|
||||||
|
else if( reldegrees == 270 )
|
||||||
|
{
|
||||||
|
aText->SetTextAngle( 900 );
|
||||||
|
align = -align;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( mirror == true){
|
||||||
|
|
||||||
|
if(absdegrees == 90 || absdegrees == 270)
|
||||||
|
{
|
||||||
|
if( align == ETEXT::BOTTOM_RIGHT )
|
||||||
|
align = ETEXT::TOP_RIGHT;
|
||||||
|
else if( align == ETEXT::BOTTOM_LEFT )
|
||||||
|
align = ETEXT::TOP_LEFT;
|
||||||
|
else if( align == ETEXT::TOP_LEFT )
|
||||||
|
align = ETEXT::BOTTOM_LEFT;
|
||||||
|
else if( align == ETEXT::TOP_RIGHT )
|
||||||
|
align = ETEXT::BOTTOM_RIGHT;
|
||||||
|
}
|
||||||
|
else if (absdegrees == 0 || absdegrees == 180)
|
||||||
|
{
|
||||||
|
if( align == ETEXT::BOTTOM_RIGHT )
|
||||||
|
align = ETEXT::BOTTOM_LEFT;
|
||||||
|
else if( align == ETEXT::BOTTOM_LEFT )
|
||||||
|
align = ETEXT::BOTTOM_RIGHT;
|
||||||
|
else if( align == ETEXT::TOP_LEFT )
|
||||||
|
align = ETEXT::TOP_RIGHT;
|
||||||
|
else if( align == ETEXT::TOP_RIGHT )
|
||||||
|
align = ETEXT::TOP_LEFT;
|
||||||
|
else if( align == ETEXT::CENTER_LEFT )
|
||||||
|
align = ETEXT::CENTER_RIGHT;
|
||||||
|
else if( align == ETEXT::CENTER_RIGHT )
|
||||||
|
align = ETEXT::CENTER_LEFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
switch( align )
|
||||||
{
|
{
|
||||||
case ETEXT::CENTER:
|
case ETEXT::CENTER:
|
||||||
// this was the default in eda_text's constructor
|
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER );
|
||||||
|
aText->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ETEXT::CENTER_LEFT:
|
case ETEXT::CENTER_LEFT:
|
||||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
||||||
|
aText->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ETEXT::CENTER_RIGHT:
|
case ETEXT::CENTER_RIGHT:
|
||||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
||||||
|
aText->SetVertJustify( GR_TEXT_VJUSTIFY_CENTER );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ETEXT::TOP_CENTER:
|
case ETEXT::TOP_CENTER:
|
||||||
|
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER );
|
||||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
aText->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -228,6 +278,7 @@ void eagleToKicadAlignment(EDA_TEXT* aText, int aEagleAlignment)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ETEXT::BOTTOM_CENTER:
|
case ETEXT::BOTTOM_CENTER:
|
||||||
|
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER );
|
||||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
aText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -242,12 +293,13 @@ void eagleToKicadAlignment(EDA_TEXT* aText, int aEagleAlignment)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
||||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
aText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SCH_EAGLE_PLUGIN::SCH_EAGLE_PLUGIN()
|
SCH_EAGLE_PLUGIN::SCH_EAGLE_PLUGIN()
|
||||||
{
|
{
|
||||||
m_rootSheet = nullptr;
|
m_rootSheet = nullptr;
|
||||||
|
@ -1005,22 +1057,30 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
|
||||||
|
|
||||||
component->GetField( REFERENCE )->SetText( einstance.part );
|
component->GetField( REFERENCE )->SetText( einstance.part );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if( epart->value )
|
if( epart->value )
|
||||||
{
|
{
|
||||||
component->GetField( VALUE )->SetText( *epart->value );
|
component->GetField( VALUE )->SetText( *epart->value );
|
||||||
component->GetField( VALUE )->SetVisible( true );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
component->GetField( VALUE )->SetVisible( false );
|
if(epart->device.length()>0)
|
||||||
|
component->GetField( VALUE )->SetText( epart->device );
|
||||||
|
else if(epart->deviceset.length()>0)
|
||||||
|
component->GetField( VALUE )->SetText( epart->deviceset );
|
||||||
}
|
}
|
||||||
|
|
||||||
if(part->GetField(REFERENCE)->IsVisible())
|
if(part->GetField(REFERENCE)->IsVisible())
|
||||||
component->GetField( REFERENCE )->SetVisible( true );
|
component->GetField( REFERENCE )->SetVisible( true );
|
||||||
|
|
||||||
else
|
else
|
||||||
component->GetField( REFERENCE )->SetVisible( false );
|
component->GetField( REFERENCE )->SetVisible( false );
|
||||||
|
|
||||||
|
if(part->GetField( VALUE )->IsVisible())
|
||||||
|
component->GetField( VALUE )->SetVisible( true );
|
||||||
|
else
|
||||||
|
component->GetField( VALUE )->SetVisible( false );
|
||||||
|
|
||||||
wxXmlNode* attributeNode = aInstanceNode->GetChildren();
|
wxXmlNode* attributeNode = aInstanceNode->GetChildren();
|
||||||
while(attributeNode)
|
while(attributeNode)
|
||||||
{
|
{
|
||||||
|
@ -1030,17 +1090,40 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
|
||||||
|
|
||||||
SCH_FIELD* field;
|
SCH_FIELD* field;
|
||||||
if(attr.name == "NAME"){
|
if(attr.name == "NAME"){
|
||||||
|
|
||||||
field = component->GetField( REFERENCE );
|
field = component->GetField( REFERENCE );
|
||||||
field->SetPosition( wxPoint(*attr.x* EUNIT_TO_MIL, *attr.y*-EUNIT_TO_MIL) );
|
field->SetPosition( wxPoint(*attr.x* EUNIT_TO_MIL, *attr.y*-EUNIT_TO_MIL) );
|
||||||
int align = attr.align ? *attr.align : ETEXT::BOTTOM_LEFT;
|
int align = attr.align ? *attr.align : ETEXT::BOTTOM_LEFT;
|
||||||
eagleToKicadAlignment((EDA_TEXT*)field, align);
|
|
||||||
|
int absdegrees = attr.rot ? attr.rot->degrees : 0;
|
||||||
|
bool mirror = attr.rot ? attr.rot->mirror : false;
|
||||||
|
if(einstance.rot)if(einstance.rot->mirror){
|
||||||
|
mirror = !mirror;
|
||||||
|
}
|
||||||
|
bool spin = attr.rot ? attr.rot->spin : false;
|
||||||
|
|
||||||
|
int reldegrees = ( absdegrees - einstance.rot->degrees + 360.0);
|
||||||
|
reldegrees %= 360;
|
||||||
|
|
||||||
|
eagleToKicadAlignment((EDA_TEXT*)field, align, reldegrees, mirror, spin, absdegrees);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (attr.name == "VALUE"){
|
else if (attr.name == "VALUE"){
|
||||||
field = component->GetField( VALUE );
|
field = component->GetField( VALUE );
|
||||||
field->SetPosition( wxPoint(*attr.x* EUNIT_TO_MIL, *attr.y*-EUNIT_TO_MIL) );
|
field->SetPosition( wxPoint(*attr.x* EUNIT_TO_MIL, *attr.y*-EUNIT_TO_MIL) );
|
||||||
int align = attr.align ? *attr.align : ETEXT::BOTTOM_LEFT;
|
int align = attr.align ? *attr.align : ETEXT::BOTTOM_LEFT;
|
||||||
eagleToKicadAlignment((EDA_TEXT*)field, align);
|
|
||||||
|
int absdegrees = attr.rot ? attr.rot->degrees : 0;
|
||||||
|
bool mirror = attr.rot ? attr.rot->mirror : false;
|
||||||
|
bool spin = attr.rot ? attr.rot->spin : false;
|
||||||
|
if(einstance.rot)if(einstance.rot->mirror){
|
||||||
|
mirror = !mirror;
|
||||||
|
}
|
||||||
|
int reldegrees = ( absdegrees - einstance.rot->degrees + 360.0);
|
||||||
|
reldegrees %= 360;
|
||||||
|
|
||||||
|
eagleToKicadAlignment((EDA_TEXT*)field, align, reldegrees, mirror, spin, absdegrees);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
attributeNode = attributeNode->GetNext();
|
attributeNode = attributeNode->GetNext();
|
||||||
|
@ -1240,7 +1323,6 @@ void SCH_EAGLE_PLUGIN::loadSymbol( wxXmlNode* aSymbolNode,
|
||||||
pin->SetPartNumber( gateNumber );
|
pin->SetPartNumber( gateNumber );
|
||||||
pin->SetUnit( gateNumber );
|
pin->SetUnit( gateNumber );
|
||||||
aPart->AddDrawItem( pin );
|
aPart->AddDrawItem( pin );
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( nodeName == "polygon" )
|
else if( nodeName == "polygon" )
|
||||||
|
@ -1485,8 +1567,8 @@ LIB_TEXT* SCH_EAGLE_PLUGIN::loadSymboltext( LIB_PART* aPart, wxXmlNode* aLibText
|
||||||
|
|
||||||
libtext->SetPosition( wxPoint( etext.x * EUNIT_TO_MIL, etext.y * EUNIT_TO_MIL ) );
|
libtext->SetPosition( wxPoint( etext.x * EUNIT_TO_MIL, etext.y * EUNIT_TO_MIL ) );
|
||||||
libtext->SetText( aLibText->GetNodeContent() );
|
libtext->SetText( aLibText->GetNodeContent() );
|
||||||
libtext->SetTextSize( wxSize( int(etext.size * EUNIT_TO_MIL*0.95),
|
libtext->SetTextSize( wxSize( etext.size * EUNIT_TO_MIL*0.95,
|
||||||
int(etext.size * EUNIT_TO_MIL*0.95) ) );
|
etext.size * EUNIT_TO_MIL*0.95 ) );
|
||||||
|
|
||||||
if( etext.ratio )
|
if( etext.ratio )
|
||||||
{
|
{
|
||||||
|
@ -1499,8 +1581,12 @@ LIB_TEXT* SCH_EAGLE_PLUGIN::loadSymboltext( LIB_PART* aPart, wxXmlNode* aLibText
|
||||||
|
|
||||||
int align = etext.align ? *etext.align : ETEXT::BOTTOM_LEFT;
|
int align = etext.align ? *etext.align : ETEXT::BOTTOM_LEFT;
|
||||||
|
|
||||||
eagleToKicadAlignment((EDA_TEXT*)libtext.get(), align);
|
|
||||||
|
|
||||||
|
int degrees = etext.rot ? etext.rot->degrees : 0;
|
||||||
|
bool mirror = etext.rot ? etext.rot->mirror : false;
|
||||||
|
bool spin = etext.rot ? etext.rot->spin : false;
|
||||||
|
|
||||||
|
eagleToKicadAlignment((EDA_TEXT*)libtext.get(), align, degrees, mirror, spin, 0);
|
||||||
|
|
||||||
return libtext.release();
|
return libtext.release();
|
||||||
}
|
}
|
||||||
|
@ -1531,7 +1617,13 @@ SCH_TEXT* SCH_EAGLE_PLUGIN::loadplaintext( wxXmlNode* aSchText )
|
||||||
|
|
||||||
int align = etext.align ? *etext.align : ETEXT::BOTTOM_LEFT;
|
int align = etext.align ? *etext.align : ETEXT::BOTTOM_LEFT;
|
||||||
|
|
||||||
eagleToKicadAlignment((EDA_TEXT*)schtext.get(), align);
|
|
||||||
|
int degrees = etext.rot ? etext.rot->degrees : 0;
|
||||||
|
bool mirror = etext.rot ? etext.rot->mirror : false;
|
||||||
|
bool spin = etext.rot ? etext.rot->spin : false;
|
||||||
|
|
||||||
|
eagleToKicadAlignment((EDA_TEXT*)schtext.get(), align, degrees, mirror, spin, 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return schtext.release();
|
return schtext.release();
|
||||||
|
|
Loading…
Reference in New Issue