Eagle PCB import: Improve error messages for unsupported footprint elements. - Display lines and circles from copper layers on drawings layer - Generate error messages for rectangles and polygons.

This commit is contained in:
Russell Oliver 2017-10-11 23:24:14 +11:00 committed by Maciej Suminski
parent 82b1e3c790
commit b796b13a89
1 changed files with 120 additions and 98 deletions

View File

@ -1225,8 +1225,12 @@ void EAGLE_PLUGIN::packageWire( MODULE* aModule, wxXmlNode* aTree ) const
EWIRE w( aTree );
PCB_LAYER_ID layer = kicad_layer( w.layer );
if( IsNonCopperLayer( layer ) ) // only valid non-copper wires, skip copper package wires
if( IsCopperLayer( layer ) ) // skip copper "package.circle"s
{
wxLogMessage( wxString::Format( "Line on copper layer in package %s ( %f, %f ) ( %f, %f )\n Moving to drawings layer", aModule->GetFPID().GetLibItemName().c_str(), w.x1 , w.y1 , w.x2 , w.y2 ) );
layer = Dwgs_User;
}
wxPoint start( kicad_x( w.x1 ), kicad_y( w.y1 ) );
wxPoint end( kicad_x( w.x2 ), kicad_y( w.y2 ) );
int width = kicad( w.width );
@ -1254,8 +1258,9 @@ void EAGLE_PLUGIN::packageWire( MODULE* aModule, wxXmlNode* aTree ) const
dwg->SetLayer( layer );
dwg->SetWidth( width );
dwg->SetDrawCoord();
aModule->GraphicalItemsList().PushBack( dwg );
}
}
@ -1352,6 +1357,12 @@ void EAGLE_PLUGIN::packageText( MODULE* aModule, wxXmlNode* aTree ) const
ETEXT t( aTree );
PCB_LAYER_ID layer = kicad_layer( t.layer );
if( IsCopperLayer( layer ) ) // skip copper "package.circle"s
{
wxLogMessage( wxString::Format( "Unsupported text on copper layer in package %s \n Moving to drawings layer.", aModule->GetFPID().GetLibItemName().c_str() ) );
layer = Dwgs_User;
}
if( layer == UNDEFINED_LAYER )
{
layer = Cmts_User;
@ -1458,8 +1469,17 @@ void EAGLE_PLUGIN::packageRectangle( MODULE* aModule, wxXmlNode* aTree ) const
ERECT r( aTree );
PCB_LAYER_ID layer = kicad_layer( r.layer );
if( IsNonCopperLayer( layer ) ) // skip copper "package.rectangle"s
// Rectangles are not supported yet in footprints as they are not editable.
wxLogMessage( wxString::Format( "Unsupported rectangle in package %s ( %f, %f ) ( %f, %f )", aModule->GetFPID().GetLibItemName().c_str(), r.x1 , r.y1 , r.x2 , r.y2 ) );
return;
if( IsCopperLayer( layer ) ) // skip copper "package.circle"s
{
wxLogMessage( wxString::Format( "Unsupported rectangle on copper layer in package %s \n Moving to drawings layer.", aModule->GetFPID().GetLibItemName().c_str() ) );
layer = Dwgs_User;
}
EDGE_MODULE* dwg = new EDGE_MODULE( aModule, S_POLYGON );
aModule->GraphicalItemsList().PushBack( dwg );
@ -1482,7 +1502,7 @@ void EAGLE_PLUGIN::packageRectangle( MODULE* aModule, wxXmlNode* aTree ) const
dwg->SetStart0( start );
dwg->SetEnd0( end );
}
}
@ -1491,26 +1511,17 @@ void EAGLE_PLUGIN::packagePolygon( MODULE* aModule, wxXmlNode* aTree ) const
EPOLYGON p( aTree );
PCB_LAYER_ID layer = kicad_layer( p.layer );
if( IsNonCopperLayer( layer ) ) // skip copper "package.rectangle"s
if( IsCopperLayer( layer ) ) // skip copper "package.circle"s
{
wxLogMessage( wxString::Format( "Unsupported polygon on copper layer in package %s \n Moving to drawings layer.", aModule->GetFPID().GetLibItemName().c_str() ) );
layer = Dwgs_User;
}
EDGE_MODULE* dwg = new EDGE_MODULE( aModule, S_POLYGON );
aModule->GraphicalItemsList().PushBack( dwg );
dwg->SetWidth( 0 ); // it's filled, no need for boundary width
/*
switch( layer )
{
case Eco1_User: layer = F_SilkS; break;
case Eco2_User: layer = B_SilkS; break;
// all MODULE templates (created from eagle packages) are on front layer
// until cloned.
case Cmts_User: layer = F_SilkS; break;
}
*/
dwg->SetLayer( layer );
dwg->SetTimeStamp( EagleTimeStamp( aTree ) );
@ -1538,7 +1549,8 @@ void EAGLE_PLUGIN::packagePolygon( MODULE* aModule, wxXmlNode* aTree ) const
dwg->SetStart0( *pts.begin() );
dwg->SetEnd0( pts.back() );
}
dwg->SetDrawCoord();
}
@ -1546,6 +1558,13 @@ void EAGLE_PLUGIN::packageCircle( MODULE* aModule, wxXmlNode* aTree ) const
{
ECIRCLE e( aTree );
PCB_LAYER_ID layer = kicad_layer( e.layer );
if( IsCopperLayer( layer ) ) // skip copper "package.circle"s
{
wxLogMessage( wxString::Format( "Unsupported circle on copper layer in package %s \n Moving to drawings layer.", aModule->GetFPID().GetLibItemName().c_str() ) );
layer = Dwgs_User;
}
EDGE_MODULE* gr = new EDGE_MODULE( aModule, S_CIRCLE );
aModule->GraphicalItemsList().PushBack( gr );
@ -1568,6 +1587,9 @@ void EAGLE_PLUGIN::packageCircle( MODULE* aModule, wxXmlNode* aTree ) const
gr->SetStart0( wxPoint( kicad_x( e.x ), kicad_y( e.y ) ) );
gr->SetEnd0( wxPoint( kicad_x( e.x + e.radius ), kicad_y( e.y ) ) );
gr->SetDrawCoord();
}