Commit 5fa61ecd authored by jean-pierre charras's avatar jean-pierre charras
Browse files

Finishing code cleaning in plot functions.

parent 2d49ced7
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -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();
+35 −90
Original line number Diff line number Diff line
@@ -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 );
@@ -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 );
            }
        }
    }
@@ -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 |
@@ -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;
@@ -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
        }
    }

@@ -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
@@ -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;
}
+52 −3
Original line number Diff line number Diff line
@@ -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
@@ -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 )
@@ -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 )
@@ -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 ) )