51 bool aPlotFPText,
bool aPlotReferences,
bool aPlotValues );
69 LSET layers = { aLayer };
83 itemplotter.
PlotZone( &zone, aLayer, *aPolySet );
98 PlotLayer( aBoard, aPlotter, aLayerMask, aPlotOpt );
108 PlotPolySet( aBoard, aPlotter, aPlotOpt, &solderMask, layer );
125 PlotPolySet( aBoard, aPlotter, aPlotOpt, &silkscreen, silkLayer );
132 if( !aBoard || !aPlotter || aLayers.empty() )
138 int copperLayers = 0;
139 int nonCopperLayers = 0;
150 && copperLayers > 0 && nonCopperLayers > 0 );
174 std::vector<wxString> properties;
176 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
177 _(
"Reference designator" ),
178 fp->Reference().GetShownText(
false ) ) );
180 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
182 fp->Value().GetShownText(
false ) ) );
184 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
186 fp->GetFPID().GetUniStringLibItemName() ) );
188 for(
const PCB_FIELD* field : fp->GetFields() )
190 if( field->IsReference() || field->IsValue() )
193 if( field->GetText().IsEmpty() )
196 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
198 field->GetText() ) );
203 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
_(
"Library Description" ),
204 fp->GetLibDescription() ) );
206 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
_(
"Keywords" ),
207 fp->GetKeywords() ) );
214 BOX2I bbox = fp->GetBoundingBox(
false );
221 bbox = fp->GetBoundingBox(
true );
224 aPlotter->
Bookmark( bbox, fp->GetReference(),
_(
"Footprints" ) );
240 LSET layer_mask( { aLayer } );
251 PlotLayer( aBoard, aPlotter, layer_mask, plotOpt );
280 PlotLayer( aBoard, aPlotter, layer_mask, plotOpt );
318 PlotLayer( aBoard, aPlotter, layer_mask, plotOpt );
332 PlotLayer( aBoard, aPlotter, layer_mask, plotOpt );
354 bool onFrontFab = (
LSET( {
F_Fab } ) & aLayerMask ).any();
355 bool onBackFab = (
LSET( {
B_Fab } ) & aLayerMask ).any();
375 for(
PAD*
pad : footprint->Pads() )
379 if( !(
pad->GetLayerSet() & aLayerMask ).any() )
382 ( ( onFrontFab &&
pad->GetLayerSet().Contains(
F_Cu ) ) ||
383 ( onBackFab &&
pad->GetLayerSet().Contains(
B_Cu ) ) ) )
393 if( onCopperLayer && !
pad->IsOnCopperLayer() )
397 if( onCopperLayer && !
pad->FlashLayer( aLayerMask ) )
405 if( aLayerMask.count() == 1 )
411 if( (
pad->GetLayerSet() & aLayerMask )[
B_Cu] )
414 if( (
pad->GetLayerSet() & aLayerMask )[
F_Cu] )
417 if( sketchPads && aLayerMask[
F_Fab] )
419 else if( sketchPads && aLayerMask[
B_Fab] )
424 ( ( onFrontFab &&
pad->GetLayerSet().Contains(
F_Cu ) ) ||
425 ( onBackFab &&
pad->GetLayerSet().Contains(
B_Cu ) ) ) )
440 if( onSolderMaskLayer )
441 margin.
x = margin.
y =
pad->GetSolderMaskExpansion( aLayer );
443 if( onSolderPasteLayer )
444 margin =
pad->GetSolderPasteMargin( aLayer );
450 int mask_clearance = margin.
x;
454 pad->GetSize( aLayer ) + margin * 2 +
VECTOR2I( width_adj, width_adj );
462 double padCornerRadiusRatio =
pad->GetRoundRectRadiusRatio( aLayer );
467 && ( padPlotsSize.
x <= 0 || padPlotsSize.
y <= 0 ) )
476 pad->SetSize( aLayer, padPlotsSize );
480 (
pad->GetSize(aLayer ) ==
pad->GetDrillSize() ) &&
490 pad->SetSize( aLayer, padPlotsSize );
492 if( mask_clearance > 0 )
495 pad->SetRoundRectCornerRadius( aLayer, mask_clearance );
507 if( mask_clearance == 0 )
518 int dx = padSize.
x / 2;
519 int dy = padSize.
y / 2;
520 int ddx = padDelta.
x / 2;
521 int ddy = padDelta.
y / 2;
523 outline.
Append( -dx - ddy, dy + ddx );
524 outline.
Append( dx + ddy, dy - ddx );
525 outline.
Append( dx - ddy, -dy + ddx );
526 outline.
Append( -dx + ddy, -dy - ddx );
532 dummy.DeletePrimitivesList();
533 dummy.AddPrimitivePoly( aLayer, outline, 0,
true );
550 double radius_ratio =
pad->GetRoundRectRadiusRatio( aLayer );
551 pad->SetSize( aLayer, padPlotsSize );
552 pad->SetRoundRectRadiusRatio( aLayer, radius_ratio );
559 if( mask_clearance == 0 )
562 pad->SetSize( aLayer, padPlotsSize );
586 dummy.DeletePrimitivesList();
587 dummy.AddPrimitivePoly( aLayer, outline, 0,
true );
594 dummy.SetPosition(
pad->GetPosition() );
595 dummy.SetOffset( aLayer,
pad->GetOffset( aLayer ) );
596 dummy.SetOrientation(
pad->GetOrientation() );
608 dummy.SetParentGroup(
nullptr );
611 pad->MergePrimitivesAsPolygon( aLayer, &shape );
617 dummy.DeletePrimitivesList();
618 dummy.AddPrimitivePoly( aLayer, shape, 0,
true );
623 if( mask_clearance < 0 )
625 std::max( 0, padPlotsSize.
y ) ) );
633 pad->SetSize( aLayer, padSize );
634 pad->SetDelta( aLayer, padDelta );
635 pad->SetShape( aLayer, padShape );
636 pad->SetRoundRectRadiusRatio( aLayer, padCornerRadiusRatio );
640 plotPadLayer( layer );
643 if( footprint->IsDNP()
646 && ( ( onFrontFab && footprint->GetLayer() ==
F_Cu ) ||
647 ( onBackFab && footprint->GetLayer() ==
B_Cu ) ) )
649 BOX2I rect = footprint->GetBoundingHull().BBox();
681 LSET via_mask_layer =
via->GetLayerSet();
683 if( !( via_mask_layer & aLayerMask ).any() )
687 double width_adj = 0;
690 if( onSolderMaskLayer )
691 via_margin =
via->GetSolderMaskExpansion();
697 if( onCopperLayer && !
via->FlashLayer( aLayerMask ) )
703 diameter = std::max( diameter,
via->GetWidth( layer ) );
705 diameter += 2 * via_margin + width_adj;
720 if( aLayerMask.count() == 1 )
760 if( !( aLayerMask & track->GetLayerSet() ).any() )
767 gbr_metadata.
SetNetName( track->GetNetname() );
771 if( onSolderMaskLayer )
772 margin = track->GetSolderMaskExpansion();
774 int width = track->GetWidth() + 2 * margin + itemplotter.
getFineWidthAdj();
787 arc->
GetRadius(), width, plotMode, &gbr_metadata );
792 aPlotter->
ThickSegment( track->GetStart(), track->GetEnd(), width, plotMode,
798 aPlotter->
ThickSegment( track->GetStart(), track->GetEnd(), width, plotMode,
810 for(
const ZONE* zone : aBoard->
Zones() )
812 if( zone->GetIsRuleArea() )
817 if( !aLayerMask[layer] )
825 if( zone->IsIsland( layer, i ) )
832 itemplotter.
PlotZone( zone, layer, mainArea );
837 dummy.SetNet( &nonet );
870 std::vector<VECTOR2I> cornerList;
875 for(
int kk = 0; kk <= outlines.
HoleCount(ii); kk++ )
879 : outlines.
CHole( ii, kk - 1 );
894 for(
PAD*
pad : footprint->Pads() )
898 std::shared_ptr<SHAPE_SEGMENT> slot =
pad->GetEffectiveHoleShape();
900 if( slot->GetSeg().A == slot->GetSeg().B )
902 int drill = std::min( smallDrill, slot->GetWidth() );
908 aPlotter->
ThickSegment( slot->GetSeg().A, slot->GetSeg().B,
909 slot->GetWidth(),
SKETCH,
nullptr );
924 if(
via->GetLayerSet().Contains( layer ) )
935 bool aPlotFPText,
bool aPlotReferences,
bool aPlotValues )
943 boardOutline = &buffer;
962 auto handleFPTextItem =
968 if( aText.GetText() == wxT(
"${REFERENCE}" ) && !aPlotReferences )
971 if( aText.GetText() == wxT(
"${VALUE}" ) && !aPlotValues )
975 aText.TransformTextToPolySet( exactPolys, 0, maxError,
ERROR_OUTSIDE );
977 aText.TransformTextToPolySet( *aResult, inflate, maxError,
ERROR_OUTSIDE );
988 footprint->TransformPadsToPolySet( exactPolys, aLayer, 0, maxError,
ERROR_OUTSIDE );
990 footprint->TransformPadsToPolySet( *aResult, aLayer, inflate, maxError,
ERROR_OUTSIDE );
992 for(
const PCB_FIELD* field : footprint->GetFields() )
994 if( field->IsReference() && !aPlotReferences )
997 if( field->IsValue() && !aPlotValues )
1000 if( field->IsVisible() && field->IsOnLayer( aLayer ) )
1001 handleFPTextItem(
static_cast<const PCB_TEXT&
>( *field ) );
1004 for(
const BOARD_ITEM* item : footprint->GraphicalItems() )
1006 if( item->IsOnLayer( aLayer ) )
1010 handleFPTextItem(
static_cast<const PCB_TEXT&
>( *item ) );
1015 item->TransformShapeToPolySet( exactPolys, aLayer, 0, maxError,
ERROR_OUTSIDE );
1017 item->TransformShapeToPolySet( *aResult, aLayer, inflate, maxError,
ERROR_OUTSIDE );
1027 if( !track->IsOnLayer( aLayer ) )
1030 int clearance = track->GetSolderMaskExpansion();
1040 if( item->IsOnLayer( aLayer ) )
1054 item->TransformShapeToPolygon( exactPolys, aLayer, 0, maxError,
ERROR_OUTSIDE );
1056 item->TransformShapeToPolygon( *aResult, aLayer, inflate, maxError,
ERROR_OUTSIDE );
1064 if( zone->GetIsRuleArea() )
1067 if( !zone->IsOnLayer( aLayer ) )
1071 zone->TransformSmoothedOutlineToPolygon( exactPolys, 0, maxError,
ERROR_OUTSIDE, boardOutline );
1073 zone->TransformSmoothedOutlineToPolygon( *aResult, inflate, maxError,
ERROR_OUTSIDE, boardOutline );
1106 bool autocenter =
false;
1115 sheet_info = &pageA4;
1117 paperscale = (double) paperSizeIU.
x / pageSizeIU.
x;
1122 sheet_info = &pageInfo;
1123 paperSizeIU = pageSizeIU;
1127 autocenter = (aPlotOpts->
GetScale() != 1.0);
1134 double compound_scale;
1138 if( aPlotOpts->
GetAutoScale() && boardSize.
x > 0 && boardSize.
y > 0 )
1140 double xscale = (paperSizeIU.
x * 0.8) / boardSize.
x;
1141 double yscale = (paperSizeIU.
y * 0.8) / boardSize.
y;
1143 compound_scale = std::min( xscale, yscale ) * paperscale;
1147 compound_scale = aPlotOpts->
GetScale() * paperscale;
1156 offset.
x =
KiROUND( boardCenter.
x - ( paperSizeIU.
x / 2.0 ) / compound_scale );
1157 offset.
y =
KiROUND( boardCenter.
y - ( paperSizeIU.
y / 2.0 ) / compound_scale );
1190 BOX2I area = aBbbox;
1220 const wxString& aLayerName,
const wxString& aFullFileName,
1221 const wxString& aSheetName,
const wxString& aSheetPath,
1222 const wxString& aPageName,
const wxString& aPageNumber,
1223 const int aPageCount )
1225 wxCHECK( aBoard && aPlotOpts,
nullptr );
1237 plotter = DXF_plotter;
1245 plotter = PS_plotter;
1258 plotter = HPGL_plotter;
1266 wxLogError( wxString::Format(
1267 "Invalid board layer %d, cannot build a valid Gerber file header",
1300 if( plotter->
OpenFile( aFullFileName ) )
1318 bool startPlotSuccess =
false;
1324 static_cast<PDF_PLOTTER*
>( plotter )->StartPlot( aPageNumber, aPageName );
1328 startPlotSuccess = plotter->
StartPlot( aPageName );
1333 startPlotSuccess =
false;
1337 if( startPlotSuccess )
1344 aPageCount, aSheetName, aSheetPath, aBoard->
GetFileName(),
1370 const wxString& aLayerName,
const wxString& aSheetName,
1371 const wxString& aSheetPath,
const wxString& aPageNumber,
constexpr EDA_IU_SCALE pcbIUScale
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
const VECTOR2I & GetAuxOrigin() const
int m_LineThickness[LAYER_CLASS_COUNT]
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Information pertinent to a Pcbnew printed circuit board.
bool GetBoardPolygonOutlines(SHAPE_POLY_SET &aOutlines, OUTLINE_ERROR_HANDLER *aErrorHandler=nullptr, bool aAllowUseArcsInPolygons=false, bool aIncludeNPTHAsOutlines=false)
Extract the board outlines and build a closed polygon from lines, arcs and circle items on edge cut l...
const PAGE_INFO & GetPageSettings() const
const ZONES & Zones() const
void ConvertBrdLayerToPolygonalContours(PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aOutlines) const
Build a set of polygons which are the outlines of copper items (pads, tracks, vias,...
TITLE_BLOCK & GetTitleBlock()
BOX2I ComputeBoundingBox(bool aBoardEdgesOnly=false) const
Calculate the bounding box containing all board items (or board edge segments).
const std::map< wxString, wxString > & GetProperties() const
const FOOTPRINTS & Footprints() const
const TRACKS & Tracks() const
const wxString & GetFileName() const
PROJECT * GetProject() const
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
const DRAWINGS & Drawings() const
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr const Vec GetEnd() const
constexpr size_type GetWidth() const
constexpr Vec Centre() const
constexpr size_type GetHeight() const
constexpr coord_type GetLeft() const
constexpr void Move(const Vec &aMoveVector)
Move the rectangle by the aMoveVector.
constexpr const Vec & GetOrigin() const
constexpr coord_type GetRight() const
constexpr const SizeVec & GetSize() const
constexpr coord_type GetTop() const
constexpr coord_type GetBottom() const
void SetLayerSet(const LSET &aLayerMask)
void PlotDrillMarks()
Draw a drill mark for pads and vias.
void PlotZone(const ZONE *aZone, PCB_LAYER_ID aLayer, const SHAPE_POLY_SET &aPolysList)
void PlotPadNumber(const PAD *aPad, const COLOR4D &aColor)
void PlotBoardGraphicItem(const BOARD_ITEM *item)
Plot items like text and graphics but not tracks and footprints.
void PlotPad(const PAD *aPad, PCB_LAYER_ID aLayer, const COLOR4D &aColor, OUTLINE_MODE aPlotMode)
Plot a pad.
COLOR4D getColor(int aLayer) const
White color is special because it cannot be seen on a white paper in B&W mode.
void PlotFootprintTextItems(const FOOTPRINT *aFootprint)
int getFineWidthAdj() const
void PlotFootprintGraphicItems(const FOOTPRINT *aFootprint)
COLOR4D GetColor(int aLayer) const
When creating polygons to create a clearance polygonal area, the polygon must be same or bigger than ...
void SetUnits(DXF_UNITS aUnit)
Set the units to use for plotting the DXF file.
void UseX2format(bool aEnable)
void UseX2NetAttributes(bool aEnable)
void DisableApertMacros(bool aDisable)
Disable Aperture Macro (AM) command, only for broken Gerber Readers.
virtual void SetPenSpeed(int speed)
virtual void SetPenNumber(int number)
virtual void SetPenDiameter(double diameter)
A color representation with 4 components: red, green, blue, alpha.
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
static const COLOR4D BLACK
PCB specific render settings.
void LoadColors(const COLOR_SETTINGS *aSettings) override
void SetDefaultPenWidth(int aWidth)
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
void SetLayerName(const wxString &aLayerName)
LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
LSET is a set of PCB_LAYER_IDs.
LSEQ SeqStackupForPlotting() const
Return the sequence that is typical for a bottom-to-top stack-up.
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
Handle the data for a net.
Describe the page size and margins of a paper page on which to eventually print or plot.
const VECTOR2D GetSizeIU(double aIUScale) const
Gets the page size in internal units.
bool IsDegenerated(int aThreshold=5) const
EDA_ANGLE GetArcAngleStart() const
EDA_ANGLE GetAngle() const
virtual VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Parameters and options when plotting/printing a board.
PLOT_FORMAT GetFormat() const
bool GetSkipPlotNPTH_Pads() const
void SetDrillMarksType(DRILL_MARKS aVal)
bool GetUseAuxOrigin() const
bool GetHideDNPFPsOnFabLayers() const
void SetSkipPlotNPTH_Pads(bool aSkip)
DXF_UNITS GetDXFPlotUnits() const
bool GetAutoScale() const
PLOT_TEXT_MODE GetTextMode() const
bool GetCrossoutDNPFPsOnFabLayers() const
void SetDXFPlotPolygonMode(bool aFlag)
double GetHPGLPenDiameter() const
unsigned GetSvgPrecision() const
unsigned GetBlackAndWhite() const
bool GetDXFPlotPolygonMode() const
bool GetPlotReference() const
bool m_PDFFrontFPPropertyPopups
Generate PDF property popup menus for footprints.
void SetMirror(bool aFlag)
bool GetSketchPadsOnFabLayers() const
bool GetSubtractMaskFromSilk() const
int GetGerberPrecision() const
int GetHPGLPenSpeed() const
double GetFineScaleAdjustY() const
bool GetPlotPadNumbers() const
int GetHPGLPenNum() const
DRILL_MARKS GetDrillMarksType() const
bool GetUseGerberX2format() const
bool GetPlotValue() const
bool GetIncludeGerberNetlistInfo() const
double GetFineScaleAdjustX() const
bool m_PDFBackFPPropertyPopups
on front and/or back of board
bool GetPlotFPText() const
bool GetPlotFrameRef() const
bool GetDisableGerberMacros() const
OUTLINE_MODE GetPlotMode() const
COLOR_SETTINGS * ColorSettings() const
Base plotter engine class.
virtual void ThickArc(const EDA_SHAPE &aArcShape, OUTLINE_MODE aTraceMode, void *aData, int aWidth)
virtual void ThickSegment(const VECTOR2I &start, const VECTOR2I &end, int width, OUTLINE_MODE tracemode, void *aData)
virtual void Circle(const VECTOR2I &pos, int diametre, FILL_T fill, int width=USE_DEFAULT_LINE_WIDTH)=0
virtual bool OpenFile(const wxString &aFullFilename)
Open or create the plot file aFullFilename.
virtual void SetNegative(bool aNegative)
virtual void SetSvgCoordinatesFormat(unsigned aPrecision)
Set the number of digits for mantissa in coordinates in mm for SVG plotter.
virtual void SetPageSettings(const PAGE_INFO &aPageSettings)
void SetRenderSettings(RENDER_SETTINGS *aSettings)
virtual bool StartPlot(const wxString &aPageNumber)=0
RENDER_SETTINGS * RenderSettings()
virtual void SetGerberCoordinatesFormat(int aResolution, bool aUseInches=false)
virtual void Bookmark(const BOX2I &aBox, const wxString &aName, const wxString &aGroupName=wxEmptyString)
Create a bookmark to a symbol.
virtual PLOT_FORMAT GetPlotterType() const =0
Return the effective plot engine in use.
virtual void SetTextMode(PLOT_TEXT_MODE mode)
Change the current text mode.
virtual void SetCreator(const wxString &aCreator)
VECTOR2I GetPlotOffsetUserUnits()
void ClearHeaderLinesList()
Remove all lines from the list of free lines to print at the beginning of the file.
virtual void FlashPadCircle(const VECTOR2I &aPadPos, int aDiameter, OUTLINE_MODE aTraceMode, void *aData)=0
virtual void SetViewport(const VECTOR2I &aOffset, double aIusPerDecimil, double aScale, bool aMirror)=0
Set the plot offset and scaling for the current plot.
virtual void SetColorMode(bool aColorMode)
Plot in B/W or color.
virtual void StartBlock(void *aData)
calling this function allows one to define the beginning of a group of drawing items,...
virtual void PlotPoly(const std::vector< VECTOR2I > &aCornerList, FILL_T aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
virtual void HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs)
Create a clickable hyperlink menu with a rectangular click area.
virtual void SetLayerPolarity(bool aPositive)
Set the current Gerber layer polarity to positive or negative by writing %LPD*% or %LPC*% to the Gerb...
virtual void Rect(const VECTOR2I &p1, const VECTOR2I &p2, FILL_T fill, int width=USE_DEFAULT_LINE_WIDTH)=0
virtual void SetColor(const COLOR4D &color)=0
virtual void EndBlock(void *aData)
calling this function allows one to define the end of a group of drawing items for instance in SVG or...
void SetScaleAdjust(double scaleX, double scaleY)
Set the 'fine' scaling for the postscript engine.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
Represent a set of closed polygons.
void RemoveAllContours()
Remove all outlines & holes (clears) the polygon set.
void BooleanAdd(const SHAPE_POLY_SET &b)
Perform boolean polyset union.
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new outline to the set and returns its index.
void DeletePolygon(int aIdx)
Delete aIdx-th polygon from the set.
bool IsEmpty() const
Return true if the set is empty (no polygons at all)
void Fracture()
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
int HoleCount(int aOutline) const
Returns the number of holes in a given outline.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline)
void Simplify()
Simplify the polyset (merges overlapping polys, eliminates degeneracy/self-intersections)
int NewOutline()
Creates a new empty polygon in the set and returns its index.
void Deflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError)
const SHAPE_LINE_CHAIN & CHole(int aOutline, int aHole) const
int OutlineCount() const
Return the number of outlines in the set.
void InflateWithLinkedHoles(int aFactor, CORNER_STRATEGY aCornerStrategy, int aMaxError)
Perform outline inflation/deflation, using round corners.
SHAPE_POLY_SET CloneDropTriangulation() const
void BooleanSubtract(const SHAPE_POLY_SET &b)
Perform boolean polyset difference.
const POLYGON & CPolygon(int aIndex) const
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
Handle a list of polygons defining a copper zone.
void SetMinThickness(int aMinThickness)
virtual void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
void PlotDrawingSheet(PLOTTER *plotter, const PROJECT *aProject, const TITLE_BLOCK &aTitleBlock, const PAGE_INFO &aPageInfo, const std::map< wxString, wxString > *aProperties, const wxString &aSheetNumber, int aSheetCount, const wxString &aSheetName, const wxString &aSheetPath, const wxString &aFilename, COLOR4D aColor, bool aIsFirstPage)
@ CHAMFER_ALL_CORNERS
All angles are chamfered.
@ ROUND_ALL_CORNERS
All angles are rounded.
static constexpr EDA_ANGLE ANGLE_0
@ FILLED_SHAPE
Fill with object color.
a few functions useful in geometry calculations.
double m_SmallDrillMarkSize
The diameter of the drill marks on print and plot outputs (in mm) when the "Drill marks" option is se...
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
@ LAYER_VIAS
Meta control for all vias opacity/visibility.
PCB_LAYER_ID
A quick note on layer IDs:
@ NPTH
like PAD_PTH, but not plated mechanical use only, no connection allowed
PAD_SHAPE
The set of pad shapes, used with PAD::{Set,Get}Shape()
void AddGerberX2Attribute(PLOTTER *aPlotter, const BOARD *aBoard, int aLayer, bool aUseX1CompatibilityMode)
Calculate some X2 attributes as defined in the Gerber file format specification and add them to the g...
static void FillNegativeKnockout(PLOTTER *aPlotter, const BOX2I &aBbbox)
Prefill in black an area a little bigger than the board to prepare for the negative plot.
void PlotClippedSilkLayer(BOARD *aBoard, PLOTTER *aPlotter, const LSET &aLayerMask, const PCB_PLOT_PARAMS &aPlotOpt)
void PlotBoardLayers(BOARD *aBoard, PLOTTER *aPlotter, const LSEQ &aLayers, const PCB_PLOT_PARAMS &aPlotOptions)
Plot a sequence of board layer IDs.
void PlotStandardLayer(BOARD *aBoard, PLOTTER *aPlotter, const LSET &aLayerMask, const PCB_PLOT_PARAMS &aPlotOpt)
Plot any layer EXCEPT a solder-mask with an enforced minimum width.
PLOTTER * StartPlotBoard(BOARD *aBoard, const PCB_PLOT_PARAMS *aPlotOpts, int aLayer, const wxString &aLayerName, const wxString &aFullFileName, const wxString &aSheetName, const wxString &aSheetPath, const wxString &aPageName, const wxString &aPageNumber, const int aPageCount)
Open a new plotfile using the options (and especially the format) specified in the options and prepar...
void GenerateLayerPoly(SHAPE_POLY_SET *aResult, BOARD *aBoard, PCB_LAYER_ID aLayer, bool aPlotFPText, bool aPlotReferences, bool aPlotValues)
Generates a SHAPE_POLY_SET representing the plotted items on a layer.
static void ConfigureHPGLPenSizes(HPGL_PLOTTER *aPlotter, const PCB_PLOT_PARAMS *aPlotOpts)
Calculate the effective size of HPGL pens and set them in the plotter object.
void PlotPolySet(BOARD *aBoard, PLOTTER *aPlotter, const PCB_PLOT_PARAMS &aPlotOpt, SHAPE_POLY_SET *aPolySet, PCB_LAYER_ID aLayer)
void PlotSolderMaskLayer(BOARD *aBoard, PLOTTER *aPlotter, const LSET &aLayerMask, const PCB_PLOT_PARAMS &aPlotOpt)
Plot a solder mask layer.
static void initializePlotter(PLOTTER *aPlotter, const BOARD *aBoard, const PCB_PLOT_PARAMS *aPlotOpts)
Set up most plot options for plotting a board (especially the viewport) Important thing: page size is...
void PlotInteractiveLayer(BOARD *aBoard, PLOTTER *aPlotter, const PCB_PLOT_PARAMS &aPlotOpt)
Plot interactive items (hypertext links, properties, etc.).
void PlotOneBoardLayer(BOARD *aBoard, PLOTTER *aPlotter, PCB_LAYER_ID aLayer, const PCB_PLOT_PARAMS &aPlotOpt, bool isPrimaryLayer)
Plot one copper or technical layer.
void setupPlotterNewPDFPage(PLOTTER *aPlotter, BOARD *aBoard, const PCB_PLOT_PARAMS *aPlotOpts, const wxString &aLayerName, const wxString &aSheetName, const wxString &aSheetPath, const wxString &aPageNumber, int aPageCount)
void PlotLayer(BOARD *aBoard, PLOTTER *aPlotter, const LSET &layerMask, const PCB_PLOT_PARAMS &plotOpts)
void PlotLayerOutlines(BOARD *aBoard, PLOTTER *aPlotter, const LSET &aLayerMask, const PCB_PLOT_PARAMS &aPlotOpt)
Plot outlines.
Plotting engines similar to ps (PostScript, Gerber, svg)
std::vector< FAB_LAYER_COLOR > dummy
constexpr int mmToIU(double mm) const
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
VECTOR2< int32_t > VECTOR2I