KiCad PCB EDA Suite
BRDITEMS_PLOTTER Class Reference

#include <pcbplot.h>

Inheritance diagram for BRDITEMS_PLOTTER:
PCB_PLOT_PARAMS

Public Types

enum  DrillMarksType { NO_DRILL_SHAPE = 0, SMALL_DRILL_SHAPE = 1, FULL_DRILL_SHAPE = 2 }
 

Public Member Functions

 BRDITEMS_PLOTTER (PLOTTER *aPlotter, BOARD *aBoard, const PCB_PLOT_PARAMS &aPlotOpts)
 
int getFineWidthAdj () const
 
void SetLayerSet (LSET aLayerMask)
 
void PlotFootprintGraphicItems (const FOOTPRINT *aFootprint)
 
void PlotFootprintGraphicItem (const FP_SHAPE *aShape)
 
void PlotFootprintTextItem (const FP_TEXT *aText, const COLOR4D &aColor)
 
void PlotFootprintTextItems (const FOOTPRINT *aFootprint)
 
void PlotDimension (const PCB_DIMENSION_BASE *aDim)
 
void PlotPcbTarget (const PCB_TARGET *aMire)
 
void PlotFilledAreas (const ZONE *aZone, const SHAPE_POLY_SET &aPolysList)
 
void PlotPcbText (const PCB_TEXT *aText)
 
void PlotPcbShape (const PCB_SHAPE *aShape)
 
void PlotPad (const PAD *aPad, const COLOR4D &aColor, OUTLINE_MODE aPlotMode)
 Plot a pad. More...
 
void PlotBoardGraphicItems ()
 Plot items like text and graphics but not tracks and footprints. More...
 
void PlotDrillMarks ()
 Draw a drill mark for pads and vias. More...
 
COLOR4D getColor (LAYER_NUM aLayer) const
 White color is special because it cannot be seen on a white paper in B&W mode. More...
 
void SetSkipPlotNPTH_Pads (bool aSkip)
 
bool GetSkipPlotNPTH_Pads () const
 
void Format (OUTPUTFORMATTER *aFormatter, int aNestLevel, int aControl=0) const
 
void Parse (PCB_PLOT_PARAMS_PARSER *aParser)
 
bool IsSameAs (const PCB_PLOT_PARAMS &aPcbPlotParams) const
 Compare current settings to aPcbPlotParams, including not saved parameters in brd file. More...
 
void SetColorSettings (COLOR_SETTINGS *aSettings)
 
COLOR_SETTINGSColorSettings () const
 
void SetTextMode (PLOT_TEXT_MODE aVal)
 
PLOT_TEXT_MODE GetTextMode () const
 
void SetPlotMode (OUTLINE_MODE aPlotMode)
 
OUTLINE_MODE GetPlotMode () const
 
void SetDXFPlotPolygonMode (bool aFlag)
 
bool GetDXFPlotPolygonMode () const
 
void SetDXFPlotUnits (DXF_UNITS aUnit)
 
DXF_UNITS GetDXFPlotUnits () const
 
void SetDrillMarksType (DrillMarksType aVal)
 
DrillMarksType GetDrillMarksType () const
 
void SetScale (double aVal)
 
double GetScale () const
 
void SetFineScaleAdjustX (double aVal)
 
double GetFineScaleAdjustX () const
 
void SetFineScaleAdjustY (double aVal)
 
double GetFineScaleAdjustY () const
 
void SetWidthAdjust (int aVal)
 
int GetWidthAdjust () const
 
void SetAutoScale (bool aFlag)
 
bool GetAutoScale () const
 
void SetMirror (bool aFlag)
 
bool GetMirror () const
 
void SetSketchPadsOnFabLayers (bool aFlag)
 
bool GetSketchPadsOnFabLayers () const
 
void SetSketchPadLineWidth (int aWidth)
 
int GetSketchPadLineWidth () const
 
void SetPlotInvisibleText (bool aFlag)
 
bool GetPlotInvisibleText () const
 
void SetPlotValue (bool aFlag)
 
bool GetPlotValue () const
 
void SetPlotReference (bool aFlag)
 
bool GetPlotReference () const
 
void SetNegative (bool aFlag)
 
bool GetNegative () const
 
void SetPlotViaOnMaskLayer (bool aFlag)
 
bool GetPlotViaOnMaskLayer () const
 
void SetPlotFrameRef (bool aFlag)
 
bool GetPlotFrameRef () const
 
void SetExcludeEdgeLayer (bool aFlag)
 
bool GetExcludeEdgeLayer () const
 
void SetFormat (PLOT_FORMAT aFormat)
 
PLOT_FORMAT GetFormat () const
 
void SetOutputDirectory (const wxString &aDir)
 
wxString GetOutputDirectory () const
 
void SetDisableGerberMacros (bool aDisable)
 
bool GetDisableGerberMacros () const
 
void SetUseGerberX2format (bool aUse)
 
bool GetUseGerberX2format () const
 
void SetIncludeGerberNetlistInfo (bool aUse)
 
bool GetIncludeGerberNetlistInfo () const
 
void SetCreateGerberJobFile (bool aCreate)
 
bool GetCreateGerberJobFile () const
 
void SetUseGerberProtelExtensions (bool aUse)
 
bool GetUseGerberProtelExtensions () const
 
void SetGerberPrecision (int aPrecision)
 
int GetGerberPrecision () const
 
void SetSvgPrecision (unsigned aPrecision, bool aUseInch)
 
unsigned GetSvgPrecision () const
 
bool GetSvgUseInch () const
 
void SetSubtractMaskFromSilk (bool aSubtract)
 
bool GetSubtractMaskFromSilk () const
 
void SetLayerSelection (LSET aSelection)
 
LSET GetLayerSelection () const
 
void SetUseAuxOrigin (bool aAux)
 
bool GetUseAuxOrigin () const
 
void SetScaleSelection (int aSelection)
 
int GetScaleSelection () const
 
void SetA4Output (int aForce)
 
bool GetA4Output () const
 
double GetHPGLPenDiameter () const
 
bool SetHPGLPenDiameter (double aValue)
 
int GetHPGLPenSpeed () const
 
bool SetHPGLPenSpeed (int aValue)
 
void SetHPGLPenNum (int aVal)
 
int GetHPGLPenNum () const
 

Static Public Member Functions

static int GetGerberDefaultPrecision ()
 Default precision of coordinates in Gerber files. More...
 

Private Member Functions

void plotOneDrillMark (PAD_DRILL_SHAPE_T aDrillShape, const wxPoint &aDrillPos, const wxSize &aDrillSize, const wxSize &aPadSize, double aOrientation, int aSmallDrill)
 Helper function to plot a single drill mark. More...
 

Private Attributes

PLOTTERm_plotter
 
BOARDm_board
 
LSET m_layerMask
 

Detailed Description

Definition at line 60 of file pcbplot.h.

Member Enumeration Documentation

◆ DrillMarksType

Enumerator
NO_DRILL_SHAPE 
SMALL_DRILL_SHAPE 
FULL_DRILL_SHAPE 

Definition at line 38 of file pcb_plot_params.h.

Constructor & Destructor Documentation

◆ BRDITEMS_PLOTTER()

BRDITEMS_PLOTTER::BRDITEMS_PLOTTER ( PLOTTER aPlotter,
BOARD aBoard,
const PCB_PLOT_PARAMS aPlotOpts 
)
inline

Definition at line 63 of file pcbplot.h.

64  : PCB_PLOT_PARAMS( aPlotOpts )
65  {
66  m_plotter = aPlotter;
67  m_board = aBoard;
68  }
PLOTTER * m_plotter
Definition: pcbplot.h:142
BOARD * m_board
Definition: pcbplot.h:143

References m_board, and m_plotter.

Member Function Documentation

◆ ColorSettings()

COLOR_SETTINGS* PCB_PLOT_PARAMS::ColorSettings ( ) const
inlineinherited

Definition at line 64 of file pcb_plot_params.h.

64 { return m_colors; }
COLOR_SETTINGS * m_colors
Pointer to active color settings to be used for plotting.

References PCB_PLOT_PARAMS::m_colors.

Referenced by getColor(), PlotDimension(), PlotStandardLayer(), and StartPlotBoard().

◆ Format()

void PCB_PLOT_PARAMS::Format ( OUTPUTFORMATTER aFormatter,
int  aNestLevel,
int  aControl = 0 
) const
inherited

Definition at line 166 of file pcb_plot_params.cpp.

