specctra export zone 'cutout' support
This commit is contained in:
parent
d73e132455
commit
31aee8ef3e
|
@ -5,6 +5,11 @@ Started 2007-June-11
|
||||||
Please add newer entries at the top, list the date and your name with
|
Please add newer entries at the top, list the date and your name with
|
||||||
email address.
|
email address.
|
||||||
|
|
||||||
|
2009-Feb-06 UPDATE Dick Hollenbeck <dick@softplc.com>
|
||||||
|
================================================================================
|
||||||
|
++pcbnew
|
||||||
|
added "cutout" from a ZONE_CONTAINER capability to the SPECCTRA export.
|
||||||
|
|
||||||
|
|
||||||
2009-Feb-6 Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
|
2009-Feb-6 Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
|
||||||
================================================================================
|
================================================================================
|
||||||
|
@ -37,6 +42,7 @@ email address.
|
||||||
automatically scrolling the drawing.
|
automatically scrolling the drawing.
|
||||||
|
|
||||||
|
|
||||||
|
>>>>>>> .r1562
|
||||||
2009-Feb-4 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
|
2009-Feb-4 UPDATE Vesa Solonen <vesa.solonen@hut.fi>
|
||||||
================================================================================
|
================================================================================
|
||||||
++pcbnew:
|
++pcbnew:
|
||||||
|
|
|
@ -1005,6 +1005,12 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddWindow( WINDOW* aWindow )
|
||||||
|
{
|
||||||
|
aWindow->SetParent( this );
|
||||||
|
windows.push_back( aWindow );
|
||||||
|
}
|
||||||
|
|
||||||
void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IOError )
|
void Format( OUTPUTFORMATTER* out, int nestLevel ) throw( IOError )
|
||||||
{
|
{
|
||||||
const char* newline = "\n";
|
const char* newline = "\n";
|
||||||
|
@ -1047,8 +1053,10 @@ public:
|
||||||
|
|
||||||
for( WINDOWS::iterator i=windows.begin(); i!=windows.end(); ++i )
|
for( WINDOWS::iterator i=windows.begin(); i!=windows.end(); ++i )
|
||||||
i->Format( out, nestLevel+1 );
|
i->Format( out, nestLevel+1 );
|
||||||
}
|
|
||||||
|
|
||||||
|
out->Print( nestLevel, ")\n" );
|
||||||
|
}
|
||||||
|
else
|
||||||
out->Print( 0, ")\n" );
|
out->Print( 0, ")\n" );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1036,19 +1036,51 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IOError )
|
||||||
COPPER_PLANE* plane = new COPPER_PLANE( pcb->structure );
|
COPPER_PLANE* plane = new COPPER_PLANE( pcb->structure );
|
||||||
pcb->structure->planes.push_back( plane );
|
pcb->structure->planes.push_back( plane );
|
||||||
|
|
||||||
PATH* polygon = new PATH( plane, T_polygon );
|
PATH* mainPolygon = new PATH( plane, T_polygon );
|
||||||
plane->SetShape( polygon );
|
plane->SetShape( mainPolygon );
|
||||||
|
|
||||||
plane->name = CONV_TO_UTF8( item->m_Netname );
|
plane->name = CONV_TO_UTF8( item->m_Netname );
|
||||||
|
|
||||||
polygon->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ];
|
mainPolygon->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ];
|
||||||
|
|
||||||
int count = item->m_Poly->corner.size();
|
int count = item->m_Poly->corner.size();
|
||||||
for( int j=0; j<count; ++j )
|
int ndx = 0; // used in 2 for() loops below
|
||||||
|
for( ; ndx<count; ++ndx )
|
||||||
{
|
{
|
||||||
wxPoint point( item->m_Poly->corner[j].x,
|
wxPoint point( item->m_Poly->corner[ndx].x,
|
||||||
item->m_Poly->corner[j].y );
|
item->m_Poly->corner[ndx].y );
|
||||||
polygon->AppendPoint( mapPt(point) );
|
mainPolygon->AppendPoint( mapPt(point) );
|
||||||
|
|
||||||
|
// this was the end of the main polygon
|
||||||
|
if( item->m_Poly->corner[ndx].end_contour )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
WINDOW* window = 0;
|
||||||
|
PATH* cutout = 0;
|
||||||
|
|
||||||
|
// handle the cutouts
|
||||||
|
// http://www.freerouting.net/fen/viewtopic.php?f=6&t=19
|
||||||
|
for( ++ndx; ndx<count; ++ndx )
|
||||||
|
{
|
||||||
|
if( item->m_Poly->corner[ndx-1].end_contour )
|
||||||
|
{
|
||||||
|
window = new WINDOW( plane );
|
||||||
|
plane->AddWindow( window );
|
||||||
|
|
||||||
|
cutout = new PATH( window, T_path );
|
||||||
|
// cutout = new PATH( window, T_polygon );
|
||||||
|
window->SetShape( cutout );
|
||||||
|
|
||||||
|
cutout->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ];
|
||||||
|
}
|
||||||
|
|
||||||
|
wxASSERT( window );
|
||||||
|
wxASSERT( cutout );
|
||||||
|
|
||||||
|
wxPoint point(item->m_Poly->corner[ndx].x,
|
||||||
|
item->m_Poly->corner[ndx].y );
|
||||||
|
cutout->AppendPoint( mapPt(point) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue