Eeschema Eagle Import: Parse instance attributes for value and refererence positions and alignment.
This commit is contained in:
parent
ef880f57a2
commit
bb754b33d0
|
@ -192,6 +192,32 @@ wxPoint kicad_arc_center( const wxPoint& aStart, const wxPoint& aEnd, double aAn
|
|||
return center;
|
||||
}
|
||||
|
||||
int parseAlignment(wxString alignment)
|
||||
{
|
||||
// (bottom-left | bottom-center | bottom-right | center-left |
|
||||
// center | center-right | top-left | top-center | top-right)
|
||||
if( alignment == "center" )
|
||||
return ETEXT::CENTER;
|
||||
else if( alignment == "center-right" )
|
||||
return ETEXT::CENTER_RIGHT;
|
||||
else if( alignment == "top-left" )
|
||||
return ETEXT::TOP_LEFT;
|
||||
else if( alignment == "top-center" )
|
||||
return ETEXT::TOP_CENTER;
|
||||
else if( alignment == "top-right" )
|
||||
return ETEXT::TOP_RIGHT;
|
||||
else if( alignment == "bottom-left" )
|
||||
return ETEXT::BOTTOM_LEFT;
|
||||
else if( alignment == "bottom-center" )
|
||||
return ETEXT::BOTTOM_CENTER;
|
||||
else if( alignment == "bottom-right" )
|
||||
return ETEXT::BOTTOM_RIGHT;
|
||||
else if( alignment == "center-left" )
|
||||
return ETEXT::CENTER_LEFT;
|
||||
|
||||
return ETEXT::BOTTOM_LEFT;
|
||||
}
|
||||
|
||||
|
||||
EWIRE::EWIRE( wxXmlNode* aWire )
|
||||
{
|
||||
|
@ -395,6 +421,12 @@ EATTR::EATTR( wxXmlNode* aTree )
|
|||
display = EATTR::NAME;
|
||||
else if( stemp == "both" )
|
||||
display = EATTR::BOTH;
|
||||
|
||||
stemp = parseOptionalAttribute<string>( aTree, "align" );
|
||||
|
||||
align = parseAlignment(*stemp);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -459,26 +491,8 @@ ETEXT::ETEXT( wxXmlNode* aText )
|
|||
|
||||
opt_string stemp = parseOptionalAttribute<string>( aText, "align" );
|
||||
|
||||
// (bottom-left | bottom-center | bottom-right | center-left |
|
||||
// center | center-right | top-left | top-center | top-right)
|
||||
if( stemp == "center" )
|
||||
align = ETEXT::CENTER;
|
||||
else if( stemp == "center-right" )
|
||||
align = ETEXT::CENTER_RIGHT;
|
||||
else if( stemp == "top-left" )
|
||||
align = ETEXT::TOP_LEFT;
|
||||
else if( stemp == "top-center" )
|
||||
align = ETEXT::TOP_CENTER;
|
||||
else if( stemp == "top-right" )
|
||||
align = ETEXT::TOP_RIGHT;
|
||||
else if( stemp == "bottom-left" )
|
||||
align = ETEXT::BOTTOM_LEFT;
|
||||
else if( stemp == "bottom-center" )
|
||||
align = ETEXT::BOTTOM_CENTER;
|
||||
else if( stemp == "bottom-right" )
|
||||
align = ETEXT::BOTTOM_RIGHT;
|
||||
else if( stemp == "center-left" )
|
||||
align = ETEXT::CENTER_LEFT;
|
||||
align = parseAlignment(*stemp);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -744,7 +758,7 @@ EPART::EPART( wxXmlNode* aPart )
|
|||
device = parseRequiredAttribute<string>( aPart, "device" );
|
||||
technology = parseOptionalAttribute<string>( aPart, "technology" );
|
||||
value = parseOptionalAttribute<string>( aPart, "value" );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -184,6 +184,59 @@ static COMPONENT_ORIENTATION_T kicadComponentRotation( float eagleDegrees )
|
|||
}
|
||||
|
||||
|
||||
|
||||
void eagleToKicadAlignment(EDA_TEXT* aText, int aEagleAlignment)
|
||||
{
|
||||
|
||||
switch( aEagleAlignment )
|
||||
{
|
||||
case ETEXT::CENTER:
|
||||
// this was the default in eda_text's constructor
|
||||
break;
|
||||
|
||||
case ETEXT::CENTER_LEFT:
|
||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
||||
break;
|
||||
|
||||
case ETEXT::CENTER_RIGHT:
|
||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
||||
break;
|
||||
|
||||
case ETEXT::TOP_CENTER:
|
||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
||||
break;
|
||||
|
||||
case ETEXT::TOP_LEFT:
|
||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
||||
break;
|
||||
|
||||
case ETEXT::TOP_RIGHT:
|
||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
||||
break;
|
||||
|
||||
case ETEXT::BOTTOM_CENTER:
|
||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||
break;
|
||||
|
||||
case ETEXT::BOTTOM_LEFT:
|
||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||
break;
|
||||
|
||||
case ETEXT::BOTTOM_RIGHT:
|
||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||
break;
|
||||
|
||||
default:
|
||||
aText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
||||
aText->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SCH_EAGLE_PLUGIN::SCH_EAGLE_PLUGIN()
|
||||
{
|
||||
m_rootSheet = nullptr;
|
||||
|
@ -668,10 +721,12 @@ void SCH_EAGLE_PLUGIN::loadSegments( wxXmlNode* aSegmentsNode, const wxString& n
|
|||
|
||||
if(labelled == false && wire != NULL )
|
||||
{
|
||||
wxString netname = netName;
|
||||
netname.Replace("!", "~");
|
||||
if(m_NetCounts[netName.ToStdString()]>1){
|
||||
std::unique_ptr<SCH_GLOBALLABEL> glabel( new SCH_GLOBALLABEL );
|
||||
glabel->SetPosition( wire->GetStartPoint() );
|
||||
glabel->SetText( netName);
|
||||
glabel->SetText( netname);
|
||||
glabel->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
||||
screen->Append( glabel.release() );
|
||||
}
|
||||
|
@ -679,7 +734,7 @@ void SCH_EAGLE_PLUGIN::loadSegments( wxXmlNode* aSegmentsNode, const wxString& n
|
|||
{
|
||||
std::unique_ptr<SCH_LABEL> label( new SCH_LABEL );
|
||||
label->SetPosition( wire->GetStartPoint() );
|
||||
label->SetText( netName );
|
||||
label->SetText( netname );
|
||||
label->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
||||
screen->Append( label.release() );
|
||||
}
|
||||
|
@ -742,11 +797,14 @@ SCH_TEXT* SCH_EAGLE_PLUGIN::loadLabel( wxXmlNode* aLabelNode, const wxString& aN
|
|||
|
||||
wxPoint elabelpos( elabel.x * EUNIT_TO_MIL, -elabel.y * EUNIT_TO_MIL );
|
||||
|
||||
wxString netname = elabel.netname;
|
||||
netname.Replace("!", "~");
|
||||
|
||||
if(m_NetCounts[aNetName.ToStdString()]>1){
|
||||
std::unique_ptr<SCH_GLOBALLABEL> glabel( new SCH_GLOBALLABEL );
|
||||
glabel->SetPosition( elabelpos );
|
||||
glabel->SetText( elabel.netname );
|
||||
glabel->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
||||
glabel->SetText( netname );
|
||||
glabel->SetTextSize( wxSize( elabel.size*EUNIT_TO_MIL, elabel.size*EUNIT_TO_MIL ) );
|
||||
|
||||
glabel->SetLabelSpinStyle(0);
|
||||
if( elabel.rot )
|
||||
|
@ -787,8 +845,8 @@ SCH_TEXT* SCH_EAGLE_PLUGIN::loadLabel( wxXmlNode* aLabelNode, const wxString& aN
|
|||
{
|
||||
std::unique_ptr<SCH_LABEL> label( new SCH_LABEL );
|
||||
label->SetPosition(elabelpos);
|
||||
label->SetText( elabel.netname );
|
||||
label->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
||||
label->SetText( netname );
|
||||
label->SetTextSize( wxSize( elabel.size*EUNIT_TO_MIL, elabel.size*EUNIT_TO_MIL ) );
|
||||
|
||||
label->SetLabelSpinStyle(0);
|
||||
if( elabel.rot )
|
||||
|
@ -825,8 +883,6 @@ SCH_TEXT* SCH_EAGLE_PLUGIN::loadLabel( wxXmlNode* aLabelNode, const wxString& aN
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return label.release();
|
||||
}
|
||||
|
||||
|
@ -942,6 +998,33 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
|
|||
}
|
||||
|
||||
component->GetField( REFERENCE )->SetVisible( true );
|
||||
|
||||
wxXmlNode* attributeNode = aInstanceNode->GetChildren();
|
||||
while(attributeNode)
|
||||
{
|
||||
if(attributeNode->GetName() == "attribute")
|
||||
{
|
||||
auto attr = EATTR(attributeNode);
|
||||
|
||||
SCH_FIELD* field;
|
||||
if(attr.name == "NAME"){
|
||||
field = component->GetField( REFERENCE );
|
||||
field->SetPosition( wxPoint(*attr.x* EUNIT_TO_MIL, *attr.y*-EUNIT_TO_MIL) );
|
||||
int align = attr.align ? *attr.align : ETEXT::BOTTOM_LEFT;
|
||||
eagleToKicadAlignment((EDA_TEXT*)field, align);
|
||||
}
|
||||
|
||||
else if (attr.name == "VALUE"){
|
||||
field = component->GetField( VALUE );
|
||||
field->SetPosition( wxPoint(*attr.x* EUNIT_TO_MIL, *attr.y*-EUNIT_TO_MIL) );
|
||||
int align = attr.align ? *attr.align : ETEXT::BOTTOM_LEFT;
|
||||
eagleToKicadAlignment((EDA_TEXT*)field, align);
|
||||
}
|
||||
}
|
||||
attributeNode = attributeNode->GetNext();
|
||||
|
||||
}
|
||||
|
||||
component->ClearFlags();
|
||||
|
||||
screen->Append( component.release() );
|
||||
|
@ -1332,8 +1415,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->SetText( aLibText->GetNodeContent() );
|
||||
libtext->SetTextSize( wxSize( int(etext.size * EUNIT_TO_MIL),
|
||||
int(etext.size * EUNIT_TO_MIL) ) );
|
||||
libtext->SetTextSize( wxSize( int(etext.size * EUNIT_TO_MIL*0.95),
|
||||
int(etext.size * EUNIT_TO_MIL*0.95) ) );
|
||||
|
||||
if( etext.ratio )
|
||||
{
|
||||
|
@ -1346,50 +1429,8 @@ 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;
|
||||
eagleToKicadAlignment((EDA_TEXT*)libtext.get(), align);
|
||||
|
||||
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 );
|
||||
|
||||
return libtext.release();
|
||||
}
|
||||
|
@ -1420,48 +1461,7 @@ SCH_TEXT* SCH_EAGLE_PLUGIN::loadplaintext( wxXmlNode* aSchText )
|
|||
|
||||
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:
|
||||
schtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
||||
break;
|
||||
|
||||
case ETEXT::CENTER_RIGHT:
|
||||
schtext->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
||||
break;
|
||||
|
||||
case ETEXT::TOP_CENTER:
|
||||
schtext->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
||||
break;
|
||||
|
||||
case ETEXT::TOP_LEFT:
|
||||
schtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
||||
schtext->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
||||
break;
|
||||
|
||||
case ETEXT::TOP_RIGHT:
|
||||
schtext->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
||||
schtext->SetVertJustify( GR_TEXT_VJUSTIFY_TOP );
|
||||
break;
|
||||
|
||||
case ETEXT::BOTTOM_CENTER:
|
||||
schtext->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||
break;
|
||||
|
||||
case ETEXT::BOTTOM_LEFT:
|
||||
schtext->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
|
||||
schtext->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||
break;
|
||||
|
||||
case ETEXT::BOTTOM_RIGHT:
|
||||
schtext->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
|
||||
schtext->SetVertJustify( GR_TEXT_VJUSTIFY_BOTTOM );
|
||||
break;
|
||||
}
|
||||
eagleToKicadAlignment((EDA_TEXT*)schtext.get(), align);
|
||||
|
||||
|
||||
return schtext.release();
|
||||
|
@ -1482,6 +1482,7 @@ bool SCH_EAGLE_PLUGIN::CheckHeader( const wxString& aFileName )
|
|||
return firstline.StartsWith( "<?xml" );
|
||||
}
|
||||
|
||||
|
||||
void SCH_EAGLE_PLUGIN::addBusEntries()
|
||||
{
|
||||
// Add bus entry symbols
|
||||
|
|
|
@ -545,6 +545,7 @@ struct EATTR
|
|||
BOTH,
|
||||
};
|
||||
opt_int display;
|
||||
opt_int align;
|
||||
|
||||
EATTR( wxXmlNode* aTree );
|
||||
EATTR() {}
|
||||
|
|
Loading…
Reference in New Issue