Loading pcbnew/pcbplot.h +9 −1 Original line number Diff line number Diff line Loading @@ -90,7 +90,15 @@ public: void PlotDrawSegment( DRAWSEGMENT* PtSegm ); /** * lot items like text and graphics, * Plot a pad. * unlike other items, a pad had not a specific color, * and be drawn as a non filled item although the plot mode is filled * color and plot mode are needed by this function */ void PlotPad( D_PAD* aPad, EDA_COLOR_T aColor, EDA_DRAW_MODE_T aPlotMode ); /** * plot items like text and graphics, * but not tracks and modules */ void PlotBoardGraphicItems(); Loading pcbnew/plot_board_layers.cpp +35 −90 Original line number Diff line number Diff line Loading @@ -85,8 +85,6 @@ void PlotSilkScreen( BOARD *aBoard, PLOTTER* aPlotter, long aLayerMask, if( (masklayer & layersmask_plotpads) == 0 ) continue; wxPoint shape_pos = pad->ReturnShapePos(); EDA_COLOR_T color = ColorFromInt(0); if( (layersmask_plotpads & SILKSCREEN_LAYER_BACK) ) color = aBoard->GetLayerColor( SILKSCREEN_N_BACK ); Loading @@ -94,36 +92,7 @@ void PlotSilkScreen( BOARD *aBoard, PLOTTER* aPlotter, long aLayerMask, if((layersmask_plotpads & SILKSCREEN_LAYER_FRONT ) ) color = ColorFromInt( color | aBoard->GetLayerColor( SILKSCREEN_N_FRONT ) ); // Set plot color (change WHITE to LIGHTGRAY because // the white items are not seen on a white paper or screen aPlotter->SetColor( color != WHITE ? color : LIGHTGRAY); switch( pad->GetShape() ) { case PAD_CIRCLE: aPlotter->FlashPadCircle( shape_pos, pad->GetSize().x, LINE ); break; case PAD_OVAL: aPlotter->FlashPadOval( shape_pos, pad->GetSize(), pad->GetOrientation(), LINE ); break; case PAD_TRAPEZOID: { wxPoint coord[4]; pad->BuildPadPolygon( coord, wxSize(0,0), 0 ); aPlotter->FlashPadTrapez( shape_pos, coord, pad->GetOrientation(), LINE ); } break; case PAD_RECT: default: aPlotter->FlashPadRect( shape_pos, pad->GetSize(), pad->GetOrientation(), LINE ); break; } itemplotter.PlotPad( pad, color, LINE ); } } } Loading Loading @@ -302,15 +271,11 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter, if( (pad->GetLayerMask() & aLayerMask) == 0 ) continue; wxPoint shape_pos = pad->ReturnShapePos(); wxSize margin; double width_adj = 0; if( aLayerMask & ALL_CU_LAYERS ) { width_adj = itemplotter.getFineWidthAdj(); } switch( aLayerMask & ( SOLDERMASK_LAYER_BACK | SOLDERMASK_LAYER_FRONT | Loading @@ -330,12 +295,12 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter, break; } wxSize size; size.x = pad->GetSize().x + ( 2 * margin.x ) + width_adj; size.y = pad->GetSize().y + ( 2 * margin.y ) + width_adj; wxSize padPlotsSize; padPlotsSize.x = pad->GetSize().x + ( 2 * margin.x ) + width_adj; padPlotsSize.y = pad->GetSize().y + ( 2 * margin.y ) + width_adj; // Don't draw a null size item : if( size.x <= 0 || size.y <= 0 ) if( padPlotsSize.x <= 0 || padPlotsSize.y <= 0 ) continue; EDA_COLOR_T color = BLACK; Loading @@ -346,43 +311,27 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter, if((pad->GetLayerMask() & LAYER_FRONT ) ) color = ColorFromInt( color | aBoard->GetVisibleElementColor( PAD_FR_VISIBLE ) ); // Set plot color (change WHITE to LIGHTGRAY because // the white items are not seen on a white paper or screen aPlotter->SetColor( color != WHITE ? color : LIGHTGRAY); // Temporary set the pad size to the required plot size: wxSize tmppadsize = pad->GetSize(); pad->SetSize( padPlotsSize ); switch( pad->GetShape() ) { case PAD_CIRCLE: if( aPlotOpt.GetSkipPlotNPTH_Pads() && (pad->GetSize() == pad->GetDrillSize()) && (pad->GetAttribute() == PAD_HOLE_NOT_PLATED) ) break; aPlotter->FlashPadCircle( shape_pos, size.x, plotMode ); break; case PAD_OVAL: if( aPlotOpt.GetSkipPlotNPTH_Pads() && (pad->GetSize() == pad->GetDrillSize()) && (pad->GetAttribute() == PAD_HOLE_NOT_PLATED) ) break; aPlotter->FlashPadOval( shape_pos, size, pad->GetOrientation(), plotMode ); break; // Fall through: case PAD_TRAPEZOID: { wxPoint coord[4]; pad->BuildPadPolygon( coord, margin, 0 ); aPlotter->FlashPadTrapez( shape_pos, coord, pad->GetOrientation(), plotMode ); } break; case PAD_RECT: default: aPlotter->FlashPadRect( shape_pos, size, pad->GetOrientation(), plotMode ); itemplotter.PlotPad( pad, color, plotMode ); break; } pad->SetSize( tmppadsize ); // Restore the pad size } } Loading Loading @@ -663,8 +612,6 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, wxASSERT( false ); } if( the_plotter ) { the_plotter->SetFilename( aFullFileName ); // Compute the viewport and set the other options Loading @@ -691,10 +638,8 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, return the_plotter; } } // error in start_plot( ) or before wxMessageBox( _("Error creating plot file") ); delete the_plotter; // error in start_plot( ) delete the_plotter; // will close also output_file return NULL; } pcbnew/plot_brditems_plotter.cpp +52 −3 Original line number Diff line number Diff line Loading @@ -68,6 +68,55 @@ EDA_COLOR_T BRDITEMS_PLOTTER::getColor( int aLayer ) return color; } /* * Plot a pad. * unlike other items, a pad had not a specific color, * and be drawn as a non filled item although the plot mode is filled * color and plot mode are needed by this function */ void BRDITEMS_PLOTTER::PlotPad( D_PAD* aPad, EDA_COLOR_T aColor, EDA_DRAW_MODE_T aPlotMode ) { wxPoint shape_pos = aPad->ReturnShapePos(); // Set plot color (change WHITE to LIGHTGRAY because // the white items are not seen on a white paper or screen m_plotter->SetColor( aColor != WHITE ? aColor : LIGHTGRAY); switch( aPad->GetShape() ) { case PAD_CIRCLE: m_plotter->FlashPadCircle( shape_pos, aPad->GetSize().x, aPlotMode ); break; case PAD_OVAL: m_plotter->FlashPadOval( shape_pos, aPad->GetSize(), aPad->GetOrientation(), aPlotMode ); break; case PAD_TRAPEZOID: { wxPoint coord[4]; aPad->BuildPadPolygon( coord, wxSize(0,0), 0 ); m_plotter->FlashPadTrapez( shape_pos, coord, aPad->GetOrientation(), aPlotMode ); } break; case PAD_RECT: default: m_plotter->FlashPadRect( shape_pos, aPad->GetSize(), aPad->GetOrientation(), aPlotMode ); break; } } /* * Plot field of a module (footprint) * Reference, Value, and other fields are plotted only if * the corresponding option is enabled * Invisible text fields are plotted only if PlotInvisibleText option is set * usually they are not plotted. */ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule ) { // see if we want to plot VALUE and REF fields Loading @@ -77,7 +126,7 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule ) TEXTE_MODULE* textModule = aModule->m_Reference; unsigned textLayer = textModule->GetLayer(); if( textLayer >= 32 ) if( textLayer >= LAYER_COUNT ) return false; if( ( ( 1 << textLayer ) & m_layerMask ) == 0 ) Loading @@ -89,7 +138,7 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule ) textModule = aModule->m_Value; textLayer = textModule->GetLayer(); if( textLayer > 32 ) if( textLayer > LAYER_COUNT ) return false; if( ( (1 << textLayer) & m_layerMask ) == 0 ) Loading Loading @@ -129,7 +178,7 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule ) textLayer = textModule->GetLayer(); if( textLayer >= 32 ) if( textLayer >= LAYER_COUNT ) return false; if( !( ( 1 << textLayer ) & m_layerMask ) ) Loading Loading
pcbnew/pcbplot.h +9 −1 Original line number Diff line number Diff line Loading @@ -90,7 +90,15 @@ public: void PlotDrawSegment( DRAWSEGMENT* PtSegm ); /** * lot items like text and graphics, * Plot a pad. * unlike other items, a pad had not a specific color, * and be drawn as a non filled item although the plot mode is filled * color and plot mode are needed by this function */ void PlotPad( D_PAD* aPad, EDA_COLOR_T aColor, EDA_DRAW_MODE_T aPlotMode ); /** * plot items like text and graphics, * but not tracks and modules */ void PlotBoardGraphicItems(); Loading
pcbnew/plot_board_layers.cpp +35 −90 Original line number Diff line number Diff line Loading @@ -85,8 +85,6 @@ void PlotSilkScreen( BOARD *aBoard, PLOTTER* aPlotter, long aLayerMask, if( (masklayer & layersmask_plotpads) == 0 ) continue; wxPoint shape_pos = pad->ReturnShapePos(); EDA_COLOR_T color = ColorFromInt(0); if( (layersmask_plotpads & SILKSCREEN_LAYER_BACK) ) color = aBoard->GetLayerColor( SILKSCREEN_N_BACK ); Loading @@ -94,36 +92,7 @@ void PlotSilkScreen( BOARD *aBoard, PLOTTER* aPlotter, long aLayerMask, if((layersmask_plotpads & SILKSCREEN_LAYER_FRONT ) ) color = ColorFromInt( color | aBoard->GetLayerColor( SILKSCREEN_N_FRONT ) ); // Set plot color (change WHITE to LIGHTGRAY because // the white items are not seen on a white paper or screen aPlotter->SetColor( color != WHITE ? color : LIGHTGRAY); switch( pad->GetShape() ) { case PAD_CIRCLE: aPlotter->FlashPadCircle( shape_pos, pad->GetSize().x, LINE ); break; case PAD_OVAL: aPlotter->FlashPadOval( shape_pos, pad->GetSize(), pad->GetOrientation(), LINE ); break; case PAD_TRAPEZOID: { wxPoint coord[4]; pad->BuildPadPolygon( coord, wxSize(0,0), 0 ); aPlotter->FlashPadTrapez( shape_pos, coord, pad->GetOrientation(), LINE ); } break; case PAD_RECT: default: aPlotter->FlashPadRect( shape_pos, pad->GetSize(), pad->GetOrientation(), LINE ); break; } itemplotter.PlotPad( pad, color, LINE ); } } } Loading Loading @@ -302,15 +271,11 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter, if( (pad->GetLayerMask() & aLayerMask) == 0 ) continue; wxPoint shape_pos = pad->ReturnShapePos(); wxSize margin; double width_adj = 0; if( aLayerMask & ALL_CU_LAYERS ) { width_adj = itemplotter.getFineWidthAdj(); } switch( aLayerMask & ( SOLDERMASK_LAYER_BACK | SOLDERMASK_LAYER_FRONT | Loading @@ -330,12 +295,12 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter, break; } wxSize size; size.x = pad->GetSize().x + ( 2 * margin.x ) + width_adj; size.y = pad->GetSize().y + ( 2 * margin.y ) + width_adj; wxSize padPlotsSize; padPlotsSize.x = pad->GetSize().x + ( 2 * margin.x ) + width_adj; padPlotsSize.y = pad->GetSize().y + ( 2 * margin.y ) + width_adj; // Don't draw a null size item : if( size.x <= 0 || size.y <= 0 ) if( padPlotsSize.x <= 0 || padPlotsSize.y <= 0 ) continue; EDA_COLOR_T color = BLACK; Loading @@ -346,43 +311,27 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter, if((pad->GetLayerMask() & LAYER_FRONT ) ) color = ColorFromInt( color | aBoard->GetVisibleElementColor( PAD_FR_VISIBLE ) ); // Set plot color (change WHITE to LIGHTGRAY because // the white items are not seen on a white paper or screen aPlotter->SetColor( color != WHITE ? color : LIGHTGRAY); // Temporary set the pad size to the required plot size: wxSize tmppadsize = pad->GetSize(); pad->SetSize( padPlotsSize ); switch( pad->GetShape() ) { case PAD_CIRCLE: if( aPlotOpt.GetSkipPlotNPTH_Pads() && (pad->GetSize() == pad->GetDrillSize()) && (pad->GetAttribute() == PAD_HOLE_NOT_PLATED) ) break; aPlotter->FlashPadCircle( shape_pos, size.x, plotMode ); break; case PAD_OVAL: if( aPlotOpt.GetSkipPlotNPTH_Pads() && (pad->GetSize() == pad->GetDrillSize()) && (pad->GetAttribute() == PAD_HOLE_NOT_PLATED) ) break; aPlotter->FlashPadOval( shape_pos, size, pad->GetOrientation(), plotMode ); break; // Fall through: case PAD_TRAPEZOID: { wxPoint coord[4]; pad->BuildPadPolygon( coord, margin, 0 ); aPlotter->FlashPadTrapez( shape_pos, coord, pad->GetOrientation(), plotMode ); } break; case PAD_RECT: default: aPlotter->FlashPadRect( shape_pos, size, pad->GetOrientation(), plotMode ); itemplotter.PlotPad( pad, color, plotMode ); break; } pad->SetSize( tmppadsize ); // Restore the pad size } } Loading Loading @@ -663,8 +612,6 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, wxASSERT( false ); } if( the_plotter ) { the_plotter->SetFilename( aFullFileName ); // Compute the viewport and set the other options Loading @@ -691,10 +638,8 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, return the_plotter; } } // error in start_plot( ) or before wxMessageBox( _("Error creating plot file") ); delete the_plotter; // error in start_plot( ) delete the_plotter; // will close also output_file return NULL; }
pcbnew/plot_brditems_plotter.cpp +52 −3 Original line number Diff line number Diff line Loading @@ -68,6 +68,55 @@ EDA_COLOR_T BRDITEMS_PLOTTER::getColor( int aLayer ) return color; } /* * Plot a pad. * unlike other items, a pad had not a specific color, * and be drawn as a non filled item although the plot mode is filled * color and plot mode are needed by this function */ void BRDITEMS_PLOTTER::PlotPad( D_PAD* aPad, EDA_COLOR_T aColor, EDA_DRAW_MODE_T aPlotMode ) { wxPoint shape_pos = aPad->ReturnShapePos(); // Set plot color (change WHITE to LIGHTGRAY because // the white items are not seen on a white paper or screen m_plotter->SetColor( aColor != WHITE ? aColor : LIGHTGRAY); switch( aPad->GetShape() ) { case PAD_CIRCLE: m_plotter->FlashPadCircle( shape_pos, aPad->GetSize().x, aPlotMode ); break; case PAD_OVAL: m_plotter->FlashPadOval( shape_pos, aPad->GetSize(), aPad->GetOrientation(), aPlotMode ); break; case PAD_TRAPEZOID: { wxPoint coord[4]; aPad->BuildPadPolygon( coord, wxSize(0,0), 0 ); m_plotter->FlashPadTrapez( shape_pos, coord, aPad->GetOrientation(), aPlotMode ); } break; case PAD_RECT: default: m_plotter->FlashPadRect( shape_pos, aPad->GetSize(), aPad->GetOrientation(), aPlotMode ); break; } } /* * Plot field of a module (footprint) * Reference, Value, and other fields are plotted only if * the corresponding option is enabled * Invisible text fields are plotted only if PlotInvisibleText option is set * usually they are not plotted. */ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule ) { // see if we want to plot VALUE and REF fields Loading @@ -77,7 +126,7 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule ) TEXTE_MODULE* textModule = aModule->m_Reference; unsigned textLayer = textModule->GetLayer(); if( textLayer >= 32 ) if( textLayer >= LAYER_COUNT ) return false; if( ( ( 1 << textLayer ) & m_layerMask ) == 0 ) Loading @@ -89,7 +138,7 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule ) textModule = aModule->m_Value; textLayer = textModule->GetLayer(); if( textLayer > 32 ) if( textLayer > LAYER_COUNT ) return false; if( ( (1 << textLayer) & m_layerMask ) == 0 ) Loading Loading @@ -129,7 +178,7 @@ bool BRDITEMS_PLOTTER::PlotAllTextsModule( MODULE* aModule ) textLayer = textModule->GetLayer(); if( textLayer >= 32 ) if( textLayer >= LAYER_COUNT ) return false; if( !( ( 1 << textLayer ) & m_layerMask ) ) Loading