Eeschema Eagle Import: Symbol field positioning fixes.

This commit is contained in:
Russell Oliver 2017-07-09 19:35:13 +10:00 committed by Maciej Suminski
parent 23dc8fdf32
commit 13abec84ef
1 changed files with 88 additions and 11 deletions

View File

@ -656,6 +656,7 @@ SCH_LINE* SCH_EAGLE_PLUGIN::loadSignalWire( wxXmlNode* aWireNode )
if( end.x < sheetBottomLeft.x) sheetBottomLeft.x = end.x; if( end.x < sheetBottomLeft.x) sheetBottomLeft.x = end.x;
if( end.y > sheetBottomLeft.y) sheetBottomLeft.y = end.y; if( end.y > sheetBottomLeft.y) sheetBottomLeft.y = end.y;
return wire.release(); return wire.release();
} }
@ -720,9 +721,12 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
// std::cout << "Instance> part: " << einstance.part << " Gate: " << einstance.gate << " " << symbolname << '\n'; // std::cout << "Instance> part: " << einstance.part << " Gate: " << einstance.gate << " " << symbolname << '\n';
std::unique_ptr<SCH_COMPONENT> component( new SCH_COMPONENT() );
LIB_ID libId( m_partlib->GetLogicalName(), symbolname ); LIB_ID libId( m_partlib->GetLogicalName(), symbolname );
LIB_PART* part = m_partlib->FindPart(symbolname);
std::unique_ptr<SCH_COMPONENT> component( new SCH_COMPONENT() );
component->SetLibId( libId ); component->SetLibId( libId );
component->SetUnit( unit ); component->SetUnit( unit );
component->SetConvert( 0 ); component->SetConvert( 0 );
@ -742,7 +746,24 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
} }
} }
component->GetField( 0 )->SetText( einstance.part ); LIB_FIELDS partFields;
part->GetFields(partFields);
for( auto const& field : partFields )
{
component->GetField(field.GetId())->ImportValues(field);
component->GetField(field.GetId())->SetTextPos( component->GetPosition() + field.GetTextPos() );
}
component->GetField( REFERENCE )->SetText( einstance.part );
if(epart->value)
{
component->GetField( VALUE )->SetText( *epart->value );
} else
{
component->GetField( VALUE )->SetText( *epart->value );
}
component->GetField( VALUE )->SetVisible(true);
component->GetField( REFERENCE )->SetVisible(true);
component->SetModified(); component->SetModified();
component->ClearFlags(); component->ClearFlags();
@ -838,7 +859,8 @@ EAGLE_LIBRARY* SCH_EAGLE_PLUGIN::loadLibrary( wxXmlNode* aLibraryNode )
{ {
EGATE egate = EGATE( gateNode ); EGATE egate = EGATE( gateNode );
elib.get()->gate_unit[edeviceset.name + edevice.name + egate.name] = gates_count; elib.get()->gate_unit[edeviceset.name + edevice.name + egate.name] = gateindex;
loadSymbol( elib->symbolnodes[egate.symbol], loadSymbol( elib->symbolnodes[egate.symbol],
(LIB_PART*) kpart.get(), &edevice, gateindex, egate.name ); (LIB_PART*) kpart.get(), &edevice, gateindex, egate.name );
@ -848,6 +870,9 @@ EAGLE_LIBRARY* SCH_EAGLE_PLUGIN::loadLibrary( wxXmlNode* aLibraryNode )
} // gateNode } // gateNode
kpart->SetUnitCount( gates_count ); kpart->SetUnitCount( gates_count );
kpart->GetField( VALUE )->SetVisible(true);
kpart->GetField( REFERENCE )->SetVisible(true);
const string& name = kpart->GetName().ToStdString(); const string& name = kpart->GetName().ToStdString();
m_partlib->AddPart( kpart.get() ); m_partlib->AddPart( kpart.get() );
@ -942,19 +967,26 @@ void SCH_EAGLE_PLUGIN::loadSymbol( wxXmlNode* aSymbolNode,
libtext->SetUnit( gateNumber ); libtext->SetUnit( gateNumber );
// TODO: Reimplement mandatory field positioning. // TODO: Reimplement mandatory field positioning.
std::cout << libtext->GetText() << '\n';
if( libtext->GetText() ==">NAME" ) if( libtext->GetText() ==">NAME" )
{ {
aPart->GetReferenceField().SetTextPos( libtext->GetPosition() ); aPart->GetField( REFERENCE )->SetTextPos( libtext->GetPosition() );
aPart->GetReferenceField().SetTextSize( libtext->GetTextSize() ); aPart->GetField( REFERENCE )->SetTextSize( libtext->GetTextSize() );
aPart->GetReferenceField().SetTextAngle( libtext->GetTextAngle() ); aPart->GetField( REFERENCE )->SetTextAngle( libtext->GetTextAngle() );
aPart->GetReferenceField().SetBold( libtext->IsBold() ); aPart->GetField( REFERENCE )->SetBold( libtext->IsBold() );
aPart->GetField( REFERENCE )->SetVertJustify(libtext->GetVertJustify());
aPart->GetField( REFERENCE )->SetHorizJustify(libtext->GetHorizJustify());
aPart->GetField( REFERENCE )->SetVisible(true);
} }
else if( libtext->GetText() == ">VALUE" ) else if( libtext->GetText() == ">VALUE" )
{ {
aPart->GetValueField().SetTextPos( libtext->GetPosition() ); aPart->GetField( VALUE )->SetTextPos( libtext->GetPosition() );
aPart->GetValueField().SetTextSize( libtext->GetTextSize() ); aPart->GetField( VALUE )->SetTextSize( libtext->GetTextSize() );
aPart->GetValueField().SetTextAngle( libtext->GetTextAngle() ); aPart->GetField( VALUE )->SetTextAngle( libtext->GetTextAngle() );
aPart->GetValueField().SetBold( libtext->IsBold() ); aPart->GetField( VALUE )->SetBold( libtext->IsBold() );
aPart->GetField( VALUE )->SetVertJustify(libtext->GetVertJustify());
aPart->GetField( VALUE )->SetHorizJustify(libtext->GetHorizJustify());
aPart->GetField( VALUE )->SetVisible(true);
} }
else else
{ {
@ -1129,6 +1161,51 @@ LIB_TEXT* SCH_EAGLE_PLUGIN::loadSymboltext( LIB_PART* aPart, wxXmlNode* aLibText
} }
} }
int align = etext.align ? *etext.align : ETEXT::BOTTOM_LEFT;
switch( align )
{
case ETEXT::CENTER:
// this was the default in eda_text's constructor
break;
case ETEXT::CENTER_LEFT:
libtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
break;
case ETEXT::CENTER_RIGHT:
libtext->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
break;
case ETEXT::TOP_CENTER:
libtext->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
break;
case ETEXT::TOP_LEFT:
libtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
libtext->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
break;
case ETEXT::TOP_RIGHT:
libtext->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
libtext->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
break;
case ETEXT::BOTTOM_CENTER:
libtext->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
break;
case ETEXT::BOTTOM_LEFT:
libtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
libtext->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
break;
case ETEXT::BOTTOM_RIGHT:
libtext->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
libtext->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
break;
}
libtext->SetItalic( false ); libtext->SetItalic( false );
return libtext.release(); return libtext.release();