168 {
169  const char* falseStr = getTokenName( T_false );
170  const char* trueStr = getTokenName( T_true );
171 
172  aFormatter->Print( aNestLevel, "(%s\n", getTokenName( T_pcbplotparams ) );
173 
174  aFormatter->Print( aNestLevel+1, "(%s 0x%s)\n", getTokenName( T_layerselection ),
175  m_layerSelection.FmtHex().c_str() );
176 
177  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_disableapertmacros ),
178  m_gerberDisableApertMacros ? trueStr : falseStr );
179 
180  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberextensions ),
181  m_useGerberProtelExtensions ? trueStr : falseStr );
182 
183  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberattributes ),
184  GetUseGerberX2format() ? trueStr : falseStr );
185 
186  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberadvancedattributes ),
187  GetIncludeGerberNetlistInfo() ? trueStr : falseStr );
188 
189  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_creategerberjobfile ),
190  GetCreateGerberJobFile() ? trueStr : falseStr );
191 
192  // save this option only if it is not the default value,
193  // to avoid incompatibility with older Pcbnew version
195  aFormatter->Print( aNestLevel+1, "(%s %d)\n",
196  getTokenName( T_gerberprecision ), m_gerberPrecision );
197 
198  // SVG options
199  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_svguseinch ),
200  m_svgUseInch ? trueStr : falseStr );
201  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_svgprecision ),
202  m_svgPrecision );
203 
204  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_excludeedgelayer ),
205  m_excludeEdgeLayer ? trueStr : falseStr );
206  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotframeref ),
207  m_plotFrameRef ? trueStr : falseStr );
208  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_viasonmask ),
209  m_plotViaOnMaskLayer ? trueStr : falseStr );
210  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_mode ),
211  GetPlotMode() == SKETCH ? 2 : 1 ); // Value 0 (LINE mode) no more used
212  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_useauxorigin ),
213  m_useAuxOrigin ? trueStr : falseStr );
214 
215  // HPGL options
216  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpennumber ),
217  m_HPGLPenNum );
218  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpenspeed ),
219  m_HPGLPenSpeed );
220  aFormatter->Print( aNestLevel+1, "(%s %f)\n", getTokenName( T_hpglpendiameter ),
221  m_HPGLPenDiam );
222 
223  // DXF options
224  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_dxfpolygonmode ),
225  m_DXFplotPolygonMode ? trueStr : falseStr );
226  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_dxfimperialunits ),
227  m_DXFplotUnits == DXF_UNITS::INCHES ? trueStr : falseStr );
228  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_dxfusepcbnewfont ),
229  m_textMode == PLOT_TEXT_MODE::NATIVE ? falseStr : trueStr );
230 
231  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_psnegative ),
232  m_negative ? trueStr : falseStr );
233  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_psa4output ),
234  m_A4Output ? trueStr : falseStr );
235  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotreference ),
236  m_plotReference ? trueStr : falseStr );
237  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotvalue ),
238  m_plotValue ? trueStr : falseStr );
239  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotinvisibletext ),
240  m_plotInvisibleText ? trueStr : falseStr );
241  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_sketchpadsonfab ),
242  m_sketchPadsOnFabLayers ? trueStr : falseStr );
243  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_subtractmaskfromsilk ),
244  m_subtractMaskFromSilk ? trueStr : falseStr );
245  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_outputformat ),
246  static_cast<int>( m_format ) );
247  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_mirror ),
248  m_mirror ? trueStr : falseStr );
249  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_drillshape ),
250  m_drillMarks );
251  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_scaleselection ),
253  aFormatter->Print( aNestLevel+1, "(%s \"%s\")", getTokenName( T_outputdirectory ),
254  (const char*) m_outputDirectory.utf8_str() );
255  aFormatter->Print( 0, "\n" );
256  aFormatter->Print( aNestLevel, ")\n" );
257 }
bool m_plotValue
Enable plotting of part values.
OUTLINE_MODE GetPlotMode() const
bool GetCreateGerberJobFile() const
wxString m_outputDirectory
Output directory for plot files (usually relative to the board file)
bool m_mirror
Mirror the plot around the X axis.
bool m_excludeEdgeLayer
If false always plot (merge) the pcb edge layer on other layers.
DXF_UNITS m_DXFplotUnits
DXF format: Units to use when plotting the DXF.
static const int gbrDefaultPrecision
bool m_svgUseInch
units for SVG plot false for metric, true for inch/mils
bool m_plotReference
Enable plotting of part references.
bool m_useGerberProtelExtensions
When plotting gerber files, use a conventional set of Protel extensions instead of ....
int m_scaleSelection
Scale ratio index (UI only)
bool m_negative
Plot in negative color (supported only by some drivers)
bool GetUseGerberX2format() const
bool m_plotFrameRef
True to plot/print frame references.
double m_HPGLPenDiam
HPGL only: pen diameter in MILS, useful to fill areas However, it is in mm in hpgl files.
bool m_plotInvisibleText
Force plotting of fields marked invisible.
bool m_DXFplotPolygonMode
DXF format: Plot items in outline (polygon) mode.
bool m_A4Output
Autoscale the plot to fit an A4 (landscape?) sheet.
unsigned m_svgPrecision
precision of coordinates in SVG files: accepted 3 - 6 6 is the internal resolution of Pcbnew
bool m_sketchPadsOnFabLayers
Plots pads outlines on fab layers.
bool m_subtractMaskFromSilk
On gerbers 'scrape' away the solder mask from silkscreen (trim silks)
bool GetIncludeGerberNetlistInfo() const
bool m_plotViaOnMaskLayer
True if vias are drawn on Mask layer (ie untented, exposed by mask)
static const char * getTokenName(T aTok)
bool m_useAuxOrigin
Plot gerbers using auxiliary (drill) origin instead of absolute coordinates.
PLOT_FORMAT m_format
Plot format type (chooses the driver to be used)
bool m_gerberDisableApertMacros
Disable aperture macros in Gerber format (only for broken Gerber readers) Ideally,...
int m_HPGLPenNum
HPGL only: pen number selection(1 to 9)
LSET m_layerSelection
Set of layers to plot.
std::string FmtHex() const
Return a hex string showing contents of this LSEQ.
Definition: lset.cpp:321
PLOT_TEXT_MODE m_textMode
Choose how represent text with PS, PDF and DXF drivers.
int m_HPGLPenSpeed
HPGL only: pen speed, always in cm/s (1 to 99 cm/s)
int PRINTF_FUNC Print(int nestLevel, const char *fmt,...)
Format and write text to the output stream.
Definition: richio.cpp:426
DrillMarksType m_drillMarks
Holes can be not plotted, have a small mark or plotted in actual size.
int m_gerberPrecision
precision of coordinates in Gerber files: accepted 5 or 6 when units are in mm (6 or 7 in inches,...

References gbrDefaultPrecision, getTokenName(), INCHES, NATIVE, OUTPUTFORMATTER::Print(), and SKETCH.

Referenced by PCB_IO::formatSetup().

◆ GetA4Output()

bool PCB_PLOT_PARAMS::GetA4Output ( ) const
inlineinherited

Definition at line 184 of file pcb_plot_params.h.

184 { return m_A4Output; };
bool m_A4Output
Autoscale the plot to fit an A4 (landscape?) sheet.

References PCB_PLOT_PARAMS::m_A4Output.

Referenced by DIALOG_PLOT::init_Dialog(), and initializePlotter().

◆ GetAutoScale()

bool PCB_PLOT_PARAMS::GetAutoScale ( ) const
inlineinherited

Definition at line 106 of file pcb_plot_params.h.

106 { return m_autoScale; }
bool m_autoScale
When true set the scale to fit the board in the page.

References PCB_PLOT_PARAMS::m_autoScale.

Referenced by initializePlotter().

◆ getColor()

COLOR4D BRDITEMS_PLOTTER::getColor ( LAYER_NUM  aLayer) const

White color is special because it cannot be seen on a white paper in B&W mode.

It is plotted as white but other colors are plotted in BLACK so the returned color is LIGHTGRAY when the layer color is WHITE.

Parameters
aLayeris the layer id.
Returns
the layer color.

Definition at line 68 of file plot_brditems_plotter.cpp.

69 {
70  COLOR4D color = ColorSettings()->GetColor( aLayer );
71 
72  // A hack to avoid plotting a white item in white color, expecting the paper
73  // is also white: use a non white color:
74  if( color == COLOR4D::WHITE )
75  color = COLOR4D( LIGHTGRAY );
76 
77  return color;
78 }
int color
Definition: DXF_plotter.cpp:57
Definition: color4d.h:48
COLOR4D GetColor(int aLayer) const
COLOR_SETTINGS * ColorSettings() const
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103

References color, PCB_PLOT_PARAMS::ColorSettings(), COLOR_SETTINGS::GetColor(), LIGHTGRAY, and WHITE.

Referenced by PlotFilledAreas(), PlotFootprintGraphicItem(), PlotFootprintTextItems(), PlotPcbShape(), PlotPcbTarget(), PlotPcbText(), and PlotStandardLayer().

◆ GetCreateGerberJobFile()

bool PCB_PLOT_PARAMS::GetCreateGerberJobFile ( ) const
inlineinherited

Definition at line 151 of file pcb_plot_params.h.

151 { return m_createGerberJobFile; }
bool m_createGerberJobFile
generate the auxiliary "job file" in gerber format

References PCB_PLOT_PARAMS::m_createGerberJobFile.

Referenced by DIALOG_PLOT::init_Dialog(), and DIALOG_PLOT::Plot().

◆ GetDisableGerberMacros()

bool PCB_PLOT_PARAMS::GetDisableGerberMacros ( ) const
inlineinherited

Definition at line 142 of file pcb_plot_params.h.

142 { return m_gerberDisableApertMacros; }
bool m_gerberDisableApertMacros
Disable aperture macros in Gerber format (only for broken Gerber readers) Ideally,...

References PCB_PLOT_PARAMS::m_gerberDisableApertMacros.

Referenced by DIALOG_PLOT::init_Dialog(), and StartPlotBoard().

◆ GetDrillMarksType()

DrillMarksType PCB_PLOT_PARAMS::GetDrillMarksType ( ) const
inlineinherited

Definition at line 93 of file pcb_plot_params.h.

93 { return m_drillMarks; }
DrillMarksType m_drillMarks
Holes can be not plotted, have a small mark or plotted in actual size.

References PCB_PLOT_PARAMS::m_drillMarks.

Referenced by DIALOG_PLOT::init_Dialog(), PlotDrillMarks(), PlotLayerOutlines(), and PlotStandardLayer().

◆ GetDXFPlotPolygonMode()

bool PCB_PLOT_PARAMS::GetDXFPlotPolygonMode ( ) const
inlineinherited

Definition at line 80 of file pcb_plot_params.h.

80 { return m_DXFplotPolygonMode; }
bool m_DXFplotPolygonMode
DXF format: Plot items in outline (polygon) mode.

References PCB_PLOT_PARAMS::m_DXFplotPolygonMode.

Referenced by DIALOG_PLOT::init_Dialog(), and PlotOneBoardLayer().

◆ GetDXFPlotUnits()

DXF_UNITS PCB_PLOT_PARAMS::GetDXFPlotUnits ( ) const
inlineinherited

Definition at line 87 of file pcb_plot_params.h.

88  {
89  return m_DXFplotUnits;
90  }
DXF_UNITS m_DXFplotUnits
DXF format: Units to use when plotting the DXF.

References PCB_PLOT_PARAMS::m_DXFplotUnits.

Referenced by DIALOG_PLOT::init_Dialog(), and StartPlotBoard().

◆ GetExcludeEdgeLayer()

bool PCB_PLOT_PARAMS::GetExcludeEdgeLayer ( ) const
inlineinherited

Definition at line 133 of file pcb_plot_params.h.

133 { return m_excludeEdgeLayer; }
bool m_excludeEdgeLayer
If false always plot (merge) the pcb edge layer on other layers.

References PCB_PLOT_PARAMS::m_excludeEdgeLayer.

Referenced by DIALOG_PLOT::init_Dialog(), and PlotOneBoardLayer().

◆ GetFineScaleAdjustX()

double PCB_PLOT_PARAMS::GetFineScaleAdjustX ( ) const
inlineinherited

Definition at line 99 of file pcb_plot_params.h.

99 { return m_fineScaleAdjustX; }
double m_fineScaleAdjustX
fine scale adjust X axis

References PCB_PLOT_PARAMS::m_fineScaleAdjustX.

Referenced by StartPlotBoard().

◆ GetFineScaleAdjustY()

double PCB_PLOT_PARAMS::GetFineScaleAdjustY ( ) const
inlineinherited

Definition at line 101 of file pcb_plot_params.h.

101 { return m_fineScaleAdjustY; }
double m_fineScaleAdjustY
fine scale adjust Y axis

References PCB_PLOT_PARAMS::m_fineScaleAdjustY.

Referenced by StartPlotBoard().

◆ getFineWidthAdj()

int BRDITEMS_PLOTTER::getFineWidthAdj ( ) const
inline
Returns
a 'width adjustment' for the postscript engine (useful for controlling toner bleeding during direct transfer) added to track width and via/pads size

Definition at line 75 of file pcbplot.h.

76  {
77  if( GetFormat() == PLOT_FORMAT::POST )
78  return GetWidthAdjust();
79  else
80  return 0;
81  }
int GetWidthAdjust() const
PLOT_FORMAT GetFormat() const

References PCB_PLOT_PARAMS::GetFormat(), PCB_PLOT_PARAMS::GetWidthAdjust(), and POST.

Referenced by plotOneDrillMark(), and PlotStandardLayer().

◆ GetFormat()

PLOT_FORMAT PCB_PLOT_PARAMS::GetFormat ( ) const
inlineinherited

Definition at line 136 of file pcb_plot_params.h.

136 { return m_format; }
PLOT_FORMAT m_format
Plot format type (chooses the driver to be used)

References PCB_PLOT_PARAMS::m_format.

Referenced by getFineWidthAdj(), DIALOG_PLOT::init_Dialog(), DIALOG_PLOT::Plot(), PlotOneBoardLayer(), and StartPlotBoard().

◆ GetGerberDefaultPrecision()

static int PCB_PLOT_PARAMS::GetGerberDefaultPrecision ( )
inlinestaticinherited

Default precision of coordinates in Gerber files.

When units are in mm (7 in inches, but Pcbnew uses mm). 6 is the internal resolution of Pcbnew, so the default is 6.

Definition at line 169 of file pcb_plot_params.h.

169 { return 6; }

◆ GetGerberPrecision()

int PCB_PLOT_PARAMS::GetGerberPrecision ( ) const
inlineinherited

Definition at line 157 of file pcb_plot_params.h.

157 { return m_gerberPrecision; }
int m_gerberPrecision
precision of coordinates in Gerber files: accepted 5 or 6 when units are in mm (6 or 7 in inches,...

References PCB_PLOT_PARAMS::m_gerberPrecision.

Referenced by DIALOG_GENDRILL::GenDrillAndMapFiles(), DIALOG_PLOT::init_Dialog(), initializePlotter(), and DIALOG_GENDRILL::onFileFormatSelection().

◆ GetHPGLPenDiameter()

double PCB_PLOT_PARAMS::GetHPGLPenDiameter ( ) const
inlineinherited

Definition at line 188 of file pcb_plot_params.h.

188 { return m_HPGLPenDiam; };
double m_HPGLPenDiam
HPGL only: pen diameter in MILS, useful to fill areas However, it is in mm in hpgl files.

References PCB_PLOT_PARAMS::m_HPGLPenDiam.

Referenced by DIALOG_PLOT::applyPlotSettings(), ConfigureHPGLPenSizes(), and DIALOG_PLOT::init_Dialog().

◆ GetHPGLPenNum()

int PCB_PLOT_PARAMS::GetHPGLPenNum ( ) const
inlineinherited

Definition at line 196 of file pcb_plot_params.h.

196 { return m_HPGLPenNum; }
int m_HPGLPenNum
HPGL only: pen number selection(1 to 9)

References PCB_PLOT_PARAMS::m_HPGLPenNum.

Referenced by ConfigureHPGLPenSizes(), and GENDRILL_WRITER_BASE::genDrillMapFile().

◆ GetHPGLPenSpeed()

int PCB_PLOT_PARAMS::GetHPGLPenSpeed ( ) const
inlineinherited

Definition at line 192 of file pcb_plot_params.h.

192 { return m_HPGLPenSpeed; };
int m_HPGLPenSpeed
HPGL only: pen speed, always in cm/s (1 to 99 cm/s)

References PCB_PLOT_PARAMS::m_HPGLPenSpeed.

Referenced by ConfigureHPGLPenSizes(), and GENDRILL_WRITER_BASE::genDrillMapFile().

◆ GetIncludeGerberNetlistInfo()

bool PCB_PLOT_PARAMS::GetIncludeGerberNetlistInfo ( ) const
inlineinherited

Definition at line 148 of file pcb_plot_params.h.

148 { return m_includeGerberNetlistInfo; }
bool m_includeGerberNetlistInfo
Include netlist info (only in Gerber X2 format) (chapter ? in revision ?)

References PCB_PLOT_PARAMS::m_includeGerberNetlistInfo.

Referenced by DIALOG_PLOT::init_Dialog(), and StartPlotBoard().

◆ GetLayerSelection()

LSET PCB_PLOT_PARAMS::GetLayerSelection ( ) const
inlineinherited

Definition at line 175 of file pcb_plot_params.h.

175 { return m_layerSelection; };
LSET m_layerSelection
Set of layers to plot.

References PCB_PLOT_PARAMS::m_layerSelection.

Referenced by DIALOG_PLOT::init_Dialog(), and DIALOG_PLOT::Plot().

◆ GetMirror()

bool PCB_PLOT_PARAMS::GetMirror ( ) const
inlineinherited

Definition at line 109 of file pcb_plot_params.h.

109 { return m_mirror; }
bool m_mirror
Mirror the plot around the X axis.

References PCB_PLOT_PARAMS::m_mirror.

Referenced by DIALOG_PLOT::init_Dialog(), initializePlotter(), and StartPlotBoard().

◆ GetNegative()

bool PCB_PLOT_PARAMS::GetNegative ( ) const
inlineinherited

Definition at line 124 of file pcb_plot_params.h.

124 { return m_negative; }
bool m_negative
Plot in negative color (supported only by some drivers)

References PCB_PLOT_PARAMS::m_negative.

Referenced by DIALOG_PLOT::init_Dialog(), and StartPlotBoard().

◆ GetOutputDirectory()

◆ GetPlotFrameRef()

bool PCB_PLOT_PARAMS::GetPlotFrameRef ( ) const
inlineinherited

Definition at line 130 of file pcb_plot_params.h.

130 { return m_plotFrameRef; }
bool m_plotFrameRef
True to plot/print frame references.

References PCB_PLOT_PARAMS::m_plotFrameRef.

Referenced by DIALOG_PLOT::init_Dialog(), and StartPlotBoard().

◆ GetPlotInvisibleText()

bool PCB_PLOT_PARAMS::GetPlotInvisibleText ( ) const
inlineinherited

Definition at line 117 of file pcb_plot_params.h.

117 { return m_plotInvisibleText; }
bool m_plotInvisibleText
Force plotting of fields marked invisible.

References PCB_PLOT_PARAMS::m_plotInvisibleText.

Referenced by DIALOG_PLOT::init_Dialog(), and PlotFootprintTextItems().

◆ GetPlotMode()

OUTLINE_MODE PCB_PLOT_PARAMS::GetPlotMode ( ) const
inlineinherited

Definition at line 77 of file pcb_plot_params.h.

77 { return m_plotMode; }
OUTLINE_MODE m_plotMode
FILLED or SKETCH selects how to plot filled objects.

References PCB_PLOT_PARAMS::m_plotMode.

Referenced by DIALOG_PLOT::init_Dialog(), PlotDrillMarks(), PlotFilledAreas(), PlotFootprintGraphicItem(), plotOneDrillMark(), PlotPcbShape(), and PlotStandardLayer().

◆ GetPlotReference()

bool PCB_PLOT_PARAMS::GetPlotReference ( ) const
inlineinherited

Definition at line 121 of file pcb_plot_params.h.

121 { return m_plotReference; }
bool m_plotReference
Enable plotting of part references.

References PCB_PLOT_PARAMS::m_plotReference.

Referenced by DIALOG_PLOT::init_Dialog(), and PlotFootprintTextItems().

◆ GetPlotValue()

bool PCB_PLOT_PARAMS::GetPlotValue ( ) const
inlineinherited

Definition at line 119 of file pcb_plot_params.h.

119 { return m_plotValue; }
bool m_plotValue
Enable plotting of part values.

References PCB_PLOT_PARAMS::m_plotValue.

Referenced by DIALOG_PLOT::init_Dialog(), and PlotFootprintTextItems().

◆ GetPlotViaOnMaskLayer()

bool PCB_PLOT_PARAMS::GetPlotViaOnMaskLayer ( ) const
inlineinherited

Definition at line 127 of file pcb_plot_params.h.

127 { return m_plotViaOnMaskLayer; }
bool m_plotViaOnMaskLayer
True if vias are drawn on Mask layer (ie untented, exposed by mask)

References PCB_PLOT_PARAMS::m_plotViaOnMaskLayer.

Referenced by DIALOG_PLOT::init_Dialog(), PlotSolderMaskLayer(), and PlotStandardLayer().

◆ GetScale()

double PCB_PLOT_PARAMS::GetScale ( ) const
inlineinherited

Definition at line 96 of file pcb_plot_params.h.

96 { return m_scale; }
double m_scale
Global scale factor, 1.0 plots a board with its actual size.

References PCB_PLOT_PARAMS::m_scale.

Referenced by ConfigureHPGLPenSizes(), initializePlotter(), and DIALOG_PLOT::Plot().

◆ GetScaleSelection()

int PCB_PLOT_PARAMS::GetScaleSelection ( ) const
inlineinherited

Definition at line 181 of file pcb_plot_params.h.

181 { return m_scaleSelection; };
int m_scaleSelection
Scale ratio index (UI only)

References PCB_PLOT_PARAMS::m_scaleSelection.

Referenced by DIALOG_PLOT::init_Dialog(), and DIALOG_PLOT::Plot().

◆ GetSketchPadLineWidth()

int PCB_PLOT_PARAMS::GetSketchPadLineWidth ( ) const
inlineinherited

Definition at line 114 of file pcb_plot_params.h.

114 { return m_sketchPadLineWidth; }

References PCB_PLOT_PARAMS::m_sketchPadLineWidth.

Referenced by PlotPad().

◆ GetSketchPadsOnFabLayers()

bool PCB_PLOT_PARAMS::GetSketchPadsOnFabLayers ( ) const
inlineinherited

Definition at line 112 of file pcb_plot_params.h.

112 { return m_sketchPadsOnFabLayers; }
bool m_sketchPadsOnFabLayers
Plots pads outlines on fab layers.

References PCB_PLOT_PARAMS::m_sketchPadsOnFabLayers.

Referenced by DIALOG_PLOT::init_Dialog(), and PlotStandardLayer().

◆ GetSkipPlotNPTH_Pads()

bool PCB_PLOT_PARAMS::GetSkipPlotNPTH_Pads ( ) const
inlineinherited

Definition at line 47 of file pcb_plot_params.h.

47 { return m_skipNPTH_Pads; }

References PCB_PLOT_PARAMS::m_skipNPTH_Pads.

Referenced by PlotStandardLayer().

◆ GetSubtractMaskFromSilk()

bool PCB_PLOT_PARAMS::GetSubtractMaskFromSilk ( ) const
inlineinherited

Definition at line 172 of file pcb_plot_params.h.

172 { return m_subtractMaskFromSilk; }
bool m_subtractMaskFromSilk
On gerbers 'scrape' away the solder mask from silkscreen (trim silks)

References PCB_PLOT_PARAMS::m_subtractMaskFromSilk.

Referenced by DIALOG_PLOT::init_Dialog(), and PlotOneBoardLayer().

◆ GetSvgPrecision()

unsigned PCB_PLOT_PARAMS::GetSvgPrecision ( ) const
inlineinherited

Definition at line 160 of file pcb_plot_params.h.

160 { return m_svgPrecision; }
unsigned m_svgPrecision
precision of coordinates in SVG files: accepted 3 - 6 6 is the internal resolution of Pcbnew

References PCB_PLOT_PARAMS::m_svgPrecision.

Referenced by DIALOG_PLOT::init_Dialog(), and initializePlotter().

◆ GetSvgUseInch()

bool PCB_PLOT_PARAMS::GetSvgUseInch ( ) const
inlineinherited

Definition at line 161 of file pcb_plot_params.h.

161 { return m_svgUseInch; }
bool m_svgUseInch
units for SVG plot false for metric, true for inch/mils

References PCB_PLOT_PARAMS::m_svgUseInch.

Referenced by DIALOG_PLOT::init_Dialog(), and initializePlotter().

◆ GetTextMode()

PLOT_TEXT_MODE PCB_PLOT_PARAMS::GetTextMode ( ) const
inlineinherited

Definition at line 71 of file pcb_plot_params.h.

72  {
73  return m_textMode;
74  }
PLOT_TEXT_MODE m_textMode
Choose how represent text with PS, PDF and DXF drivers.

References PCB_PLOT_PARAMS::m_textMode.

Referenced by DIALOG_PLOT::init_Dialog(), initializePlotter(), and PlotOneBoardLayer().

◆ GetUseAuxOrigin()

bool PCB_PLOT_PARAMS::GetUseAuxOrigin ( ) const
inlineinherited

Definition at line 178 of file pcb_plot_params.h.

178 { return m_useAuxOrigin; };
bool m_useAuxOrigin
Plot gerbers using auxiliary (drill) origin instead of absolute coordinates.

References PCB_PLOT_PARAMS::m_useAuxOrigin.

Referenced by AddGerberX2Header(), PLACEFILE_GERBER_WRITER::CreatePlaceFile(), DIALOG_PLOT::init_Dialog(), DIALOG_GENDRILL::initDialog(), initializePlotter(), and DIALOG_PLOT::reInitDialog().

◆ GetUseGerberProtelExtensions()

bool PCB_PLOT_PARAMS::GetUseGerberProtelExtensions ( ) const
inlineinherited

Definition at line 154 of file pcb_plot_params.h.

154 { return m_useGerberProtelExtensions; }
bool m_useGerberProtelExtensions
When plotting gerber files, use a conventional set of Protel extensions instead of ....

References PCB_PLOT_PARAMS::m_useGerberProtelExtensions.

Referenced by DIALOG_PLOT::init_Dialog().

◆ GetUseGerberX2format()

bool PCB_PLOT_PARAMS::GetUseGerberX2format ( ) const
inlineinherited

Definition at line 145 of file pcb_plot_params.h.

145 { return m_useGerberX2format; }
bool m_useGerberX2format
Include attributes from the Gerber X2 format (chapter 5 in revision J2)

References PCB_PLOT_PARAMS::m_useGerberX2format.

Referenced by DIALOG_PLOT::init_Dialog(), and StartPlotBoard().

◆ GetWidthAdjust()

int PCB_PLOT_PARAMS::GetWidthAdjust ( ) const
inlineinherited

Definition at line 103 of file pcb_plot_params.h.

103 { return m_widthAdjust; }
int m_widthAdjust
This width factor is intended to compensate PS printers/ plotters that do not strictly obey line widt...

References PCB_PLOT_PARAMS::m_widthAdjust.

Referenced by getFineWidthAdj().

◆ IsSameAs()

bool PCB_PLOT_PARAMS::IsSameAs ( const PCB_PLOT_PARAMS aPcbPlotParams) const
inherited

Compare current settings to aPcbPlotParams, including not saved parameters in brd file.

Parameters
aPcbPlotParamsis the PCB_PLOT_PARAMS to compare/
aCompareOnlySavedPrmsset to true to compare only saved in file parameters, or false to compare the full set of parameters.
Returns
true is parameters are same, false if one (or more) parameter does not match.

Definition at line 266 of file pcb_plot_params.cpp.

267 {
268  if( m_layerSelection != aPcbPlotParams.m_layerSelection )
269  return false;
270 
272  return false;
273 
275  return false;
276 
277  if( m_useGerberX2format != aPcbPlotParams.m_useGerberX2format )
278  return false;
279 
281  return false;
282 
283  if( m_createGerberJobFile != aPcbPlotParams.m_createGerberJobFile )
284  return false;
285 
286  if( m_gerberPrecision != aPcbPlotParams.m_gerberPrecision )
287  return false;
288 
289  if( m_excludeEdgeLayer != aPcbPlotParams.m_excludeEdgeLayer )
290  return false;
291 
292  if( m_plotFrameRef != aPcbPlotParams.m_plotFrameRef )
293  return false;
294 
295  if( m_plotViaOnMaskLayer != aPcbPlotParams.m_plotViaOnMaskLayer )
296  return false;
297 
298  if( m_plotMode != aPcbPlotParams.m_plotMode )
299  return false;
300 
301  if( m_DXFplotPolygonMode != aPcbPlotParams.m_DXFplotPolygonMode )
302  return false;
303 
304  if( m_DXFplotUnits != aPcbPlotParams.m_DXFplotUnits )
305  return false;
306 
307  if( m_svgPrecision != aPcbPlotParams.m_svgPrecision )
308  return false;
309 
310  if( m_svgUseInch != aPcbPlotParams.m_svgUseInch )
311  return false;
312 
313  if( m_useAuxOrigin != aPcbPlotParams.m_useAuxOrigin )
314  return false;
315 
316  if( m_HPGLPenNum != aPcbPlotParams.m_HPGLPenNum )
317  return false;
318 
319  if( m_HPGLPenSpeed != aPcbPlotParams.m_HPGLPenSpeed )
320  return false;
321 
322  if( m_HPGLPenDiam != aPcbPlotParams.m_HPGLPenDiam )
323  return false;
324 
325  if( m_negative != aPcbPlotParams.m_negative )
326  return false;
327 
328  if( m_A4Output != aPcbPlotParams.m_A4Output )
329  return false;
330 
331  if( m_plotReference != aPcbPlotParams.m_plotReference )
332  return false;
333 
334  if( m_plotValue != aPcbPlotParams.m_plotValue )
335  return false;
336 
337  if( m_plotInvisibleText != aPcbPlotParams.m_plotInvisibleText )
338  return false;
339 
340  if( m_sketchPadsOnFabLayers != aPcbPlotParams.m_sketchPadsOnFabLayers )
341  return false;
342 
343  if( m_subtractMaskFromSilk != aPcbPlotParams.m_subtractMaskFromSilk )
344  return false;
345 
346  if( m_format != aPcbPlotParams.m_format )
347  return false;
348 
349  if( m_mirror != aPcbPlotParams.m_mirror )
350  return false;
351 
352  if( m_drillMarks != aPcbPlotParams.m_drillMarks )
353  return false;
354 
355  if( m_scaleSelection != aPcbPlotParams.m_scaleSelection )
356  return false;
357 
358  if( m_autoScale != aPcbPlotParams.m_autoScale )
359  return false;
360 
361  if( m_scale != aPcbPlotParams.m_scale )
362  return false;
363 
364  if( m_fineScaleAdjustX != aPcbPlotParams.m_fineScaleAdjustX )
365  return false;
366 
367  if( m_fineScaleAdjustY != aPcbPlotParams.m_fineScaleAdjustY )
368  return false;
369 
370  if( m_widthAdjust != aPcbPlotParams.m_widthAdjust )
371  return false;
372 
373  if( m_textMode != aPcbPlotParams.m_textMode )
374  return false;
375 
376  if( !m_outputDirectory.IsSameAs( aPcbPlotParams.m_outputDirectory ) )
377  return false;
378 
379  return true;
380 }
double m_fineScaleAdjustX
fine scale adjust X axis
bool m_plotValue
Enable plotting of part values.
wxString m_outputDirectory
Output directory for plot files (usually relative to the board file)
bool m_mirror
Mirror the plot around the X axis.
bool m_excludeEdgeLayer
If false always plot (merge) the pcb edge layer on other layers.
DXF_UNITS m_DXFplotUnits
DXF format: Units to use when plotting the DXF.
bool m_svgUseInch
units for SVG plot false for metric, true for inch/mils
bool m_useGerberX2format
Include attributes from the Gerber X2 format (chapter 5 in revision J2)
double m_scale
Global scale factor, 1.0 plots a board with its actual size.
bool m_plotReference
Enable plotting of part references.
bool m_useGerberProtelExtensions
When plotting gerber files, use a conventional set of Protel extensions instead of ....
OUTLINE_MODE m_plotMode
FILLED or SKETCH selects how to plot filled objects.
int m_scaleSelection
Scale ratio index (UI only)
bool m_negative
Plot in negative color (supported only by some drivers)
bool m_plotFrameRef
True to plot/print frame references.
double m_HPGLPenDiam
HPGL only: pen diameter in MILS, useful to fill areas However, it is in mm in hpgl files.
bool m_includeGerberNetlistInfo
Include netlist info (only in Gerber X2 format) (chapter ? in revision ?)
bool m_plotInvisibleText
Force plotting of fields marked invisible.
bool m_DXFplotPolygonMode
DXF format: Plot items in outline (polygon) mode.
bool m_autoScale
When true set the scale to fit the board in the page.
bool m_A4Output
Autoscale the plot to fit an A4 (landscape?) sheet.
unsigned m_svgPrecision
precision of coordinates in SVG files: accepted 3 - 6 6 is the internal resolution of Pcbnew
bool m_sketchPadsOnFabLayers
Plots pads outlines on fab layers.
bool m_subtractMaskFromSilk
On gerbers 'scrape' away the solder mask from silkscreen (trim silks)
double m_fineScaleAdjustY
fine scale adjust Y axis
bool m_plotViaOnMaskLayer
True if vias are drawn on Mask layer (ie untented, exposed by mask)
int m_widthAdjust
This width factor is intended to compensate PS printers/ plotters that do not strictly obey line widt...
bool m_useAuxOrigin
Plot gerbers using auxiliary (drill) origin instead of absolute coordinates.
PLOT_FORMAT m_format
Plot format type (chooses the driver to be used)
bool m_createGerberJobFile
generate the auxiliary "job file" in gerber format
bool m_gerberDisableApertMacros
Disable aperture macros in Gerber format (only for broken Gerber readers) Ideally,...
int m_HPGLPenNum
HPGL only: pen number selection(1 to 9)
LSET m_layerSelection
Set of layers to plot.
PLOT_TEXT_MODE m_textMode
Choose how represent text with PS, PDF and DXF drivers.
int m_HPGLPenSpeed
HPGL only: pen speed, always in cm/s (1 to 99 cm/s)
DrillMarksType m_drillMarks
Holes can be not plotted, have a small mark or plotted in actual size.
int m_gerberPrecision
precision of coordinates in Gerber files: accepted 5 or 6 when units are in mm (6 or 7 in inches,...

References PCB_PLOT_PARAMS::m_A4Output, PCB_PLOT_PARAMS::m_autoScale, PCB_PLOT_PARAMS::m_createGerberJobFile, PCB_PLOT_PARAMS::m_drillMarks, PCB_PLOT_PARAMS::m_DXFplotPolygonMode, PCB_PLOT_PARAMS::m_DXFplotUnits, PCB_PLOT_PARAMS::m_excludeEdgeLayer, PCB_PLOT_PARAMS::m_fineScaleAdjustX, PCB_PLOT_PARAMS::m_fineScaleAdjustY, PCB_PLOT_PARAMS::m_format, PCB_PLOT_PARAMS::m_gerberDisableApertMacros, PCB_PLOT_PARAMS::m_gerberPrecision, PCB_PLOT_PARAMS::m_HPGLPenDiam, PCB_PLOT_PARAMS::m_HPGLPenNum, PCB_PLOT_PARAMS::m_HPGLPenSpeed, PCB_PLOT_PARAMS::m_includeGerberNetlistInfo, PCB_PLOT_PARAMS::m_layerSelection, PCB_PLOT_PARAMS::m_mirror, PCB_PLOT_PARAMS::m_negative, PCB_PLOT_PARAMS::m_outputDirectory, PCB_PLOT_PARAMS::m_plotFrameRef, PCB_PLOT_PARAMS::m_plotInvisibleText, PCB_PLOT_PARAMS::m_plotMode, PCB_PLOT_PARAMS::m_plotReference, PCB_PLOT_PARAMS::m_plotValue, PCB_PLOT_PARAMS::m_plotViaOnMaskLayer, PCB_PLOT_PARAMS::m_scale, PCB_PLOT_PARAMS::m_scaleSelection, PCB_PLOT_PARAMS::m_sketchPadsOnFabLayers, PCB_PLOT_PARAMS::m_subtractMaskFromSilk, PCB_PLOT_PARAMS::m_svgPrecision, PCB_PLOT_PARAMS::m_svgUseInch, PCB_PLOT_PARAMS::m_textMode, PCB_PLOT_PARAMS::m_useAuxOrigin, PCB_PLOT_PARAMS::m_useGerberProtelExtensions, PCB_PLOT_PARAMS::m_useGerberX2format, and PCB_PLOT_PARAMS::m_widthAdjust.

Referenced by DIALOG_PLOT::applyPlotSettings(), and DIALOG_GENDRILL::UpdateDrillParams().

◆ Parse()

void PCB_PLOT_PARAMS::Parse ( PCB_PLOT_PARAMS_PARSER aParser)
inherited

Definition at line 260 of file pcb_plot_params.cpp.

261 {
262  aParser->Parse( this );
263 }
void Parse(PCB_PLOT_PARAMS *aPcbPlotParams)

References PCB_PLOT_PARAMS_PARSER::Parse().

Referenced by LEGACY_PLUGIN::loadSETUP(), and PCB_PARSER::parseSetup().

◆ PlotBoardGraphicItems()

void BRDITEMS_PLOTTER::PlotBoardGraphicItems ( )

Plot items like text and graphics but not tracks and footprints.

Definition at line 343 of file plot_brditems_plotter.cpp.

344 {
345  for( BOARD_ITEM* item : m_board->Drawings() )
346  {
347  switch( item->Type() )
348  {
349  case PCB_SHAPE_T:
350  PlotPcbShape( (PCB_SHAPE*) item );
351  break;
352 
353  case PCB_TEXT_T:
354  PlotPcbText( (PCB_TEXT*) item );
355  break;
356 
357  case PCB_DIM_ALIGNED_T:
358  case PCB_DIM_CENTER_T:
360  case PCB_DIM_LEADER_T:
362  break;
363 
364  case PCB_TARGET_T:
365  PlotPcbTarget( (PCB_TARGET*) item );
366  break;
367 
368  default:
369  break;
370  }
371  }
372 }
void PlotPcbTarget(const PCB_TARGET *aMire)
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
Definition: typeinfo.h:100
class PCB_DIM_LEADER, a leader dimension (graphic item)
Definition: typeinfo.h:101
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
class PCB_DIM_CENTER, a center point marking (graphic item)
Definition: typeinfo.h:102
class PCB_TEXT, text on a layer
Definition: typeinfo.h:91
void PlotPcbText(const PCB_TEXT *aText)
Abstract dimension API.
Definition: pcb_dimension.h:95
BOARD * m_board
Definition: pcbplot.h:143
class PCB_TARGET, a target (graphic item)
Definition: typeinfo.h:104
void PlotPcbShape(const PCB_SHAPE *aShape)
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
Definition: typeinfo.h:103
class PCB_SHAPE, a segment not on copper layers
Definition: typeinfo.h:90
void PlotDimension(const PCB_DIMENSION_BASE *aDim)
DRAWINGS & Drawings()
Definition: board.h:236

References BOARD::Drawings(), m_board, PCB_DIM_ALIGNED_T, PCB_DIM_CENTER_T, PCB_DIM_LEADER_T, PCB_DIM_ORTHOGONAL_T, PCB_SHAPE_T, PCB_TARGET_T, PCB_TEXT_T, PlotDimension(), PlotPcbShape(), PlotPcbTarget(), and PlotPcbText().

Referenced by PLACEFILE_GERBER_WRITER::CreatePlaceFile(), PlotSolderMaskLayer(), and PlotStandardLayer().

◆ PlotDimension()

void BRDITEMS_PLOTTER::PlotDimension ( const PCB_DIMENSION_BASE aDim)

Definition at line 416 of file plot_brditems_plotter.cpp.

417 {
418  if( !m_layerMask[aDim->GetLayer()] )
419  return;
420 
421  PCB_SHAPE draw;
422 
423  draw.SetWidth( aDim->GetLineThickness() );
424  draw.SetLayer( aDim->GetLayer() );
425 
426  COLOR4D color = ColorSettings()->GetColor( aDim->GetLayer() );
427 
428  // Set plot color (change WHITE to LIGHTGRAY because
429  // the white items are not seen on a white paper or screen
431 
432  PlotPcbText( &aDim->Text() );
433 
434  for( const std::shared_ptr<SHAPE>& shape : aDim->GetShapes() )
435  {
436  switch( shape->Type() )
437  {
438  case SH_SEGMENT:
439  {
440  const SEG& seg = static_cast<const SHAPE_SEGMENT*>( shape.get() )->GetSeg();
441 
442  draw.SetShape( SHAPE_T::SEGMENT );
443  draw.SetStart( wxPoint( seg.A ) );
444  draw.SetEnd( wxPoint( seg.B ) );
445 
446  PlotPcbShape( &draw );
447  break;
448  }
449 
450  case SH_CIRCLE:
451  {
452  wxPoint start( shape->Centre() );
453  int radius = static_cast<const SHAPE_CIRCLE*>( shape.get() )->GetRadius();
454 
455  draw.SetShape( SHAPE_T::CIRCLE );
456  draw.SetFilled( false );
457  draw.SetStart( start );
458  draw.SetEnd( wxPoint( start.x + radius, start.y ) );
459 
460  PlotPcbShape( &draw );
461  break;
462  }
463 
464  default:
465  break;
466  }
467  }
468 }
void SetShape(SHAPE_T aShape)
Definition: pcb_shape.h:109
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:192
PCB_TEXT & Text()
void SetFilled(bool aFlag)
Definition: pcb_shape.h:73
int color
Definition: DXF_plotter.cpp:57
PLOTTER * m_plotter
Definition: pcbplot.h:142
usual segment : line with rounded ends
void PlotPcbText(const PCB_TEXT *aText)
const std::vector< std::shared_ptr< SHAPE > > & GetShapes() const
circle
Definition: shape.h:46
virtual void SetColor(const COLOR4D &color)=0
Definition: color4d.h:48
Definition: seg.h:40
COLOR4D GetColor(int aLayer) const
void SetStart(const wxPoint &aStart)
Definition: pcb_shape.h:127
void PlotPcbShape(const PCB_SHAPE *aShape)
LSET m_layerMask
Definition: pcbplot.h:144
VECTOR2I A
Definition: seg.h:48
void SetWidth(int aWidth)
Definition: pcb_shape.h:96
COLOR_SETTINGS * ColorSettings() const
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171
int GetLineThickness() const
void SetEnd(const wxPoint &aEnd)
Definition: pcb_shape.h:137
line segment
Definition: shape.h:44
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103
VECTOR2I B
Definition: seg.h:49

References SEG::A, SEG::B, CIRCLE, color, PCB_PLOT_PARAMS::ColorSettings(), COLOR_SETTINGS::GetColor(), BOARD_ITEM::GetLayer(), PCB_DIMENSION_BASE::GetLineThickness(), PCB_DIMENSION_BASE::GetShapes(), LIGHTGRAY, m_layerMask, m_plotter, PlotPcbShape(), PlotPcbText(), SEGMENT, PLOTTER::SetColor(), PCB_SHAPE::SetEnd(), PCB_SHAPE::SetFilled(), BOARD_ITEM::SetLayer(), PCB_SHAPE::SetShape(), PCB_SHAPE::SetStart(), PCB_SHAPE::SetWidth(), SH_CIRCLE, SH_SEGMENT, PCB_DIMENSION_BASE::Text(), and WHITE.

Referenced by PlotBoardGraphicItems().

◆ PlotDrillMarks()

void BRDITEMS_PLOTTER::PlotDrillMarks ( )

Draw a drill mark for pads and vias.

Must be called after all drawings, because it redraws the drill mark on a pad or via, as a negative (i.e. white) shape in FILLED plot mode (for PS and PDF outputs).

Definition at line 1020 of file plot_brditems_plotter.cpp.

1021 {
1022  /* If small drills marks were requested prepare a clamp value to pass
1023  to the helper function */
1025  ? Millimeter2iu( ADVANCED_CFG::GetCfg().m_SmallDrillMarkSize ) : 0;
1026 
1027  /* In the filled trace mode drill marks are drawn white-on-black to scrape
1028  the underlying pad. This works only for drivers supporting color change,
1029  obviously... it means that:
1030  - PS, SVG and PDF output is correct (i.e. you have a 'donut' pad)
1031  - In HPGL you can't see them
1032  - In gerbers you can't see them, too. This is arguably the right thing to
1033  do since having drill marks and high speed drill stations is a sure
1034  recipe for broken tools and angry manufacturers. If you *really* want them
1035  you could start a layer with negative polarity to scrape the film.
1036  - In DXF they go into the 'WHITE' layer. This could be useful.
1037  */
1038  if( GetPlotMode() == FILLED )
1039  m_plotter->SetColor( WHITE );
1040 
1041  for( PCB_TRACK* tracks : m_board->Tracks() )
1042  {
1043  const PCB_VIA* via = dyn_cast<const PCB_VIA*>( tracks );
1044 
1045  if( via )
1046  {
1048  wxSize( via->GetDrillValue(), 0 ),
1049  wxSize( via->GetWidth(), 0 ), 0, smallDrill );
1050  }
1051  }
1052 
1053  for( FOOTPRINT* footprint : m_board->Footprints() )
1054  {
1055  for( PAD* pad : footprint->Pads() )
1056  {
1057  if( pad->GetDrillSize().x == 0 )
1058  continue;
1059 
1060  plotOneDrillMark( pad->GetDrillShape(), pad->GetPosition(), pad->GetDrillSize(),
1061  pad->GetSize(), pad->GetOrientation(), smallDrill );
1062  }
1063  }
1064 
1065  if( GetPlotMode() == FILLED )
1066  m_plotter->SetColor( BLACK );
1067 }
OUTLINE_MODE GetPlotMode() const
void plotOneDrillMark(PAD_DRILL_SHAPE_T aDrillShape, const wxPoint &aDrillPos, const wxSize &aDrillSize, const wxSize &aPadSize, double aOrientation, int aSmallDrill)
Helper function to plot a single drill mark.
PLOTTER * m_plotter
Definition: pcbplot.h:142
Definition: color4d.h:44
BOARD * m_board
Definition: pcbplot.h:143
FOOTPRINTS & Footprints()
Definition: board.h:233
virtual void SetColor(const COLOR4D &color)=0
Definition: color4d.h:48
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
Definition: pad.h:57
DrillMarksType GetDrillMarksType() const
static constexpr int Millimeter2iu(double mm)
TRACKS & Tracks()
Definition: board.h:230

References BLACK, FILLED, BOARD::Footprints(), ADVANCED_CFG::GetCfg(), PCB_PLOT_PARAMS::GetDrillMarksType(), PCB_PLOT_PARAMS::GetPlotMode(), m_board, m_plotter, Millimeter2iu(), pad, PAD_DRILL_SHAPE_CIRCLE, plotOneDrillMark(), PLOTTER::SetColor(), PCB_PLOT_PARAMS::SMALL_DRILL_SHAPE, BOARD::Tracks(), via, and WHITE.

Referenced by PlotStandardLayer().

◆ PlotFilledAreas()

void BRDITEMS_PLOTTER::PlotFilledAreas ( const ZONE aZone,
const SHAPE_POLY_SET aPolysList 
)

Definition at line 754 of file plot_brditems_plotter.cpp.

755 {
756  if( polysList.IsEmpty() )
757  return;
758 
759  GBR_METADATA gbr_metadata;
760 
761  bool isOnCopperLayer = aZone->IsOnCopperLayer();
762 
763  if( isOnCopperLayer )
764  {
765  gbr_metadata.SetNetName( aZone->GetNetname() );
766  gbr_metadata.SetCopper( true );
767 
768  // Zones with no net name can exist.
769  // they are not used to connect items, so the aperture attribute cannot
770  // be set as conductor
771  if( aZone->GetNetname().IsEmpty() )
772  {
773  gbr_metadata.SetApertureAttrib(
775  }
776  else
777  {
780  }
781  }
782 
783  m_plotter->SetColor( getColor( aZone->GetLayer() ) );
784 
785  m_plotter->StartBlock( nullptr ); // Clean current object attributes
786 
787  /* Plot all filled areas: filled areas have a filled area and a thick
788  * outline (depending on the fill area option we must plot the filled area itself
789  * and plot the thick outline itself, if the thickness has meaning (at least is > 1)
790  *
791  * in non filled mode the outline is plotted, but not the filling items
792  */
793  int outline_thickness = aZone->GetFilledPolysUseThickness() ? aZone->GetMinThickness() : 0;
794 
795  for( int idx = 0; idx < polysList.OutlineCount(); ++idx )
796  {
797  const SHAPE_LINE_CHAIN& outline = polysList.Outline( idx );
798 
799  // Plot the current filled area (as region for Gerber plotter
800  // to manage attributes) and its outline for thick outline
801  if( GetPlotMode() == FILLED )
802  {
804  {
805  if( outline_thickness > 0 )
806  {
808  outline_thickness, &gbr_metadata );
809 
810  // Ensure the outline is closed:
811  int last_idx = outline.PointCount() - 1;
812 
813  if( outline.CPoint( 0 ) != outline.CPoint( last_idx ) )
814  {
815  m_plotter->ThickSegment( wxPoint( outline.CPoint( 0 ) ),
816  wxPoint( outline.CPoint( last_idx ) ),
817  outline_thickness,
818  GetPlotMode(), &gbr_metadata );
819  }
820  }
821 
822  static_cast<GERBER_PLOTTER*>( m_plotter )->PlotGerberRegion( outline,
823  &gbr_metadata );
824  }
825  else
826  {
828  outline_thickness, &gbr_metadata );
829  }
830  }
831  else
832  {
833  if( outline_thickness )
834  {
835  int last_idx = outline.PointCount() - 1;
836 
837  for( int jj = 1; jj <= last_idx; jj++ )
838  {
839  m_plotter->ThickSegment( wxPoint( outline.CPoint( jj - 1) ),
840  wxPoint( outline.CPoint( jj ) ),
841  outline_thickness,
842  GetPlotMode(), &gbr_metadata );
843  }
844 
845  // Ensure the outline is closed:
846  if( outline.CPoint( 0 ) != outline.CPoint( last_idx ) )
847  {
848  m_plotter->ThickSegment( wxPoint( outline.CPoint( 0 ) ),
849  wxPoint( outline.CPoint( last_idx ) ),
850  outline_thickness,
851  GetPlotMode(), &gbr_metadata );
852  }
853  }
854 
856  }
857  }
858 
859  m_plotter->EndBlock( nullptr ); // Clear object attributes
860 }
OUTLINE_MODE GetPlotMode() const
COLOR4D getColor(LAYER_NUM aLayer) const
White color is special because it cannot be seen on a white paper in B&W mode.
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
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...
Definition: plotter.h:496
void SetNetAttribType(int aNetAttribType)
Definition: gbr_metadata.h:219
PLOTTER * m_plotter
Definition: pcbplot.h:142
virtual void StartBlock(void *aData)
calling this function allows one to define the beginning of a group of drawing items,...
Definition: plotter.h:487
int PointCount() const
Return the number of points (vertices) in this line chain.
virtual void ThickSegment(const wxPoint &start, const wxPoint &end, int width, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:529
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
int GetMinThickness() const
Definition: zone.h:244
virtual PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
Definition: zone.cpp:218
virtual PLOT_FORMAT GetPlotterType() const =0
Returns the effective plot engine in use.
Metadata which can be added in a gerber file as attribute in X2 format.
Definition: gbr_metadata.h:204
virtual void SetColor(const COLOR4D &color)=0
void SetNetName(const wxString &aNetname)
Definition: gbr_metadata.h:229
Represent a polyline (an zero-thickness chain of connected line segments).
bool IsOnCopperLayer() const override
Definition: zone.cpp:224
void SetApertureAttrib(GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB aApertAttribute)
Definition: gbr_metadata.h:209
void SetCopper(bool aValue)
Definition: gbr_metadata.h:252
print info associated to a net (TO.N attribute)
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.
bool GetFilledPolysUseThickness() const
Definition: zone.h:689

References SHAPE_LINE_CHAIN::CPoint(), PLOTTER::EndBlock(), FILLED, FILLED_SHAPE, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_CONDUCTOR, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_NONCONDUCTOR, GBR_NETLIST_METADATA::GBR_NETINFO_NET, GERBER, getColor(), ZONE::GetFilledPolysUseThickness(), ZONE::GetLayer(), ZONE::GetMinThickness(), BOARD_CONNECTED_ITEM::GetNetname(), PCB_PLOT_PARAMS::GetPlotMode(), PLOTTER::GetPlotterType(), SHAPE_POLY_SET::IsEmpty(), ZONE::IsOnCopperLayer(), m_plotter, NO_FILL, SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), PLOTTER::PlotPoly(), SHAPE_LINE_CHAIN::PointCount(), GBR_METADATA::SetApertureAttrib(), PLOTTER::SetColor(), GBR_METADATA::SetCopper(), PLOTTER::SetCurrentLineWidth(), GBR_METADATA::SetNetAttribType(), GBR_METADATA::SetNetName(), PLOTTER::StartBlock(), and PLOTTER::ThickSegment().

Referenced by PlotSolderMaskLayer(), and PlotStandardLayer().

◆ PlotFootprintGraphicItem()

void BRDITEMS_PLOTTER::PlotFootprintGraphicItem ( const FP_SHAPE aShape)

Definition at line 537 of file plot_brditems_plotter.cpp.

538 {
539  if( aShape->Type() != PCB_FP_SHAPE_T )
540  return;
541 
542  m_plotter->SetColor( getColor( aShape->GetLayer() ) );
543 
544  bool sketch = GetPlotMode() == SKETCH;
545  int thickness = aShape->GetWidth();
546  wxPoint pos( aShape->GetStart() );
547  wxPoint end( aShape->GetEnd() );
548 
549  GBR_METADATA gbr_metadata;
551  const FOOTPRINT* parent = static_cast<const FOOTPRINT*> ( aShape->GetParent() );
552  gbr_metadata.SetCmpReference( parent->GetReference() );
553 
554  bool isOnCopperLayer = ( m_layerMask & LSET::AllCuMask() ).any();
555 
556  if( aShape->GetLayer() == Edge_Cuts ) // happens also when plotting copper layers
557  {
558  gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_EDGECUT );
559  }
560  else if( isOnCopperLayer ) // only for items not on Edge_Cuts.
561  {
562  gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_ETCHEDCMP );
563  gbr_metadata.SetCopper( true );
564  }
565 
566  int radius; // Circle/arc radius.
567 
568  switch( aShape->GetShape() )
569  {
570  case SHAPE_T::SEGMENT:
571  m_plotter->ThickSegment( pos, end, thickness, GetPlotMode(), &gbr_metadata );
572  break;
573 
574  case SHAPE_T::RECT:
575  {
576  std::vector<wxPoint> pts = aShape->GetRectCorners();
577 
578  if( sketch || thickness > 0 )
579  {
580  m_plotter->ThickSegment( pts[0], pts[1], thickness, GetPlotMode(), &gbr_metadata );
581  m_plotter->ThickSegment( pts[1], pts[2], thickness, GetPlotMode(), &gbr_metadata );
582  m_plotter->ThickSegment( pts[2], pts[3], thickness, GetPlotMode(), &gbr_metadata );
583  m_plotter->ThickSegment( pts[3], pts[0], thickness, GetPlotMode(), &gbr_metadata );
584  }
585 
586  if( !sketch && aShape->IsFilled() )
587  {
588  SHAPE_LINE_CHAIN poly;
589 
590  for( const wxPoint& pt : pts )
591  poly.Append( pt );
592 
593  m_plotter->PlotPoly( poly, FILL_TYPE::FILLED_SHAPE, -1, &gbr_metadata );
594  }
595  }
596  break;
597 
598  case SHAPE_T::CIRCLE:
599  radius = KiROUND( GetLineLength( end, pos ) );
600 
601  if( aShape->IsFilled() )
602  m_plotter->FilledCircle( pos, radius * 2 + thickness, GetPlotMode(), &gbr_metadata );
603  else
604  m_plotter->ThickCircle( pos, radius * 2, thickness, GetPlotMode(), &gbr_metadata );
605 
606  break;
607 
608  case SHAPE_T::ARC:
609  {
610  radius = KiROUND( GetLineLength( end, pos ) );
611  double startAngle = ArcTangente( end.y - pos.y, end.x - pos.x );
612  double endAngle = startAngle + aShape->GetAngle();
613 
614  // when startAngle == endAngle ThickArc() doesn't know whether it's 0 deg and 360 deg
615  if( std::abs( aShape->GetAngle() ) == 3600.0 )
616  {
617  m_plotter->ThickCircle( pos, radius * 2, thickness, GetPlotMode(), &gbr_metadata );
618  }
619  else
620  {
621  m_plotter->ThickArc( pos, -endAngle, -startAngle, radius, thickness, GetPlotMode(),
622  &gbr_metadata );
623  }
624  }
625  break;
626 
627  case SHAPE_T::POLY:
628  if( aShape->IsPolyShapeValid() )
629  {
630  std::vector<wxPoint> cornerList;
631  aShape->DupPolyPointsList( cornerList );
632 
633  // We must compute board coordinates from m_PolyList which are relative to the parent
634  // position at orientation 0
635  const FOOTPRINT *parentFootprint = aShape->GetParentFootprint();
636 
637  if( parentFootprint )
638  {
639  for( unsigned ii = 0; ii < cornerList.size(); ++ii )
640  {
641  wxPoint* corner = &cornerList[ii];
642  RotatePoint( corner, parentFootprint->GetOrientation() );
643  *corner += parentFootprint->GetPosition();
644  }
645  }
646 
647  if( sketch || thickness > 0 )
648  {
649  for( size_t i = 1; i < cornerList.size(); i++ )
650  {
651  m_plotter->ThickSegment( cornerList[i - 1], cornerList[i], thickness,
652  GetPlotMode(), &gbr_metadata );
653  }
654 
655  m_plotter->ThickSegment( cornerList.back(), cornerList.front(), thickness,
656  GetPlotMode(), &gbr_metadata );
657 
658  }
659 
660  if( !sketch && aShape->IsFilled() )
661  {
662  // This must be simplified and fractured to prevent overlapping polygons
663  // from generating invalid Gerber files
664 
665  SHAPE_LINE_CHAIN line( cornerList );
666  SHAPE_POLY_SET tmpPoly;
667 
668  line.SetClosed( true );
669  tmpPoly.AddOutline( line );
671 
672  for( int jj = 0; jj < tmpPoly.OutlineCount(); ++jj )
673  {
674  SHAPE_LINE_CHAIN &poly = tmpPoly.Outline( jj );
675  m_plotter->PlotPoly( poly, FILL_TYPE::FILLED_SHAPE, thickness, &gbr_metadata );
676  }
677  }
678  }
679 
680  break;
681 
682  case SHAPE_T::BEZIER:
683  m_plotter->BezierCurve( aShape->GetStart(), aShape->GetBezierC1(),
684  aShape->GetBezierC2(), aShape->GetEnd(), 0, thickness );
685  break;
686 
687  default:
688  wxASSERT_MSG( false, "Unhandled FP_SHAPE shape" );
689  break;
690  }
691 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:750
bool IsPolyShapeValid() const
Definition: pcb_shape.cpp:1294
OUTLINE_MODE GetPlotMode() const
COLOR4D getColor(LAYER_NUM aLayer) const
White color is special because it cannot be seen on a white paper in B&W mode.
Arcs (with rounded ends)
aperture used for etched components.
Definition: gbr_metadata.h:94
bool IsFilled() const
Definition: pcb_shape.h:75
Bezier Curve.
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
int OutlineCount() const
Return the number of vertices in a given outline/hole.
double GetLineLength(const wxPoint &aPointA, const wxPoint &aPointB)
Return the length of a line segment defined by aPointA and aPointB.
Definition: trigo.h:222
polygon (not yet used for tracks, but could be in microwave apps)
virtual void ThickCircle(const wxPoint &pos, int diametre, int width, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:595
const wxPoint & GetEnd() const
Return the ending point of the graphic.
Definition: pcb_shape.h:134
print info associated to a component (TO.C attribute)
SHAPE_T GetShape() const
Definition: pcb_shape.h:110
void SetNetAttribType(int aNetAttribType)
Definition: gbr_metadata.h:219
std::vector< wxPoint > GetRectCorners() const
Definition: pcb_shape.cpp:1048
int GetWidth() const
Definition: pcb_shape.h:97
const wxPoint & GetBezierC2() const
Definition: pcb_shape.h:116
PLOTTER * m_plotter
Definition: pcbplot.h:142
usual segment : line with rounded ends
double GetOrientation() const
Definition: footprint.h:190
virtual void FilledCircle(const wxPoint &pos, int diametre, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:611
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
virtual void BezierCurve(const wxPoint &aStart, const wxPoint &aControl1, const wxPoint &aControl2, const wxPoint &aEnd, int aTolerance, int aLineThickness=USE_DEFAULT_LINE_WIDTH)
Generic fallback: Cubic Bezier curve rendered as a polyline In KiCad the bezier curves have 4 control...
Definition: plotter.cpp:211
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:229
void DupPolyPointsList(std::vector< wxPoint > &aBuffer) const
Duplicate the list of corners in a std::vector<wxPoint>
Definition: pcb_shape.cpp:1277
virtual void ThickSegment(const wxPoint &start, const wxPoint &end, int width, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:529
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
Represent a set of closed polygons.
SHAPE_LINE_CHAIN & Outline(int aIndex)
const wxPoint & GetStart() const
Return the starting point of the graphic.
Definition: pcb_shape.h:124
const wxPoint & GetBezierC1() const
Definition: pcb_shape.h:113
const wxString & GetReference() const
Definition: footprint.h:430
Metadata which can be added in a gerber file as attribute in X2 format.
Definition: gbr_metadata.h:204
void Fracture(POLYGON_MODE aFastMode)
Convert a single outline slitted ("fractured") polygon into a set ouf outlines with holes.
virtual void SetColor(const COLOR4D &color)=0
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new hole to the given outline (default: last) and returns its index.
FOOTPRINT * GetParentFootprint() const
Return the parent footprint or NULL if PCB_SHAPE does not belong to a footprint.
Definition: pcb_shape.cpp:532
Represent a polyline (an zero-thickness chain of connected line segments).
LSET m_layerMask
Definition: pcbplot.h:144
double GetAngle() const
Definition: pcb_shape.h:107
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
wxPoint GetPosition() const override
Definition: footprint.h:186
virtual void ThickArc(const wxPoint &centre, double StAngle, double EndAngle, int rayon, int width, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:553
double ArcTangente(int dy, int dx)
Definition: trigo.cpp:183
segment with non rounded ends
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:166
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113

References SHAPE_POLY_SET::AddOutline(), LSET::AllCuMask(), SHAPE_LINE_CHAIN::Append(), ARC, ArcTangente(), BEZIER, PLOTTER::BezierCurve(), CIRCLE, PCB_SHAPE::DupPolyPointsList(), Edge_Cuts, FILLED_SHAPE, PLOTTER::FilledCircle(), SHAPE_POLY_SET::Fracture(), GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_EDGECUT, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_ETCHEDCMP, GBR_NETLIST_METADATA::GBR_NETINFO_CMP, PCB_SHAPE::GetAngle(), PCB_SHAPE::GetBezierC1(), PCB_SHAPE::GetBezierC2(), getColor(), PCB_SHAPE::GetEnd(), BOARD_ITEM::GetLayer(), GetLineLength(), FOOTPRINT::GetOrientation(), BOARD_ITEM::GetParent(), PCB_SHAPE::GetParentFootprint(), PCB_PLOT_PARAMS::GetPlotMode(), FOOTPRINT::GetPosition(), PCB_SHAPE::GetRectCorners(), FOOTPRINT::GetReference(), PCB_SHAPE::GetShape(), PCB_SHAPE::GetStart(), PCB_SHAPE::GetWidth(), PCB_SHAPE::IsFilled(), PCB_SHAPE::IsPolyShapeValid(), KiROUND(), m_layerMask, m_plotter, SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), PCB_FP_SHAPE_T, PLOTTER::PlotPoly(), SHAPE_POLY_SET::PM_FAST, POLY, RECT, RotatePoint(), SEGMENT, SHAPE_LINE_CHAIN::SetClosed(), PLOTTER::SetColor(), GBR_METADATA::SetNetAttribType(), SKETCH, PLOTTER::ThickArc(), PLOTTER::ThickCircle(), PLOTTER::ThickSegment(), and EDA_ITEM::Type().

Referenced by PLACEFILE_GERBER_WRITER::CreatePlaceFile(), PlotFootprintGraphicItems(), and PlotSolderMaskLayer().

◆ PlotFootprintGraphicItems()

void BRDITEMS_PLOTTER::PlotFootprintGraphicItems ( const FOOTPRINT aFootprint)

Definition at line 525 of file plot_brditems_plotter.cpp.

526 {
527  for( const BOARD_ITEM* item : aFootprint->GraphicalItems() )
528  {
529  const FP_SHAPE* shape = dynamic_cast<const FP_SHAPE*>( item );
530 
531  if( shape && m_layerMask[ shape->GetLayer() ] )
532  PlotFootprintGraphicItem( shape );
533  }
534 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
void PlotFootprintGraphicItem(const FP_SHAPE *aShape)
DRAWINGS & GraphicalItems()
Definition: footprint.h:171
LSET m_layerMask
Definition: pcbplot.h:144
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171

References BOARD_ITEM::GetLayer(), FOOTPRINT::GraphicalItems(), m_layerMask, and PlotFootprintGraphicItem().

Referenced by PlotStandardLayer().

◆ PlotFootprintTextItem()

void BRDITEMS_PLOTTER::PlotFootprintTextItem ( const FP_TEXT aText,
const COLOR4D aColor 
)

Definition at line 375 of file plot_brditems_plotter.cpp.

376 {
377  COLOR4D color = aColor;
378 
379  if( aColor == COLOR4D::WHITE )
380  color = COLOR4D( LIGHTGRAY );
381 
383 
384  // calculate some text parameters :
385  wxSize size = aTextMod->GetTextSize();
386  wxPoint pos = aTextMod->GetTextPos();
387  double orient = aTextMod->GetDrawRotation();
388  int thickness = aTextMod->GetEffectiveTextPenWidth();
389 
390  if( aTextMod->IsMirrored() )
391  size.x = -size.x; // Text is mirrored
392 
393  // Non bold texts thickness is clamped at 1/6 char size by the low level draw function.
394  // but in Pcbnew we do not manage bold texts and thickness up to 1/4 char size
395  // (like bold text) and we manage the thickness.
396  // So we set bold flag to true
397  bool allow_bold = true;
398 
399  GBR_METADATA gbr_metadata;
400 
401  if( IsCopperLayer( aTextMod->GetLayer() ) )
403 
404  gbr_metadata.SetNetAttribType( GBR_NETLIST_METADATA::GBR_NETINFO_CMP );
405  const FOOTPRINT* parent = static_cast<const FOOTPRINT*> ( aTextMod->GetParent() );
406  gbr_metadata.SetCmpReference( parent->GetReference() );
407 
408  m_plotter->SetCurrentLineWidth( thickness );
409 
410  m_plotter->Text( pos, aColor, aTextMod->GetShownText(), orient, size,
411  aTextMod->GetHorizJustify(), aTextMod->GetVertJustify(), thickness,
412  aTextMod->IsItalic(), allow_bold, false, &gbr_metadata );
413 }
print info associated to a component (TO.C attribute)
int color
Definition: DXF_plotter.cpp:57
PLOTTER * m_plotter
Definition: pcbplot.h:142
const wxString & GetReference() const
Definition: footprint.h:430
Metadata which can be added in a gerber file as attribute in X2 format.
Definition: gbr_metadata.h:204
bool IsCopperLayer(LAYER_NUM aLayerId)
Tests whether a layer is a copper layer.
Definition: layer_ids.h:787
virtual void SetColor(const COLOR4D &color)=0
Definition: color4d.h:48
virtual void Text(const wxPoint &aPos, const COLOR4D &aColor, const wxString &aText, double aOrient, const wxSize &aSize, enum EDA_TEXT_HJUSTIFY_T aH_justify, enum EDA_TEXT_VJUSTIFY_T aV_justify, int aWidth, bool aItalic, bool aBold, bool aMultilineAllowed=false, void *aData=nullptr)
Draw text with the plotter.
Definition: gr_text.cpp:219
void SetApertureAttrib(GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB aApertAttribute)
Definition: gbr_metadata.h:209
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103

References color, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_NONCONDUCTOR, GBR_NETLIST_METADATA::GBR_NETINFO_CMP, FP_TEXT::GetDrawRotation(), EDA_TEXT::GetEffectiveTextPenWidth(), EDA_TEXT::GetHorizJustify(), BOARD_ITEM::GetLayer(), BOARD_ITEM::GetParent(), FOOTPRINT::GetReference(), FP_TEXT::GetShownText(), EDA_TEXT::GetTextPos(), EDA_TEXT::GetTextSize(), EDA_TEXT::GetVertJustify(), IsCopperLayer(), EDA_TEXT::IsItalic(), EDA_TEXT::IsMirrored(), LIGHTGRAY, m_plotter, GBR_METADATA::SetApertureAttrib(), PLOTTER::SetColor(), PLOTTER::SetCurrentLineWidth(), PLOTTER::Text(), and WHITE.

Referenced by PlotFootprintTextItems().

◆ PlotFootprintTextItems()

void BRDITEMS_PLOTTER::PlotFootprintTextItems ( const FOOTPRINT aFootprint)

Definition at line 293 of file plot_brditems_plotter.cpp.

294 {
295  const FP_TEXT* textItem = &aFootprint->Reference();
296  LAYER_NUM textLayer = textItem->GetLayer();
297 
298  // Reference and value are specific items, not in graphic items list
299  if( GetPlotReference() && m_layerMask[textLayer]
300  && ( textItem->IsVisible() || GetPlotInvisibleText() ) )
301  {
302  PlotFootprintTextItem( textItem, getColor( textLayer ) );
303  }
304 
305  textItem = &aFootprint->Value();
306  textLayer = textItem->GetLayer();
307 
308  if( GetPlotValue() && m_layerMask[textLayer]
309  && ( textItem->IsVisible() || GetPlotInvisibleText() ) )
310  {
311  PlotFootprintTextItem( textItem, getColor( textLayer ) );
312  }
313 
314  for( const BOARD_ITEM* item : aFootprint->GraphicalItems() )
315  {
316  textItem = dyn_cast<const FP_TEXT*>( item );
317 
318  if( !textItem )
319  continue;
320 
321  if( !textItem->IsVisible() )
322  continue;
323 
324  textLayer = textItem->GetLayer();
325 
326  if( textLayer == Edge_Cuts || textLayer >= PCB_LAYER_ID_COUNT )
327  continue;
328 
329  if( !m_layerMask[textLayer] )
330  continue;
331 
332  if( textItem->GetText() == wxT( "${REFERENCE}" ) && !GetPlotReference() )
333  continue;
334 
335  if( textItem->GetText() == wxT( "${VALUE}" ) && !GetPlotValue() )
336  continue;
337 
338  PlotFootprintTextItem( textItem, getColor( textLayer ) );
339  }
340 }
COLOR4D getColor(LAYER_NUM aLayer) const
White color is special because it cannot be seen on a white paper in B&W mode.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
int LAYER_NUM
This can be replaced with int and removed.
Definition: layer_ids.h:40
FP_TEXT & Value()
read/write accessors:
Definition: footprint.h:466
FP_TEXT & Reference()
Definition: footprint.h:467
virtual bool IsVisible() const
Definition: eda_text.h:186
DRAWINGS & GraphicalItems()
Definition: footprint.h:171
bool GetPlotValue() const
LSET m_layerMask
Definition: pcbplot.h:144
bool GetPlotInvisibleText() const
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171
bool GetPlotReference() const
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:133
void PlotFootprintTextItem(const FP_TEXT *aText, const COLOR4D &aColor)

References Edge_Cuts, getColor(), BOARD_ITEM::GetLayer(), PCB_PLOT_PARAMS::GetPlotInvisibleText(), PCB_PLOT_PARAMS::GetPlotReference(), PCB_PLOT_PARAMS::GetPlotValue(), EDA_TEXT::GetText(), FOOTPRINT::GraphicalItems(), EDA_TEXT::IsVisible(), m_layerMask, PCB_LAYER_ID_COUNT, PlotFootprintTextItem(), FOOTPRINT::Reference(), and FOOTPRINT::Value().

Referenced by PlotSolderMaskLayer(), and PlotStandardLayer().

◆ plotOneDrillMark()

void BRDITEMS_PLOTTER::plotOneDrillMark ( PAD_DRILL_SHAPE_T  aDrillShape,
const wxPoint &  aDrillPos,
const wxSize &  aDrillSize,
const wxSize &  aPadSize,
double  aOrientation,
int  aSmallDrill 
)
private

Helper function to plot a single drill mark.

It compensate and clamp the drill mark size depending on the current plot options.

Definition at line 993 of file plot_brditems_plotter.cpp.

996 {
997  wxSize drillSize = aDrillSize;
998 
999  // Small drill marks have no significance when applied to slots
1000  if( aSmallDrill && aDrillShape == PAD_DRILL_SHAPE_CIRCLE )
1001  drillSize.x = std::min( aSmallDrill, drillSize.x );
1002 
1003  // Round holes only have x diameter, slots have both
1004  drillSize.x -= getFineWidthAdj();
1005  drillSize.x = Clamp( 1, drillSize.x, aPadSize.x - 1 );
1006 
1007  if( aDrillShape == PAD_DRILL_SHAPE_OBLONG )
1008  {
1009  drillSize.y -= getFineWidthAdj();
1010  drillSize.y = Clamp( 1, drillSize.y, aPadSize.y - 1 );
1011  m_plotter->FlashPadOval( aDrillPos, drillSize, aOrientation, GetPlotMode(), nullptr );
1012  }
1013  else
1014  {
1015  m_plotter->FlashPadCircle( aDrillPos, drillSize.x, GetPlotMode(), nullptr );
1016  }
1017 }
OUTLINE_MODE GetPlotMode() const
virtual void FlashPadOval(const wxPoint &aPadPos, const wxSize &aSize, double aPadOrient, OUTLINE_MODE aTraceMode, void *aData)=0
PLOTTER * m_plotter
Definition: pcbplot.h:142
int getFineWidthAdj() const
Definition: pcbplot.h:75
const T & Clamp(const T &lower, const T &value, const T &upper)
Limit value within the range lower <= value <= upper.
Definition: util.h:52
virtual void FlashPadCircle(const wxPoint &aPadPos, int aDiameter, OUTLINE_MODE aTraceMode, void *aData)=0

References Clamp(), PLOTTER::FlashPadCircle(), PLOTTER::FlashPadOval(), getFineWidthAdj(), PCB_PLOT_PARAMS::GetPlotMode(), m_plotter, PAD_DRILL_SHAPE_CIRCLE, and PAD_DRILL_SHAPE_OBLONG.

Referenced by PlotDrillMarks().

◆ PlotPad()

void BRDITEMS_PLOTTER::PlotPad ( const PAD aPad,
const COLOR4D aColor,
OUTLINE_MODE  aPlotMode 
)

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.

Definition at line 81 of file plot_brditems_plotter.cpp.

82 {
83  wxPoint shape_pos = aPad->ShapePos();
84  GBR_METADATA gbr_metadata;
85 
86  bool plotOnCopperLayer = ( m_layerMask & LSET::AllCuMask() ).any();
87  bool plotOnExternalCopperLayer = ( m_layerMask & LSET::ExternalCuMask() ).any();
88 
89  // Pad not on the solder mask layer cannot be soldered.
90  // therefore it can have a specific aperture attribute.
91  // Not yet in use.
92  // bool isPadOnBoardTechLayers = ( aPad->GetLayerSet() & LSET::AllBoardTechMask() ).any();
93 
94  gbr_metadata.SetCmpReference( aPad->GetParent()->GetReference() );
95 
96  if( plotOnCopperLayer )
97  {
98  gbr_metadata.SetNetAttribType( GBR_NETINFO_ALL );
99  gbr_metadata.SetCopper( true );
100 
101  // Gives a default attribute, for instance for pads used as tracks in net ties:
102  // Connector pads and SMD pads are on external layers
103  // if on internal layers, they are certainly used as net tie
104  // and are similar to tracks: just conductor items
106 
107  const bool useUTF8 = false;
108  const bool useQuoting = false;
109  gbr_metadata.SetPadName( aPad->GetNumber(), useUTF8, useQuoting );
110 
111  if( !aPad->GetNumber().IsEmpty() )
112  gbr_metadata.SetPadPinFunction( aPad->GetPinFunction(), useUTF8, useQuoting );
113 
114  gbr_metadata.SetNetName( aPad->GetNetname() );
115 
116  // Some pads are mechanical pads ( through hole or smd )
117  // when this is the case, they have no pad name and/or are not plated.
118  // In this case gerber files have slightly different attributes.
119  if( aPad->GetAttribute() == PAD_ATTRIB::NPTH || aPad->GetNumber().IsEmpty() )
120  gbr_metadata.m_NetlistMetadata.m_NotInNet = true;
121 
122  if( !plotOnExternalCopperLayer )
123  {
124  // the .P object attribute (GBR_NETLIST_METADATA::GBR_NETINFO_PAD)
125  // is used on outer layers, unless the component is embedded
126  // or a "etched" component (fp only drawn, not a physical component)
127  // Currently, Pcbnew does not handle embedded component, so we disable the .P
128  // attribute on internal layers
129  // Note the Gerber doc is not really clear about through holes pads about the .P
132 
133  }
134 
135  // Some attributes are reserved to the external copper layers:
136  // GBR_APERTURE_ATTRIB_CONNECTORPAD and GBR_APERTURE_ATTRIB_SMDPAD_CUDEF
137  // for instance.
138  // Pad with type PAD_ATTRIB::CONN or PAD_ATTRIB::SMD that is not on outer layer
139  // has its aperture attribute set to GBR_APERTURE_ATTRIB_CONDUCTOR
140  switch( aPad->GetAttribute() )
141  {
142  case PAD_ATTRIB::NPTH: // Mechanical pad through hole
144  break;
145 
146  case PAD_ATTRIB::PTH : // Pad through hole, a hole is also expected
147  gbr_metadata.SetApertureAttrib(
149  break;
150 
151  case PAD_ATTRIB::CONN: // Connector pads, no solder paste but with solder mask.
152  if( plotOnExternalCopperLayer )
153  gbr_metadata.SetApertureAttrib(
155  break;
156 
157  case PAD_ATTRIB::SMD: // SMD pads (on external copper layer only)
158  // with solder paste and mask
159  if( plotOnExternalCopperLayer )
160  gbr_metadata.SetApertureAttrib(
162  break;
163  }
164 
165  // Fabrication properties can have specific GBR_APERTURE_METADATA options
166  // that replace previous aperture attribute:
167  switch( aPad->GetProperty() )
168  {
169  case PAD_PROP::BGA: // Only applicable to outer layers
170  if( plotOnExternalCopperLayer )
171  gbr_metadata.SetApertureAttrib(
173  break;
174 
176  gbr_metadata.SetApertureAttrib(
178  break;
179 
181  gbr_metadata.SetApertureAttrib(
183  break;
184 
185  case PAD_PROP::TESTPOINT: // Only applicable to outer layers
186  if( plotOnExternalCopperLayer )
187  gbr_metadata.SetApertureAttrib(
189  break;
190 
191  case PAD_PROP::HEATSINK:
192  gbr_metadata.SetApertureAttrib(
194  break;
195 
197  gbr_metadata.SetApertureAttrib(
199  break;
200 
201  case PAD_PROP::NONE:
202  break;
203  }
204 
205  // Ensure NPTH pads have *always* the GBR_APERTURE_ATTRIB_WASHERPAD attribute
206  if( aPad->GetAttribute() == PAD_ATTRIB::NPTH )
208  }
209  else
210  {
212  }
213 
214  // Set plot color (change WHITE to LIGHTGRAY because
215  // the white items are not seen on a white paper or screen
216  m_plotter->SetColor( aColor != WHITE ? aColor : LIGHTGRAY);
217 
218  if( aPlotMode == SKETCH )
220 
221  switch( aPad->GetShape() )
222  {
223  case PAD_SHAPE::CIRCLE:
224  m_plotter->FlashPadCircle( shape_pos, aPad->GetSize().x, aPlotMode, &gbr_metadata );
225  break;
226 
227  case PAD_SHAPE::OVAL:
228  m_plotter->FlashPadOval( shape_pos, aPad->GetSize(), aPad->GetOrientation(), aPlotMode,
229  &gbr_metadata );
230  break;
231 
232  case PAD_SHAPE::RECT:
233  m_plotter->FlashPadRect( shape_pos, aPad->GetSize(), aPad->GetOrientation(), aPlotMode,
234  &gbr_metadata );
235  break;
236 
238  m_plotter->FlashPadRoundRect( shape_pos, aPad->GetSize(), aPad->GetRoundRectCornerRadius(),
239  aPad->GetOrientation(), aPlotMode, &gbr_metadata );
240  break;
241 
243  {
244  // Build the pad polygon in coordinates relative to the pad
245  // (i.e. for a pad at pos 0,0, rot 0.0). Needed to use aperture macros,
246  // to be able to create a pattern common to all trapezoid pads having the same shape
247  wxPoint coord[4];
248 
249  // Order is lower left, lower right, upper right, upper left.
250  wxSize half_size = aPad->GetSize()/2;
251  wxSize trap_delta = aPad->GetDelta()/2;
252 
253  coord[0] = wxPoint( -half_size.x - trap_delta.y, half_size.y + trap_delta.x );
254  coord[1] = wxPoint( half_size.x + trap_delta.y, half_size.y - trap_delta.x );
255  coord[2] = wxPoint( half_size.x - trap_delta.y, -half_size.y + trap_delta.x );
256  coord[3] = wxPoint( -half_size.x + trap_delta.y, -half_size.y - trap_delta.x );
257 
258  m_plotter->FlashPadTrapez( shape_pos, coord, aPad->GetOrientation(), aPlotMode,
259  &gbr_metadata );
260  }
261  break;
262 
265  {
266  static_cast<GERBER_PLOTTER*>( m_plotter )->FlashPadChamferRoundRect(
267  shape_pos, aPad->GetSize(),
268  aPad->GetRoundRectCornerRadius(),
269  aPad->GetChamferRectRatio(),
270  aPad->GetChamferPositions(),
271  aPad->GetOrientation(), aPlotMode, &gbr_metadata );
272  break;
273  }
274 
276 
277  default:
278  case PAD_SHAPE::CUSTOM:
279  {
280  const std::shared_ptr<SHAPE_POLY_SET>& polygons = aPad->GetEffectivePolygon();
281 
282  if( polygons->OutlineCount() )
283  {
284  m_plotter->FlashPadCustom( shape_pos, aPad->GetSize(), aPad->GetOrientation(),
285  polygons.get(), aPlotMode, &gbr_metadata );
286  }
287  }
288  break;
289  }
290 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:750
virtual void FlashPadRoundRect(const wxPoint &aPadPos, const wxSize &aSize, int aCornerRadius, double aOrient, OUTLINE_MODE aTraceMode, void *aData)=0
aperture used for castellated pads in copper layer files.
Definition: gbr_metadata.h:131
print info associated to a component (TO.C attribute)
PAD_PROP GetProperty() const
Definition: pad.h:374
void SetNetAttribType(int aNetAttribType)
Definition: gbr_metadata.h:219
Like smd, does not appear on the solder paste layer (default)
Smd pad, appears on the solder paste layer (default)
virtual void FlashPadOval(const wxPoint &aPadPos, const wxSize &aSize, double aPadOrient, OUTLINE_MODE aTraceMode, void *aData)=0
PLOTTER * m_plotter
Definition: pcbplot.h:142
aperture used for SMD pad. Excluded BGA pads which have their own type.
Definition: gbr_metadata.h:105
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
aperture used for castellated pads in drill files.
Definition: gbr_metadata.h:134
a test point pad
Plated through hole pad.
virtual void FlashPadTrapez(const wxPoint &aPadPos, const wxPoint *aCorners, double aPadOrient, OUTLINE_MODE aTraceMode, void *aData)=0
Flash a trapezoidal pad.
void SetPadPinFunction(const wxString &aPadPinFunction, bool aUseUTF8, bool aEscapeString)
Definition: gbr_metadata.h:236
a pad used as heat sink, usually in SMD footprints
aperture used for edge connector pad (outer layers).
Definition: gbr_metadata.h:117
wxPoint ShapePos() const
Definition: pad.cpp:673
like PAD_PTH, but not plated
aperture used for fiducial pad (outer layers), at footprint level.
Definition: gbr_metadata.h:125
virtual void FlashPadRect(const wxPoint &aPadPos, const wxSize &aSize, double aPadOrient, OUTLINE_MODE aTraceMode, void *aData)=0
double GetOrientation() const
Return the rotation angle of the pad in a variety of units (the basic call returns tenths of degrees)...
Definition: pad.h:349
void SetPadName(const wxString &aPadname, bool aUseUTF8=false, bool aEscapeString=false)
Definition: gbr_metadata.h:231
virtual PLOT_FORMAT GetPlotterType() const =0
Returns the effective plot engine in use.
const wxSize & GetSize() const
Definition: pad.h:233
Smd pad, used in BGA footprints.
static LSET ExternalCuMask()
Return a mask holding the Front and Bottom layers.
Definition: lset.cpp:780
const wxString & GetNumber() const
Definition: pad.h:129
PAD_SHAPE GetShape() const
Definition: pad.h:170
const wxString & GetReference() const
Definition: footprint.h:430
a fiducial (usually a smd) local to the parent footprint
aperture used for mechanical pads (NPTH).
Definition: gbr_metadata.h:121
Metadata which can be added in a gerber file as attribute in X2 format.
Definition: gbr_metadata.h:204
virtual void SetColor(const COLOR4D &color)=0
aperture used for test point pad (outer layers).
Definition: gbr_metadata.h:122
int GetRoundRectCornerRadius() const
Definition: pad.cpp:257
Definition: color4d.h:48
const wxSize & GetDelta() const
Definition: pad.h:240
FOOTPRINT * GetParent() const
Definition: pad.cpp:1354
void SetNetName(const wxString &aNetname)
Definition: gbr_metadata.h:229
a fiducial (usually a smd) for the full board
double GetChamferRectRatio() const
Definition: pad.h:532
no special fabrication property
PAD_ATTRIB GetAttribute() const
Definition: pad.h:371
LSET m_layerMask
Definition: pcbplot.h:144
aperture used for heat sink pad (typically for SMDs).
Definition: gbr_metadata.h:128
const std::shared_ptr< SHAPE_POLY_SET > & GetEffectivePolygon() const
Definition: pad.cpp:288
aperture used for BGA pads with a solder mask defined by the copper shape.
Definition: gbr_metadata.h:111
int GetSketchPadLineWidth() const
virtual void FlashPadCustom(const wxPoint &aPadPos, const wxSize &aSize, double aPadOrient, SHAPE_POLY_SET *aPolygons, OUTLINE_MODE aTraceMode, void *aData)=0
int GetChamferPositions() const
Definition: pad.h:542
void SetApertureAttrib(GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB aApertAttribute)
Definition: gbr_metadata.h:209
a pad with a castellated through hole
bool m_NotInNet
true if a pad of a footprint cannot be connected (for instance a mechanical NPTH, ot a not named pad)...
GBR_NETLIST_METADATA m_NetlistMetadata
An item to handle object attribute.
Definition: gbr_metadata.h:262
void SetCopper(bool aValue)
Definition: gbr_metadata.h:252
print info associated to a net (TO.N attribute)
const wxString & GetPinFunction() const
Definition: pad.h:140
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.
void SetCmpReference(const wxString &aComponentRef)
Definition: gbr_metadata.h:241
virtual void FlashPadCircle(const wxPoint &aPadPos, int aDiameter, OUTLINE_MODE aTraceMode, void *aData)=0
#define GBR_NETINFO_ALL

References LSET::AllCuMask(), BGA, CASTELLATED, CHAMFERED_RECT, CIRCLE, CONN, CUSTOM, LSET::ExternalCuMask(), FIDUCIAL_GLBL, FIDUCIAL_LOCAL, PLOTTER::FlashPadCircle(), PLOTTER::FlashPadCustom(), PLOTTER::FlashPadOval(), PLOTTER::FlashPadRect(), PLOTTER::FlashPadRoundRect(), PLOTTER::FlashPadTrapez(), GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_BGAPAD_CUDEF, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_CASTELLATEDPAD, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_COMPONENTPAD, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_CONDUCTOR, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_CONNECTORPAD, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_FIDUCIAL_GLBL, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_FIDUCIAL_LOCAL, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_HEATSINKPAD, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_SMDPAD_CUDEF, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_TESTPOINT, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_WASHERPAD, GBR_NETINFO_ALL, GBR_NETLIST_METADATA::GBR_NETINFO_CMP, GBR_NETLIST_METADATA::GBR_NETINFO_NET, GERBER, PAD::GetAttribute(), PAD::GetChamferPositions(), PAD::GetChamferRectRatio(), PAD::GetDelta(), PAD::GetEffectivePolygon(), BOARD_CONNECTED_ITEM::GetNetname(), PAD::GetNumber(), PAD::GetOrientation(), PAD::GetParent(), PAD::GetPinFunction(), PLOTTER::GetPlotterType(), PAD::GetProperty(), FOOTPRINT::GetReference(), PAD::GetRoundRectCornerRadius(), PAD::GetShape(), PAD::GetSize(), PCB_PLOT_PARAMS::GetSketchPadLineWidth(), HEATSINK, KI_FALLTHROUGH, LIGHTGRAY, m_layerMask, GBR_METADATA::m_NetlistMetadata, GBR_NETLIST_METADATA::m_NotInNet, m_plotter, NONE, NPTH, OVAL, PTH, RECT, ROUNDRECT, GBR_METADATA::SetApertureAttrib(), GBR_METADATA::SetCmpReference(), PLOTTER::SetColor(), GBR_METADATA::SetCopper(), PLOTTER::SetCurrentLineWidth(), GBR_METADATA::SetNetAttribType(), GBR_METADATA::SetNetName(), GBR_METADATA::SetPadName(), GBR_METADATA::SetPadPinFunction(), PAD::ShapePos(), SKETCH, SMD, TESTPOINT, TRAPEZOID, and WHITE.

Referenced by PlotStandardLayer().

◆ PlotPcbShape()

void BRDITEMS_PLOTTER::PlotPcbShape ( const PCB_SHAPE aShape)

Definition at line 863 of file plot_brditems_plotter.cpp.

864 {
865  if( !m_layerMask[aShape->GetLayer()] )
866  return;
867 
868  int radius = 0;
869  double StAngle = 0, EndAngle = 0;
870  bool sketch = GetPlotMode() == SKETCH;
871  int thickness = aShape->GetWidth();
872 
873  m_plotter->SetColor( getColor( aShape->GetLayer() ) );
874 
875  wxPoint start( aShape->GetStart() );
876  wxPoint end( aShape->GetEnd() );
877 
878  GBR_METADATA gbr_metadata;
879 
880  if( aShape->GetLayer() == Edge_Cuts )
882 
883  if( IsCopperLayer( aShape->GetLayer() ) )
884  // Graphic items (PCB_SHAPE, TEXT) having no net have the NonConductor attribute
885  // Graphic items having a net have the Conductor attribute, but are not (yet?)
886  // supported in Pcbnew
887  gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_NONCONDUCTOR );
888 
889  switch( aShape->GetShape() )
890  {
891  case SHAPE_T::SEGMENT:
892  m_plotter->ThickSegment( start, end, thickness, GetPlotMode(), &gbr_metadata );
893  break;
894 
895  case SHAPE_T::CIRCLE:
896  radius = KiROUND( GetLineLength( end, start ) );
897 
898  if( aShape->IsFilled() )
899  m_plotter->FilledCircle( start, radius * 2 + thickness, GetPlotMode(), &gbr_metadata );
900  else
901  m_plotter->ThickCircle( start, radius * 2, thickness, GetPlotMode(), &gbr_metadata );
902 
903  break;
904 
905  case SHAPE_T::ARC:
906  radius = KiROUND( GetLineLength( end, start ) );
907  StAngle = ArcTangente( end.y - start.y, end.x - start.x );
908  EndAngle = StAngle + aShape->GetAngle();
909 
910  // when startAngle == endAngle ThickArc() doesn't know whether it's 0 deg and 360 deg
911  if( std::abs( aShape->GetAngle() ) == 3600.0 )
912  {
913  m_plotter->ThickCircle( start, radius * 2, thickness, GetPlotMode(), &gbr_metadata );
914  }
915  else
916  {
917  m_plotter->ThickArc( start, -EndAngle, -StAngle, radius, thickness, GetPlotMode(),
918  &gbr_metadata );
919  }
920  break;
921 
922  case SHAPE_T::BEZIER:
923  m_plotter->BezierCurve( aShape->GetStart(), aShape->GetBezierC1(),
924  aShape->GetBezierC2(), aShape->GetEnd(), 0, thickness );
925  break;
926 
927  case SHAPE_T::POLY:
928  if( aShape->IsPolyShapeValid() )
929  {
930  if( sketch || thickness > 0 )
931  {
932  for( auto it = aShape->GetPolyShape().CIterateSegments( 0 ); it; it++ )
933  {
934  auto seg = it.Get();
935  m_plotter->ThickSegment( wxPoint( seg.A ), wxPoint( seg.B ),
936  thickness, GetPlotMode(), &gbr_metadata );
937  }
938  }
939 
940  if( !sketch && aShape->IsFilled() )
941  {
942  m_plotter->SetCurrentLineWidth( thickness, &gbr_metadata );
943 
944  // Draw the polygon: only one polygon is expected
945  // However we provide a multi polygon shape drawing
946  // ( for the future or to show a non expected shape )
947  // This must be simplified and fractured to prevent overlapping polygons
948  // from generating invalid Gerber files
949  auto tmpPoly = SHAPE_POLY_SET( aShape->GetPolyShape() );
951 
952  for( int jj = 0; jj < tmpPoly.OutlineCount(); ++jj )
953  {
954  SHAPE_LINE_CHAIN& poly = tmpPoly.Outline( jj );
955  m_plotter->PlotPoly( poly, FILL_TYPE::FILLED_SHAPE, thickness, &gbr_metadata );
956  }
957  }
958  }
959  break;
960 
961  case SHAPE_T::RECT:
962  {
963  std::vector<wxPoint> pts = aShape->GetRectCorners();
964 
965  if( sketch || thickness > 0 )
966  {
967  m_plotter->ThickSegment( pts[0], pts[1], thickness, GetPlotMode(), &gbr_metadata );
968  m_plotter->ThickSegment( pts[1], pts[2], thickness, GetPlotMode(), &gbr_metadata );
969  m_plotter->ThickSegment( pts[2], pts[3], thickness, GetPlotMode(), &gbr_metadata );
970  m_plotter->ThickSegment( pts[3], pts[0], thickness, GetPlotMode(), &gbr_metadata );
971  }
972 
973  if( !sketch && aShape->IsFilled() )
974  {
975  SHAPE_LINE_CHAIN poly;
976 
977  for( const wxPoint& pt : pts )
978  poly.Append( pt );
979 
980  m_plotter->PlotPoly( poly, FILL_TYPE::FILLED_SHAPE, -1, &gbr_metadata );
981  }
982 
983  break;
984  }
985 
986  default:
987  wxASSERT_MSG( false, "Unhandled PCB_SHAPE shape" );
988  m_plotter->ThickSegment( start, end, thickness, GetPlotMode(), &gbr_metadata );
989  }
990 }
bool IsPolyShapeValid() const
Definition: pcb_shape.cpp:1294
OUTLINE_MODE GetPlotMode() const
COLOR4D getColor(LAYER_NUM aLayer) const
White color is special because it cannot be seen on a white paper in B&W mode.
Arcs (with rounded ends)
bool IsFilled() const
Definition: pcb_shape.h:75
Bezier Curve.
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
double GetLineLength(const wxPoint &aPointA, const wxPoint &aPointB)
Return the length of a line segment defined by aPointA and aPointB.
Definition: trigo.h:222
polygon (not yet used for tracks, but could be in microwave apps)
virtual void ThickCircle(const wxPoint &pos, int diametre, int width, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:595
SHAPE_POLY_SET & GetPolyShape()
Definition: pcb_shape.h:240
const wxPoint & GetEnd() const
Return the ending point of the graphic.
Definition: pcb_shape.h:134
SHAPE_T GetShape() const
Definition: pcb_shape.h:110
std::vector< wxPoint > GetRectCorners() const
Definition: pcb_shape.cpp:1048
int GetWidth() const
Definition: pcb_shape.h:97
const wxPoint & GetBezierC2() const
Definition: pcb_shape.h:116
PLOTTER * m_plotter
Definition: pcbplot.h:142
usual segment : line with rounded ends
virtual void FilledCircle(const wxPoint &pos, int diametre, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:611
virtual void BezierCurve(const wxPoint &aStart, const wxPoint &aControl1, const wxPoint &aControl2, const wxPoint &aEnd, int aTolerance, int aLineThickness=USE_DEFAULT_LINE_WIDTH)
Generic fallback: Cubic Bezier curve rendered as a polyline In KiCad the bezier curves have 4 control...
Definition: plotter.cpp:211
virtual void ThickSegment(const wxPoint &start, const wxPoint &end, int width, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:529
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
Represent a set of closed polygons.
const wxPoint & GetStart() const
Return the starting point of the graphic.
Definition: pcb_shape.h:124
const wxPoint & GetBezierC1() const
Definition: pcb_shape.h:113
Metadata which can be added in a gerber file as attribute in X2 format.
Definition: gbr_metadata.h:204
void Fracture(POLYGON_MODE aFastMode)
Convert a single outline slitted ("fractured") polygon into a set ouf outlines with holes.
bool IsCopperLayer(LAYER_NUM aLayerId)
Tests whether a layer is a copper layer.
Definition: layer_ids.h:787
virtual void SetColor(const COLOR4D &color)=0
Represent a polyline (an zero-thickness chain of connected line segments).
LSET m_layerMask
Definition: pcbplot.h:144
double GetAngle() const
Definition: pcb_shape.h:107
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
virtual void ThickArc(const wxPoint &centre, double StAngle, double EndAngle, int rayon, int width, OUTLINE_MODE tracemode, void *aData)
Definition: plotter.cpp:553
void SetApertureAttrib(GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB aApertAttribute)
Definition: gbr_metadata.h:209
CONST_SEGMENT_ITERATOR CIterateSegments(int aFirst, int aLast, bool aIterateHoles=false) const
Return an iterator object, for iterating aPolygonIdx-th polygon edges.
double ArcTangente(int dy, int dx)
Definition: trigo.cpp:183
segment with non rounded ends
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.

References SHAPE_LINE_CHAIN::Append(), ARC, ArcTangente(), BEZIER, PLOTTER::BezierCurve(), CIRCLE, SHAPE_POLY_SET::CIterateSegments(), Edge_Cuts, FILLED_SHAPE, PLOTTER::FilledCircle(), SHAPE_POLY_SET::Fracture(), GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_EDGECUT, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_NONCONDUCTOR, PCB_SHAPE::GetAngle(), PCB_SHAPE::GetBezierC1(), PCB_SHAPE::GetBezierC2(), getColor(), PCB_SHAPE::GetEnd(), BOARD_ITEM::GetLayer(), GetLineLength(), PCB_PLOT_PARAMS::GetPlotMode(), PCB_SHAPE::GetPolyShape(), PCB_SHAPE::GetRectCorners(), PCB_SHAPE::GetShape(), PCB_SHAPE::GetStart(), PCB_SHAPE::GetWidth(), IsCopperLayer(), PCB_SHAPE::IsFilled(), PCB_SHAPE::IsPolyShapeValid(), KiROUND(), m_layerMask, m_plotter, PLOTTER::PlotPoly(), SHAPE_POLY_SET::PM_FAST, POLY, RECT, SEGMENT, GBR_METADATA::SetApertureAttrib(), PLOTTER::SetColor(), PLOTTER::SetCurrentLineWidth(), SKETCH, PLOTTER::ThickArc(), PLOTTER::ThickCircle(), and PLOTTER::ThickSegment().

Referenced by GENDRILL_WRITER_BASE::genDrillMapFile(), PlotBoardGraphicItems(), PlotDimension(), and PlotPcbTarget().

◆ PlotPcbTarget()

void BRDITEMS_PLOTTER::PlotPcbTarget ( const PCB_TARGET aMire)

Definition at line 471 of file plot_brditems_plotter.cpp.

472 {
473  int dx1, dx2, dy1, dy2, radius;
474 
475  if( !m_layerMask[aMire->GetLayer()] )
476  return;
477 
478  m_plotter->SetColor( getColor( aMire->GetLayer() ) );
479 
480  PCB_SHAPE draw;
481 
482  draw.SetShape( SHAPE_T::CIRCLE );
483  draw.SetFilled( false );
484  draw.SetWidth( aMire->GetWidth() );
485  draw.SetLayer( aMire->GetLayer() );
486  draw.SetStart( aMire->GetPosition() );
487  radius = aMire->GetSize() / 3;
488 
489  if( aMire->GetShape() ) // shape X
490  radius = aMire->GetSize() / 2;
491 
492  // Draw the circle
493  draw.SetEnd( wxPoint( draw.GetStart().x + radius, draw.GetStart().y ) );
494 
495  PlotPcbShape( &draw );
496 
497  draw.SetShape( SHAPE_T::SEGMENT );
498 
499  radius = aMire->GetSize() / 2;
500  dx1 = radius;
501  dy1 = 0;
502  dx2 = 0;
503  dy2 = radius;
504 
505  if( aMire->GetShape() ) // Shape X
506  {
507  dx1 = dy1 = radius;
508  dx2 = dx1;
509  dy2 = -dy1;
510  }
511 
512  wxPoint mirePos( aMire->GetPosition() );
513 
514  // Draw the X or + shape:
515  draw.SetStart( wxPoint( mirePos.x - dx1, mirePos.y - dy1 ) );
516  draw.SetEnd( wxPoint( mirePos.x + dx1, mirePos.y + dy1 ) );
517  PlotPcbShape( &draw );
518 
519  draw.SetStart( wxPoint( mirePos.x - dx2, mirePos.y - dy2 ) );
520  draw.SetEnd( wxPoint( mirePos.x + dx2, mirePos.y + dy2 ) );
521  PlotPcbShape( &draw );
522 }
COLOR4D getColor(LAYER_NUM aLayer) const
White color is special because it cannot be seen on a white paper in B&W mode.
void SetShape(SHAPE_T aShape)
Definition: pcb_shape.h:109
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:192
int GetSize() const
Definition: pcb_target.h:62
void SetFilled(bool aFlag)
Definition: pcb_shape.h:73
PLOTTER * m_plotter
Definition: pcbplot.h:142
usual segment : line with rounded ends
wxPoint GetPosition() const override
Definition: pcb_target.h:56
int GetWidth() const
Definition: pcb_target.h:65
const wxPoint & GetStart() const
Return the starting point of the graphic.
Definition: pcb_shape.h:124
virtual void SetColor(const COLOR4D &color)=0
void SetStart(const wxPoint &aStart)
Definition: pcb_shape.h:127
void PlotPcbShape(const PCB_SHAPE *aShape)
LSET m_layerMask
Definition: pcbplot.h:144
int GetShape() const
Definition: pcb_target.h:59
void SetWidth(int aWidth)
Definition: pcb_shape.h:96
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171
void SetEnd(const wxPoint &aEnd)
Definition: pcb_shape.h:137

References CIRCLE, getColor(), BOARD_ITEM::GetLayer(), PCB_TARGET::GetPosition(), PCB_TARGET::GetShape(), PCB_TARGET::GetSize(), PCB_SHAPE::GetStart(), PCB_TARGET::GetWidth(), m_layerMask, m_plotter, PlotPcbShape(), SEGMENT, PLOTTER::SetColor(), PCB_SHAPE::SetEnd(), PCB_SHAPE::SetFilled(), BOARD_ITEM::SetLayer(), PCB_SHAPE::SetShape(), PCB_SHAPE::SetStart(), and PCB_SHAPE::SetWidth().

Referenced by PlotBoardGraphicItems().

◆ PlotPcbText()

void BRDITEMS_PLOTTER::PlotPcbText ( const PCB_TEXT aText)

Definition at line 694 of file plot_brditems_plotter.cpp.

695 {
696  wxString shownText( aText->GetShownText() );
697 
698  if( shownText.IsEmpty() )
699  return;
700 
701  if( !m_layerMask[aText->GetLayer()] )
702  return;
703 
704  GBR_METADATA gbr_metadata;
705 
706  if( IsCopperLayer( aText->GetLayer() ) )
708 
709  COLOR4D color = getColor( aText->GetLayer() );
711 
712  wxSize size = aText->GetTextSize();
713  wxPoint pos = aText->GetTextPos();
714  double orient = aText->GetTextAngle();
715  int thickness = aText->GetEffectiveTextPenWidth();
716 
717  if( aText->IsMirrored() )
718  size.x = -size.x;
719 
720  // Non bold texts thickness is clamped at 1/6 char size by the low level draw function.
721  // but in Pcbnew we do not manage bold texts and thickness up to 1/4 char size
722  // (like bold text) and we manage the thickness.
723  // So we set bold flag to true
724  bool allow_bold = true;
725 
726  m_plotter->SetCurrentLineWidth( thickness );
727 
728  if( aText->IsMultilineAllowed() )
729  {
730  std::vector<wxPoint> positions;
731  wxArrayString strings_list;
732  wxStringSplit( shownText, strings_list, '\n' );
733  positions.reserve( strings_list.Count() );
734 
735  aText->GetLinePositions( positions, strings_list.Count() );
736 
737  for( unsigned ii = 0; ii < strings_list.Count(); ii++ )
738  {
739  wxString& txt = strings_list.Item( ii );
740  m_plotter->Text( positions[ii], color, txt, orient, size, aText->GetHorizJustify(),
741  aText->GetVertJustify(), thickness, aText->IsItalic(),
742  allow_bold, false, &gbr_metadata );
743  }
744  }
745  else
746  {
747  m_plotter->Text( pos, color, shownText, orient, size, aText->GetHorizJustify(),
748  aText->GetVertJustify(), thickness, aText->IsItalic(), allow_bold,
749  false, &gbr_metadata );
750  }
751 }
COLOR4D getColor(LAYER_NUM aLayer) const
White color is special because it cannot be seen on a white paper in B&W mode.
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:199
bool IsMirrored() const
Definition: eda_text.h:189
int color
Definition: DXF_plotter.cpp:57
PLOTTER * m_plotter
Definition: pcbplot.h:142
double GetTextAngle() const
Definition: eda_text.h:174
int GetEffectiveTextPenWidth(int aDefaultWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultWidth.
Definition: eda_text.cpp:149
bool IsItalic() const
Definition: eda_text.h:180
wxString GetShownText(int aDepth=0) const override
Return the string actually shown after processing of the base text.
Definition: pcb_text.cpp:56
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:198
const wxSize & GetTextSize() const
Definition: eda_text.h:238
Metadata which can be added in a gerber file as attribute in X2 format.
Definition: gbr_metadata.h:204
bool IsCopperLayer(LAYER_NUM aLayerId)
Tests whether a layer is a copper layer.
Definition: layer_ids.h:787
bool IsMultilineAllowed() const
Definition: eda_text.h:196
virtual void SetColor(const COLOR4D &color)=0
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
LSET m_layerMask
Definition: pcbplot.h:144
void GetLinePositions(std::vector< wxPoint > &aPositions, int aLineCount) const
Populate aPositions with the position of each line of a multiline text, according to the vertical jus...
Definition: eda_text.cpp:430
const wxPoint & GetTextPos() const
Definition: eda_text.h:247
virtual void Text(const wxPoint &aPos, const COLOR4D &aColor, const wxString &aText, double aOrient, const wxSize &aSize, enum EDA_TEXT_HJUSTIFY_T aH_justify, enum EDA_TEXT_VJUSTIFY_T aV_justify, int aWidth, bool aItalic, bool aBold, bool aMultilineAllowed=false, void *aData=nullptr)
Draw text with the plotter.
Definition: gr_text.cpp:219
void SetApertureAttrib(GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB aApertAttribute)
Definition: gbr_metadata.h:209
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103

References color, GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_NONCONDUCTOR, getColor(), EDA_TEXT::GetEffectiveTextPenWidth(), EDA_TEXT::GetHorizJustify(), BOARD_ITEM::GetLayer(), EDA_TEXT::GetLinePositions(), PCB_TEXT::GetShownText(), EDA_TEXT::GetTextAngle(), EDA_TEXT::GetTextPos(), EDA_TEXT::GetTextSize(), EDA_TEXT::GetVertJustify(), IsCopperLayer(), EDA_TEXT::IsItalic(), EDA_TEXT::IsMirrored(), EDA_TEXT::IsMultilineAllowed(), m_layerMask, m_plotter, GBR_METADATA::SetApertureAttrib(), PLOTTER::SetColor(), PLOTTER::SetCurrentLineWidth(), PLOTTER::Text(), and wxStringSplit().

Referenced by GENDRILL_WRITER_BASE::genDrillMapFile(), PlotBoardGraphicItems(), and PlotDimension().

◆ SetA4Output()

void PCB_PLOT_PARAMS::SetA4Output ( int  aForce)
inlineinherited

Definition at line 183 of file pcb_plot_params.h.

183 { m_A4Output = aForce; };
bool m_A4Output
Autoscale the plot to fit an A4 (landscape?) sheet.

References PCB_PLOT_PARAMS::m_A4Output.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetAutoScale()

void PCB_PLOT_PARAMS::SetAutoScale ( bool  aFlag)
inlineinherited

Definition at line 105 of file pcb_plot_params.h.

105 { m_autoScale = aFlag; }
bool m_autoScale
When true set the scale to fit the board in the page.

References PCB_PLOT_PARAMS::m_autoScale.

Referenced by DIALOG_PLOT::Plot().

◆ SetColorSettings()

void PCB_PLOT_PARAMS::SetColorSettings ( COLOR_SETTINGS aSettings)
inlineinherited

Definition at line 62 of file pcb_plot_params.h.

62 { m_colors = aSettings; }
COLOR_SETTINGS * m_colors
Pointer to active color settings to be used for plotting.

References PCB_PLOT_PARAMS::m_colors.

Referenced by DIALOG_EXPORT_SVG::CreateSVGFile(), and DIALOG_PLOT::Plot().

◆ SetCreateGerberJobFile()

void PCB_PLOT_PARAMS::SetCreateGerberJobFile ( bool  aCreate)
inlineinherited

Definition at line 150 of file pcb_plot_params.h.

150 { m_createGerberJobFile = aCreate; }
bool m_createGerberJobFile
generate the auxiliary "job file" in gerber format

References PCB_PLOT_PARAMS::m_createGerberJobFile.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetDisableGerberMacros()

void PCB_PLOT_PARAMS::SetDisableGerberMacros ( bool  aDisable)
inlineinherited

Definition at line 141 of file pcb_plot_params.h.

141 { m_gerberDisableApertMacros = aDisable; }
bool m_gerberDisableApertMacros
Disable aperture macros in Gerber format (only for broken Gerber readers) Ideally,...

References PCB_PLOT_PARAMS::m_gerberDisableApertMacros.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetDrillMarksType()

void PCB_PLOT_PARAMS::SetDrillMarksType ( DrillMarksType  aVal)
inlineinherited

Definition at line 92 of file pcb_plot_params.h.

92 { m_drillMarks = aVal; }
DrillMarksType m_drillMarks
Holes can be not plotted, have a small mark or plotted in actual size.

References PCB_PLOT_PARAMS::m_drillMarks.

Referenced by DIALOG_PLOT::applyPlotSettings(), DIALOG_EXPORT_SVG::CreateSVGFile(), and PlotOneBoardLayer().

◆ SetDXFPlotPolygonMode()

void PCB_PLOT_PARAMS::SetDXFPlotPolygonMode ( bool  aFlag)
inlineinherited

Definition at line 79 of file pcb_plot_params.h.

79 { m_DXFplotPolygonMode = aFlag; }
bool m_DXFplotPolygonMode
DXF format: Plot items in outline (polygon) mode.

References PCB_PLOT_PARAMS::m_DXFplotPolygonMode.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetDXFPlotUnits()

void PCB_PLOT_PARAMS::SetDXFPlotUnits ( DXF_UNITS  aUnit)
inlineinherited

Definition at line 82 of file pcb_plot_params.h.

83  {
84  m_DXFplotUnits = aUnit;
85  }
DXF_UNITS m_DXFplotUnits
DXF format: Units to use when plotting the DXF.

References PCB_PLOT_PARAMS::m_DXFplotUnits.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetExcludeEdgeLayer()

void PCB_PLOT_PARAMS::SetExcludeEdgeLayer ( bool  aFlag)
inlineinherited

Definition at line 132 of file pcb_plot_params.h.

132 { m_excludeEdgeLayer = aFlag; }
bool m_excludeEdgeLayer
If false always plot (merge) the pcb edge layer on other layers.

References PCB_PLOT_PARAMS::m_excludeEdgeLayer.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetFineScaleAdjustX()

void PCB_PLOT_PARAMS::SetFineScaleAdjustX ( double  aVal)
inlineinherited

Definition at line 98 of file pcb_plot_params.h.

98 { m_fineScaleAdjustX = aVal; }
double m_fineScaleAdjustX
fine scale adjust X axis

References PCB_PLOT_PARAMS::m_fineScaleAdjustX.

Referenced by DIALOG_PLOT::Plot().

◆ SetFineScaleAdjustY()

void PCB_PLOT_PARAMS::SetFineScaleAdjustY ( double  aVal)
inlineinherited

Definition at line 100 of file pcb_plot_params.h.

100 { m_fineScaleAdjustY = aVal; }
double m_fineScaleAdjustY
fine scale adjust Y axis

References PCB_PLOT_PARAMS::m_fineScaleAdjustY.

Referenced by DIALOG_PLOT::Plot().

◆ SetFormat()

void PCB_PLOT_PARAMS::SetFormat ( PLOT_FORMAT  aFormat)
inlineinherited

Definition at line 135 of file pcb_plot_params.h.

135 { m_format = aFormat; }
PLOT_FORMAT m_format
Plot format type (chooses the driver to be used)

References PCB_PLOT_PARAMS::m_format.

Referenced by DIALOG_PLOT::applyPlotSettings(), DIALOG_EXPORT_SVG::CreateSVGFile(), PLOT_CONTROLLER::OpenPlotfile(), and PCB_EDIT_FRAME::ToPlotter().

◆ SetGerberPrecision()

void PCB_PLOT_PARAMS::SetGerberPrecision ( int  aPrecision)
inherited

Definition at line 147 of file pcb_plot_params.cpp.

148 {
149  // Currently Gerber files use mm.
150  // accepted precision is only 6 (max value, this is the resolution of Pcbnew)
151  // or 5, min value for professional boards, when 6 creates problems
152  // to board makers.
153 
156 }
static const int gbrDefaultPrecision
int m_gerberPrecision
precision of coordinates in Gerber files: accepted 5 or 6 when units are in mm (6 or 7 in inches,...

References gbrDefaultPrecision.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetHPGLPenDiameter()

bool PCB_PLOT_PARAMS::SetHPGLPenDiameter ( double  aValue)
inherited

Definition at line 383 of file pcb_plot_params.cpp.

384 {
386 }
static bool setDouble(double *aTarget, double aValue, double aMin, double aMax)
double m_HPGLPenDiam
HPGL only: pen diameter in MILS, useful to fill areas However, it is in mm in hpgl files.
#define HPGL_PEN_DIAMETER_MAX
#define HPGL_PEN_DIAMETER_MIN

References HPGL_PEN_DIAMETER_MAX, HPGL_PEN_DIAMETER_MIN, and setDouble().

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetHPGLPenNum()

void PCB_PLOT_PARAMS::SetHPGLPenNum ( int  aVal)
inlineinherited

Definition at line 195 of file pcb_plot_params.h.

195 { m_HPGLPenNum = aVal; }
int m_HPGLPenNum
HPGL only: pen number selection(1 to 9)

References PCB_PLOT_PARAMS::m_HPGLPenNum.

◆ SetHPGLPenSpeed()

bool PCB_PLOT_PARAMS::SetHPGLPenSpeed ( int  aValue)
inherited

Definition at line 389 of file pcb_plot_params.cpp.

390 {
392 }
#define HPGL_PEN_SPEED_MAX
static bool setInt(int *aTarget, int aValue, int aMin, int aMax)
#define HPGL_PEN_SPEED_MIN
int m_HPGLPenSpeed
HPGL only: pen speed, always in cm/s (1 to 99 cm/s)

References HPGL_PEN_SPEED_MAX, HPGL_PEN_SPEED_MIN, and setInt().

◆ SetIncludeGerberNetlistInfo()

void PCB_PLOT_PARAMS::SetIncludeGerberNetlistInfo ( bool  aUse)
inlineinherited

Definition at line 147 of file pcb_plot_params.h.

147 { m_includeGerberNetlistInfo = aUse; }
bool m_includeGerberNetlistInfo
Include netlist info (only in Gerber X2 format) (chapter ? in revision ?)

References PCB_PLOT_PARAMS::m_includeGerberNetlistInfo.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetLayerSelection()

void PCB_PLOT_PARAMS::SetLayerSelection ( LSET  aSelection)
inlineinherited

Definition at line 174 of file pcb_plot_params.h.

174 { m_layerSelection = aSelection; };
LSET m_layerSelection
Set of layers to plot.

References PCB_PLOT_PARAMS::m_layerSelection.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetLayerSet()

void BRDITEMS_PLOTTER::SetLayerSet ( LSET  aLayerMask)
inline

◆ SetMirror()

void PCB_PLOT_PARAMS::SetMirror ( bool  aFlag)
inlineinherited

Definition at line 108 of file pcb_plot_params.h.

108 { m_mirror = aFlag; }
bool m_mirror
Mirror the plot around the X axis.

References PCB_PLOT_PARAMS::m_mirror.

Referenced by DIALOG_PLOT::applyPlotSettings(), DIALOG_EXPORT_SVG::CreateSVGFile(), and StartPlotBoard().

◆ SetNegative()

void PCB_PLOT_PARAMS::SetNegative ( bool  aFlag)
inlineinherited

Definition at line 123 of file pcb_plot_params.h.

123 { m_negative = aFlag; }
bool m_negative
Plot in negative color (supported only by some drivers)

References PCB_PLOT_PARAMS::m_negative.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetOutputDirectory()

void PCB_PLOT_PARAMS::SetOutputDirectory ( const wxString &  aDir)
inlineinherited

Definition at line 138 of file pcb_plot_params.h.

138 { m_outputDirectory = aDir; }
wxString m_outputDirectory
Output directory for plot files (usually relative to the board file)

References PCB_PLOT_PARAMS::m_outputDirectory.

Referenced by DIALOG_PLOT::applyPlotSettings(), DIALOG_GEN_FOOTPRINT_POSITION::OnGenerate(), and DIALOG_GENDRILL::UpdateDrillParams().

◆ SetPlotFrameRef()

void PCB_PLOT_PARAMS::SetPlotFrameRef ( bool  aFlag)
inlineinherited

Definition at line 129 of file pcb_plot_params.h.

129 { m_plotFrameRef = aFlag; }
bool m_plotFrameRef
True to plot/print frame references.

References PCB_PLOT_PARAMS::m_plotFrameRef.

Referenced by DIALOG_PLOT::applyPlotSettings(), and DIALOG_EXPORT_SVG::CreateSVGFile().

◆ SetPlotInvisibleText()

void PCB_PLOT_PARAMS::SetPlotInvisibleText ( bool  aFlag)
inlineinherited

Definition at line 116 of file pcb_plot_params.h.

116 { m_plotInvisibleText = aFlag; }
bool m_plotInvisibleText
Force plotting of fields marked invisible.

References PCB_PLOT_PARAMS::m_plotInvisibleText.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetPlotMode()

void PCB_PLOT_PARAMS::SetPlotMode ( OUTLINE_MODE  aPlotMode)
inlineinherited

Definition at line 76 of file pcb_plot_params.h.

76 { m_plotMode = aPlotMode; }
OUTLINE_MODE m_plotMode
FILLED or SKETCH selects how to plot filled objects.

References PCB_PLOT_PARAMS::m_plotMode.

Referenced by DIALOG_PLOT::applyPlotSettings(), and PCB_PLOT_PARAMS_PARSER::Parse().

◆ SetPlotReference()

void PCB_PLOT_PARAMS::SetPlotReference ( bool  aFlag)
inlineinherited

Definition at line 120 of file pcb_plot_params.h.

120 { m_plotReference = aFlag; }
bool m_plotReference
Enable plotting of part references.

References PCB_PLOT_PARAMS::m_plotReference.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetPlotValue()

void PCB_PLOT_PARAMS::SetPlotValue ( bool  aFlag)
inlineinherited

Definition at line 118 of file pcb_plot_params.h.

118 { m_plotValue = aFlag; }
bool m_plotValue
Enable plotting of part values.

References PCB_PLOT_PARAMS::m_plotValue.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetPlotViaOnMaskLayer()

void PCB_PLOT_PARAMS::SetPlotViaOnMaskLayer ( bool  aFlag)
inlineinherited

Definition at line 126 of file pcb_plot_params.h.

126 { m_plotViaOnMaskLayer = aFlag; }
bool m_plotViaOnMaskLayer
True if vias are drawn on Mask layer (ie untented, exposed by mask)

References PCB_PLOT_PARAMS::m_plotViaOnMaskLayer.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetScale()

void PCB_PLOT_PARAMS::SetScale ( double  aVal)
inlineinherited

Definition at line 95 of file pcb_plot_params.h.

95 { m_scale = aVal; }
double m_scale
Global scale factor, 1.0 plots a board with its actual size.

References PCB_PLOT_PARAMS::m_scale.

Referenced by DIALOG_PLOT::Plot().

◆ SetScaleSelection()

void PCB_PLOT_PARAMS::SetScaleSelection ( int  aSelection)
inlineinherited

Definition at line 180 of file pcb_plot_params.h.

180 { m_scaleSelection = aSelection; };
int m_scaleSelection
Scale ratio index (UI only)

References PCB_PLOT_PARAMS::m_scaleSelection.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetSketchPadLineWidth()

void PCB_PLOT_PARAMS::SetSketchPadLineWidth ( int  aWidth)
inlineinherited

Definition at line 113 of file pcb_plot_params.h.

113 { m_sketchPadLineWidth = aWidth; }

References PCB_PLOT_PARAMS::m_sketchPadLineWidth.

Referenced by DIALOG_PLOT::Plot().

◆ SetSketchPadsOnFabLayers()

void PCB_PLOT_PARAMS::SetSketchPadsOnFabLayers ( bool  aFlag)
inlineinherited

Definition at line 111 of file pcb_plot_params.h.

111 { m_sketchPadsOnFabLayers = aFlag; }
bool m_sketchPadsOnFabLayers
Plots pads outlines on fab layers.

References PCB_PLOT_PARAMS::m_sketchPadsOnFabLayers.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetSkipPlotNPTH_Pads()

void PCB_PLOT_PARAMS::SetSkipPlotNPTH_Pads ( bool  aSkip)
inlineinherited

Definition at line 46 of file pcb_plot_params.h.

46 { m_skipNPTH_Pads = aSkip; }

References PCB_PLOT_PARAMS::m_skipNPTH_Pads.

Referenced by DIALOG_EXPORT_SVG::CreateSVGFile(), and PlotOneBoardLayer().

◆ SetSubtractMaskFromSilk()

void PCB_PLOT_PARAMS::SetSubtractMaskFromSilk ( bool  aSubtract)
inlineinherited

Definition at line 171 of file pcb_plot_params.h.

171 { m_subtractMaskFromSilk = aSubtract; };
bool m_subtractMaskFromSilk
On gerbers 'scrape' away the solder mask from silkscreen (trim silks)

References PCB_PLOT_PARAMS::m_subtractMaskFromSilk.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetSvgPrecision()

void PCB_PLOT_PARAMS::SetSvgPrecision ( unsigned  aPrecision,
bool  aUseInch 
)
inherited

Definition at line 159 of file pcb_plot_params.cpp.

160 {
161  m_svgUseInch = aUseInch;
163 }
bool m_svgUseInch
units for SVG plot false for metric, true for inch/mils
unsigned m_svgPrecision
precision of coordinates in SVG files: accepted 3 - 6 6 is the internal resolution of Pcbnew
#define SVG_PRECISION_MAX
const T & Clamp(const T &lower, const T &value, const T &upper)
Limit value within the range lower <= value <= upper.
Definition: util.h:52
#define SVG_PRECISION_MIN

References Clamp(), SVG_PRECISION_MAX, and SVG_PRECISION_MIN.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetTextMode()

void PCB_PLOT_PARAMS::SetTextMode ( PLOT_TEXT_MODE  aVal)
inlineinherited

Definition at line 66 of file pcb_plot_params.h.

67  {
68  m_textMode = aVal;
69  }
PLOT_TEXT_MODE m_textMode
Choose how represent text with PS, PDF and DXF drivers.

References PCB_PLOT_PARAMS::m_textMode.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetUseAuxOrigin()

void PCB_PLOT_PARAMS::SetUseAuxOrigin ( bool  aAux)
inlineinherited

Definition at line 177 of file pcb_plot_params.h.

177 { m_useAuxOrigin = aAux; };
bool m_useAuxOrigin
Plot gerbers using auxiliary (drill) origin instead of absolute coordinates.

References PCB_PLOT_PARAMS::m_useAuxOrigin.

Referenced by DIALOG_PLOT::applyPlotSettings(), DIALOG_EXPORT_SVG::CreateSVGFile(), and DIALOG_GENDRILL::UpdateDrillParams().

◆ SetUseGerberProtelExtensions()

void PCB_PLOT_PARAMS::SetUseGerberProtelExtensions ( bool  aUse)
inlineinherited

Definition at line 153 of file pcb_plot_params.h.

153 { m_useGerberProtelExtensions = aUse; }
bool m_useGerberProtelExtensions
When plotting gerber files, use a conventional set of Protel extensions instead of ....

References PCB_PLOT_PARAMS::m_useGerberProtelExtensions.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetUseGerberX2format()

void PCB_PLOT_PARAMS::SetUseGerberX2format ( bool  aUse)
inlineinherited

Definition at line 144 of file pcb_plot_params.h.

144 { m_useGerberX2format = aUse; }
bool m_useGerberX2format
Include attributes from the Gerber X2 format (chapter 5 in revision J2)

References PCB_PLOT_PARAMS::m_useGerberX2format.

Referenced by DIALOG_PLOT::applyPlotSettings().

◆ SetWidthAdjust()

void PCB_PLOT_PARAMS::SetWidthAdjust ( int  aVal)
inlineinherited

Definition at line 102 of file pcb_plot_params.h.

102 { m_widthAdjust = aVal; }
int m_widthAdjust
This width factor is intended to compensate PS printers/ plotters that do not strictly obey line widt...

References PCB_PLOT_PARAMS::m_widthAdjust.

Referenced by DIALOG_PLOT::Plot().

Member Data Documentation

◆ m_board

BOARD* BRDITEMS_PLOTTER::m_board
private

Definition at line 143 of file pcbplot.h.

Referenced by BRDITEMS_PLOTTER(), PlotBoardGraphicItems(), and PlotDrillMarks().

◆ m_layerMask

◆ m_plotter


The documentation for this class was generated from the following files: