diff --git a/include/gr_basic.h b/include/gr_basic.h index d994548e76..6c4da5ba74 100644 --- a/include/gr_basic.h +++ b/include/gr_basic.h @@ -88,6 +88,8 @@ typedef int wxPenStyle; extern GR_DRAWMODE g_XorMode; +extern EDA_COLOR_T g_DrawBgColor; + typedef enum { diff --git a/pcbnew/dialogs/dialog_SVG_print.cpp b/pcbnew/dialogs/dialog_SVG_print.cpp index d4425c7807..6ba70d8baa 100644 --- a/pcbnew/dialogs/dialog_SVG_print.cpp +++ b/pcbnew/dialogs/dialog_SVG_print.cpp @@ -320,18 +320,6 @@ void DIALOG_SVG_PRINT::ExportSVGFile( bool aOnlyOneFile ) ); } - wxFileName fn(boardFilename); - BuildPlotFileName( &fn, outputDir.GetPath(), suffix, SVGFileExtension ); - - if( m_PrintBoardEdgesCtrl->IsChecked() ) - m_printMaskLayer |= EDGE_LAYER; - - if( CreateSVGFile( fn.GetFullPath() ) ) - msg.Printf( _( "Plot: %s OK\n" ), GetChars( fn.GetFullPath() ) ); - else // Error - msg.Printf( _( "** Unable to create %s **\n" ), GetChars( fn.GetFullPath() ) ); - m_messagesBox->AppendText( msg ); - if( aOnlyOneFile ) break; } @@ -378,9 +366,9 @@ bool DIALOG_SVG_PRINT::CreateSVGFile( const wxString& aFullFileName ) } LOCALE_IO toggle; + SVG_PLOTTER* plotter = (SVG_PLOTTER*) StartPlotBoard( m_board, - &plot_opts, aFullFileName, - wxEmptyString ); + &plot_opts, UNDEFINED_LAYER, aFullFileName, wxEmptyString ); if( plotter ) { diff --git a/pcbnew/dialogs/dialog_plot.cpp b/pcbnew/dialogs/dialog_plot.cpp index c6c70a567a..4cffce5151 100644 --- a/pcbnew/dialogs/dialog_plot.cpp +++ b/pcbnew/dialogs/dialog_plot.cpp @@ -797,7 +797,7 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event ) LOCALE_IO toggle; BOARD* board = m_parent->GetBoard(); - PLOTTER* plotter = StartPlotBoard( board, &m_plotOpts, fn.GetFullPath(), wxEmptyString ); + PLOTTER* plotter = StartPlotBoard( board, &m_plotOpts, layer, fn.GetFullPath(), wxEmptyString ); // Print diags in messages box: wxString msg; diff --git a/pcbnew/exporters/export_gencad.cpp b/pcbnew/exporters/export_gencad.cpp index 4f54a9d587..5d166c5882 100644 --- a/pcbnew/exporters/export_gencad.cpp +++ b/pcbnew/exporters/export_gencad.cpp @@ -255,6 +255,9 @@ static double MapYTo( int aY ) /* Driver function: processing starts here */ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent ) { + +#if 0 // working on this 30-Jun-14, not ready yet, failed the initial testing. + wxFileName fn = GetBoard()->GetFileName(); FILE* file; @@ -344,6 +347,8 @@ void PCB_EDIT_FRAME::ExportToGenCAD( wxCommandEvent& aEvent ) module->SetFlag( 0 ); } } +#endif + } diff --git a/pcbnew/exporters/export_vrml.cpp b/pcbnew/exporters/export_vrml.cpp index 341166c7ad..4a6c71d24b 100644 --- a/pcbnew/exporters/export_vrml.cpp +++ b/pcbnew/exporters/export_vrml.cpp @@ -439,9 +439,9 @@ static void write_layers( MODEL_VRML& aModel, std::ofstream& output_file, BOARD* aModel.plated_holes.Tesselate( NULL, true ); write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_TIN ), &aModel.plated_holes, false, false, - aModel.GetLayerZ( LAST_COPPER_LAYER ) + aModel.GetLayerZ( F_Cu ) + Millimeter2iu( ART_OFFSET / 2.0 ) * aModel.scale, - aModel.GetLayerZ( FIRST_COPPER_LAYER ) + aModel.GetLayerZ( B_Cu ) - Millimeter2iu( ART_OFFSET / 2.0 ) * aModel.scale, aModel.precision ); diff --git a/pcbnew/import_dxf/dxf2brd_items.cpp b/pcbnew/import_dxf/dxf2brd_items.cpp index 67d3ba1a8c..6cd7e86fc4 100644 --- a/pcbnew/import_dxf/dxf2brd_items.cpp +++ b/pcbnew/import_dxf/dxf2brd_items.cpp @@ -145,6 +145,7 @@ void DXF2BRD_CONVERTER::addPolyline(const DRW_Polyline& data ) // Obviously, the z coordinate is ignored wxPoint startpoint; + for( unsigned ii = 0; ii < data.vertlist.size(); ii++ ) { DRW_Vertex* vertex = data.vertlist[ii]; @@ -157,7 +158,8 @@ void DXF2BRD_CONVERTER::addPolyline(const DRW_Polyline& data ) } DRAWSEGMENT* segm = new DRAWSEGMENT( m_brd ); - segm->SetLayer( m_brdLayer ); + + segm->SetLayer( ToLAYER_ID( m_brdLayer ) ); segm->SetStart( startpoint ); wxPoint endpoint( mapX( vertex->basePoint.x ), mapY( vertex->basePoint.y ) ); segm->SetEnd( endpoint ); @@ -176,6 +178,7 @@ void DXF2BRD_CONVERTER::addLWPolyline(const DRW_LWPolyline& data ) // (obviously contant and is the width of the DRW_LWPolyline. // the variable width of each vertex (when exists) is not used. wxPoint startpoint; + for( unsigned ii = 0; ii < data.vertlist.size(); ii++ ) { DRW_Vertex2D* vertex = data.vertlist[ii]; @@ -188,7 +191,8 @@ void DXF2BRD_CONVERTER::addLWPolyline(const DRW_LWPolyline& data ) } DRAWSEGMENT* segm = new DRAWSEGMENT( m_brd ); - segm->SetLayer( m_brdLayer ); + + segm->SetLayer( ToLAYER_ID( m_brdLayer ) ); segm->SetStart( startpoint ); wxPoint endpoint( mapX( vertex->x ), mapY( vertex->y ) ); segm->SetEnd( endpoint ); diff --git a/pcbnew/pcbplot.cpp b/pcbnew/pcbplot.cpp index 5c97c36ca2..830ffee636 100644 --- a/pcbnew/pcbplot.cpp +++ b/pcbnew/pcbplot.cpp @@ -90,87 +90,83 @@ wxString GetGerberFileFunction( const BOARD *aBoard, LAYER_NUM aLayer ) switch( aLayer ) { - case LAYER_N_BACK: - attrib = wxString::Format( wxT( "Copper,L%d" ), aBoard->GetCopperLayerCount() ); - break; - - case LAYER_N_2: - case LAYER_N_3: - case LAYER_N_4: - case LAYER_N_5: - case LAYER_N_6: - case LAYER_N_7: - case LAYER_N_8: - case LAYER_N_9: - case LAYER_N_10: - case LAYER_N_11: - case LAYER_N_12: - case LAYER_N_13: - case LAYER_N_14: - case LAYER_N_15: - // LAYER_N_2 is the first inner layer counting from the bottom; this - // must be converted to a 1-based number starting from the top - attrib = wxString::Format( wxT( "Copper,L%d" ), - aBoard->GetCopperLayerCount() - ( aLayer - LAYER_N_2 + 1 ) ); - break; - - case LAYER_N_FRONT: - attrib = wxString( wxT( "Copper,L1" ) ); - break; - - case ADHESIVE_N_FRONT: + case F_Adhes: attrib = wxString( wxT( "Glue,Top" ) ); break; - case ADHESIVE_N_BACK: + case B_Adhes: attrib = wxString( wxT( "Glue,Bot" ) ); break; - case SILKSCREEN_N_FRONT: + case F_SilkS: attrib = wxString( wxT( "Legend,Top" ) ); break; - case SILKSCREEN_N_BACK: + case B_SilkS: attrib = wxString( wxT( "Legend,Bot" ) ); break; - case SOLDERMASK_N_FRONT: + case F_Mask: attrib = wxString( wxT( "Soldermask,Top" ) ); break; - case SOLDERMASK_N_BACK: + case B_Mask: attrib = wxString( wxT( "Soldermask,Bot" ) ); break; - case SOLDERPASTE_N_FRONT: + case F_Paste: attrib = wxString( wxT( "Paste,Top" ) ); break; - case SOLDERPASTE_N_BACK: + case B_Paste: attrib = wxString( wxT( "Paste,Bot" ) ); break; - case EDGE_N: + case Edge_Cuts: attrib = wxString( wxT( "Profile" ) ); break; - case DRAW_N: + case Dwgs_User: attrib = wxString( wxT( "Drawing" ) ); break; - case COMMENT_N: + case Cmts_User: attrib = wxString( wxT( "Other,Comment" ) ); break; - case ECO1_N: - case ECO2_N: - attrib = wxString::Format( wxT( "Other,ECO%d" ), aLayer - ECO1_N + 1 ); + case Eco1_User: + case Eco2_User: + attrib = wxString::Format( wxT( "Other,ECO%d" ), aLayer - Eco1_User + 1 ); + break; + + case F_Cu: + attrib = wxString( wxT( "Copper,L1" ) ); + break; + + case B_Cu: + attrib = wxString::Format( wxT( "Copper,L%d" ), aBoard->GetCopperLayerCount() ); + break; + + default: + if( IsCopperLayer( aLayer ) ) + { +#if 0 // was: + // LAYER_N_2 is the first inner layer counting from the bottom; this + // must be converted to a 1-based number starting from the top + attrib = wxString::Format( wxT( "Copper,L%d" ), + aBoard->GetCopperLayerCount() - ( aLayer - LAYER_N_2 + 1 ) ); +#else + attrib = wxString::Format( wxT( "Copper,L%d" ), aLayer ); +#endif + } break; } // Add the signal type of the layer, if relevant - if( FIRST_COPPER_LAYER <= aLayer && aLayer <= LAST_COPPER_LAYER ) { - LAYER_T type = aBoard->GetLayerType( aLayer ); + if( IsCopperLayer( aLayer ) ) + { + LAYER_T type = aBoard->GetLayerType( ToLAYER_ID( aLayer ) ); + switch( type ) { case LT_SIGNAL: @@ -190,6 +186,7 @@ wxString GetGerberFileFunction( const BOARD *aBoard, LAYER_NUM aLayer ) return attrib; } + void BuildPlotFileName( wxFileName* aFilename, const wxString& aOutputDir, const wxString& aSuffix,