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;
|
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 )
|
EWIRE::EWIRE( wxXmlNode* aWire )
|
||||||
{
|
{
|
||||||
|
@ -395,6 +421,12 @@ EATTR::EATTR( wxXmlNode* aTree )
|
||||||
display = EATTR::NAME;
|
display = EATTR::NAME;
|
||||||
else if( stemp == "both" )
|
else if( stemp == "both" )
|
||||||
display = EATTR::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" );
|
opt_string stemp = parseOptionalAttribute<string>( aText, "align" );
|
||||||
|
|
||||||
// (bottom-left | bottom-center | bottom-right | center-left |
|
align = parseAlignment(*stemp);
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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()
|
SCH_EAGLE_PLUGIN::SCH_EAGLE_PLUGIN()
|
||||||
{
|
{
|
||||||
m_rootSheet = nullptr;
|
m_rootSheet = nullptr;
|
||||||
|
@ -668,10 +721,12 @@ void SCH_EAGLE_PLUGIN::loadSegments( wxXmlNode* aSegmentsNode, const wxString& n
|
||||||
|
|
||||||
if(labelled == false && wire != NULL )
|
if(labelled == false && wire != NULL )
|
||||||
{
|
{
|
||||||
|
wxString netname = netName;
|
||||||
|
netname.Replace("!", "~");
|
||||||
if(m_NetCounts[netName.ToStdString()]>1){
|
if(m_NetCounts[netName.ToStdString()]>1){
|
||||||
std::unique_ptr<SCH_GLOBALLABEL> glabel( new SCH_GLOBALLABEL );
|
std::unique_ptr<SCH_GLOBALLABEL> glabel( new SCH_GLOBALLABEL );
|
||||||
glabel->SetPosition( wire->GetStartPoint() );
|
glabel->SetPosition( wire->GetStartPoint() );
|
||||||
glabel->SetText( netName);
|
glabel->SetText( netname);
|
||||||
glabel->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
glabel->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
||||||
screen->Append( glabel.release() );
|
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 );
|
std::unique_ptr<SCH_LABEL> label( new SCH_LABEL );
|
||||||
label->SetPosition( wire->GetStartPoint() );
|
label->SetPosition( wire->GetStartPoint() );
|
||||||
label->SetText( netName );
|
label->SetText( netname );
|
||||||
label->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
label->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
||||||
screen->Append( label.release() );
|
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 );
|
wxPoint elabelpos( elabel.x * EUNIT_TO_MIL, -elabel.y * EUNIT_TO_MIL );
|
||||||
|
|
||||||
|
wxString netname = elabel.netname;
|
||||||
|
netname.Replace("!", "~");
|
||||||
|
|
||||||
if(m_NetCounts[aNetName.ToStdString()]>1){
|
if(m_NetCounts[aNetName.ToStdString()]>1){
|
||||||
std::unique_ptr<SCH_GLOBALLABEL> glabel( new SCH_GLOBALLABEL );
|
std::unique_ptr<SCH_GLOBALLABEL> glabel( new SCH_GLOBALLABEL );
|
||||||
glabel->SetPosition( elabelpos );
|
glabel->SetPosition( elabelpos );
|
||||||
glabel->SetText( elabel.netname );
|
glabel->SetText( netname );
|
||||||
glabel->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
glabel->SetTextSize( wxSize( elabel.size*EUNIT_TO_MIL, elabel.size*EUNIT_TO_MIL ) );
|
||||||
|
|
||||||
glabel->SetLabelSpinStyle(0);
|
glabel->SetLabelSpinStyle(0);
|
||||||
if( elabel.rot )
|
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 );
|
std::unique_ptr<SCH_LABEL> label( new SCH_LABEL );
|
||||||
label->SetPosition(elabelpos);
|
label->SetPosition(elabelpos);
|
||||||
label->SetText( elabel.netname );
|
label->SetText( netname );
|
||||||
label->SetTextSize( wxSize( GetDefaultTextSize(), GetDefaultTextSize() ) );
|
label->SetTextSize( wxSize( elabel.size*EUNIT_TO_MIL, elabel.size*EUNIT_TO_MIL ) );
|
||||||
|
|
||||||
label->SetLabelSpinStyle(0);
|
label->SetLabelSpinStyle(0);
|
||||||
if( elabel.rot )
|
if( elabel.rot )
|
||||||
|
@ -825,8 +883,6 @@ SCH_TEXT* SCH_EAGLE_PLUGIN::loadLabel( wxXmlNode* aLabelNode, const wxString& aN
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return label.release();
|
return label.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -942,6 +998,33 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
|
||||||
}
|
}
|
||||||
|
|
||||||
component->GetField( REFERENCE )->SetVisible( true );
|
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();
|
component->ClearFlags();
|
||||||
|
|
||||||
screen->Append( component.release() );
|
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->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),
|
libtext->SetTextSize( wxSize( int(etext.size * EUNIT_TO_MIL*0.95),
|
||||||
int(etext.size * EUNIT_TO_MIL) ) );
|
int(etext.size * EUNIT_TO_MIL*0.95) ) );
|
||||||
|
|
||||||
if( etext.ratio )
|
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;
|
int align = etext.align ? *etext.align : ETEXT::BOTTOM_LEFT;
|
||||||
|
|
||||||
switch( align )
|
eagleToKicadAlignment((EDA_TEXT*)libtext.get(), 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 );
|
|
||||||
|
|
||||||
return libtext.release();
|
return libtext.release();
|
||||||
}
|
}
|
||||||
|
@ -1420,48 +1461,7 @@ 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;
|
||||||
|
|
||||||
switch( align )
|
eagleToKicadAlignment((EDA_TEXT*)schtext.get(), 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return schtext.release();
|
return schtext.release();
|
||||||
|
@ -1482,6 +1482,7 @@ bool SCH_EAGLE_PLUGIN::CheckHeader( const wxString& aFileName )
|
||||||
return firstline.StartsWith( "<?xml" );
|
return firstline.StartsWith( "<?xml" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_EAGLE_PLUGIN::addBusEntries()
|
void SCH_EAGLE_PLUGIN::addBusEntries()
|
||||||
{
|
{
|
||||||
// Add bus entry symbols
|
// Add bus entry symbols
|
||||||
|
|
|
@ -545,6 +545,7 @@ struct EATTR
|
||||||
BOTH,
|
BOTH,
|
||||||
};
|
};
|
||||||
opt_int display;
|
opt_int display;
|
||||||
|
opt_int align;
|
||||||
|
|
||||||
EATTR( wxXmlNode* aTree );
|
EATTR( wxXmlNode* aTree );
|
||||||
EATTR() {}
|
EATTR() {}
|
||||||
|
|
Loading…
Reference in New Issue