Gerber plotter: Better object attributes handling when plotting a zone
- Clear object attributes before and after plotting a zone. It avoid using previously defined object attributes when plotting the next zone, and using therefore incorrect attributes. - Add aperture attribute to filled zone solid polygons (regions in Gerber) From master branch
This commit is contained in:
parent
24aad2eed4
commit
a370d69542
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2016-2017 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2016-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -36,7 +36,6 @@
|
|||
#include <math/box2.h>
|
||||
#include <draw_graphic_text.h>
|
||||
#include <page_info.h>
|
||||
#include <eda_text.h> // FILL_T
|
||||
|
||||
class SHAPE_POLY_SET;
|
||||
class SHAPE_LINE_CHAIN;
|
||||
|
|
|
@ -666,6 +666,7 @@ void BRDITEMS_PLOTTER::PlotFilledAreas( ZONE_CONTAINER* aZone )
|
|||
cornerList.clear();
|
||||
|
||||
m_plotter->SetColor( getColor( aZone->GetLayer() ) );
|
||||
m_plotter->StartBlock( nullptr ); // Clean current object attributes
|
||||
|
||||
/* Plot all filled areas: filled areas have a filled area and a thick
|
||||
* outline we must plot the filled area itself ( as a filled polygon
|
||||
|
@ -689,26 +690,22 @@ void BRDITEMS_PLOTTER::PlotFilledAreas( ZONE_CONTAINER* aZone )
|
|||
// Plot the current filled area and its outline
|
||||
if( GetPlotMode() == FILLED )
|
||||
{
|
||||
// Plot the filled area polygon.
|
||||
// The area can be filled by segments or uses solid polygons
|
||||
if( aZone->GetFillMode() == ZONE_FILL_MODE::ZFM_POLYGONS ) // We are using solid polygons
|
||||
// Plot the current filled area (as region for Gerber plotter
|
||||
// to manage attributes) and its outline for thick outline
|
||||
if( GetPlotMode() == FILLED )
|
||||
{
|
||||
if( m_plotter->GetPlotterType() == PLOT_FORMAT_GERBER )
|
||||
{
|
||||
m_plotter->PlotPoly( cornerList, FILLED_SHAPE, aZone->GetMinThickness(), &gbr_metadata );
|
||||
}
|
||||
else // We are using areas filled by segments: plot segments and outline
|
||||
{
|
||||
for( unsigned iseg = 0; iseg < aZone->FillSegments().size(); iseg++ )
|
||||
{
|
||||
wxPoint start = (wxPoint) aZone->FillSegments()[iseg].A;
|
||||
wxPoint end = (wxPoint) aZone->FillSegments()[iseg].B;
|
||||
m_plotter->ThickSegment( start, end,
|
||||
aZone->GetMinThickness(),
|
||||
GetPlotMode(), &gbr_metadata );
|
||||
}
|
||||
if( aZone->GetMinThickness() > 0 )
|
||||
m_plotter->PlotPoly( cornerList, NO_FILL,
|
||||
aZone->GetMinThickness(), &gbr_metadata );
|
||||
|
||||
// Plot the area outline only
|
||||
if( aZone->GetMinThickness() > 0 )
|
||||
m_plotter->PlotPoly( cornerList, NO_FILL, aZone->GetMinThickness() );
|
||||
static_cast<GERBER_PLOTTER*>( m_plotter )->PlotGerberRegion(
|
||||
cornerList, &gbr_metadata );
|
||||
}
|
||||
else
|
||||
m_plotter->PlotPoly( cornerList, FILLED_SHAPE,
|
||||
aZone->GetMinThickness(), &gbr_metadata );
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -727,6 +724,8 @@ void BRDITEMS_PLOTTER::PlotFilledAreas( ZONE_CONTAINER* aZone )
|
|||
cornerList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
m_plotter->EndBlock( nullptr ); // Clear object attributes
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue