Commit 31aee8ef authored by dickelbeck's avatar dickelbeck
Browse files

specctra export zone 'cutout' support

parent d73e1324
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -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:
+10 −2
Original line number Original line Diff line number Diff line
@@ -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" );
    }
    }
};
};
+39 −7
Original line number Original line Diff line number Diff line
@@ -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) );
            }
            }
        }
        }
    }
    }