KiCad PCB EDA Suite
pcb_plot_params.cpp
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, you may find one here:
18  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19  * or you may search the http://www.gnu.org website for the version 2 license,
20  * or you may write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23 
24 //#include <wx/wx.h>
25 #include <pcb_plot_params_parser.h>
26 #include <pcb_plot_params.h>
28 #include <class_plotter.h>
29 #include <macros.h>
30 #include <convert_to_biu.h>
31 
32 
33 #define PLOT_LINEWIDTH_MIN (0.02*IU_PER_MM) // min value for default line thickness
34 #define PLOT_LINEWIDTH_MAX (2*IU_PER_MM) // max value for default line thickness
35 #define PLOT_LINEWIDTH_DEFAULT (0.15*IU_PER_MM) // def. value for default line thickness
36 #define HPGL_PEN_DIAMETER_MIN 0
37 #define HPGL_PEN_DIAMETER_MAX 100 // Unit = mil
38 #define HPGL_PEN_SPEED_MIN 1 // this param is always in cm/s
39 #define HPGL_PEN_SPEED_MAX 99 // this param is always in cm/s
40 #define HPGL_PEN_NUMBER_MIN 1
41 #define HPGL_PEN_NUMBER_MAX 16
42 
43 
49 
50 // default trailing digits in Gerber coordinates, when units are mm
51 // This is also the max usable precision (i.e. internal Pcbnew Units)
52 static const int gbrDefaultPrecision = 6;
53 
54 
55 using namespace PCBPLOTPARAMS_T;
56 
57 
58 static const char* getTokenName( T aTok )
59 {
60  return PCB_PLOT_PARAMS_LEXER::TokenName( aTok );
61 }
62 
63 
64 static bool setInt( int* aInt, int aValue, int aMin, int aMax )
65 {
66  int temp = aValue;
67 
68  if( aValue < aMin )
69  temp = aMin;
70  else if( aValue > aMax )
71  temp = aMax;
72 
73  *aInt = temp;
74  return (temp == aValue);
75 }
76 
77 // PCB_PLOT_PARAMS
78 
80 {
81  m_useGerberProtelExtensions = false;
82  m_useGerberAttributes = false;
83  m_includeGerberNetlistInfo = false;
84  m_createGerberJobFile = false;
85  m_gerberPrecision = gbrDefaultPrecision;
86  m_excludeEdgeLayer = true;
87  m_lineWidth = g_DrawDefaultLineThickness;
88  m_plotFrameRef = false;
89  m_plotViaOnMaskLayer = false;
90  m_plotMode = FILLED;
91  m_DXFplotPolygonMode = true;
92  m_useAuxOrigin = false;
93  m_HPGLPenNum = 1;
94  m_HPGLPenSpeed = 20; // this param is always in cm/s
95  m_HPGLPenDiam = 15; // in mils
96  m_negative = false;
97  m_A4Output = false;
98  m_plotReference = true;
99  m_plotValue = true;
100  m_plotInvisibleText = false;
101  m_plotPadsOnSilkLayer = false;
102  m_subtractMaskFromSilk = false;
103  m_format = PLOT_FORMAT_GERBER;
104  m_mirror = false;
105  m_drillMarks = SMALL_DRILL_SHAPE;
106  m_autoScale = false;
107  m_scale = 1.0;
108  m_scaleSelection = 1;
109  m_fineScaleAdjustX = 1.0;
110  m_fineScaleAdjustY = 1.0;
111  m_widthAdjust = 0.;
112  m_outputDirectory.clear();
113  m_color = BLACK;
114  m_textMode = PLOTTEXTMODE_DEFAULT;
115  m_layerSelection = LSET( 7, F_SilkS, B_SilkS, F_Mask, B_Mask,
117  | LSET::AllCuMask();
118  // This parameter controls if the NPTH pads will be plotted or not
119  // it is a "local" parameter
120  m_skipNPTH_Pads = false;
121 }
122 
124 {
125  // Currently geber files use mm.
126  // accepted precision is only 6 (max value, this is the resolution of Pcbnew)
127  // or 5, min value for professional boards, when 6 creates problems
128  // to board makers.
129 
130  m_gerberPrecision = aPrecision == gbrDefaultPrecision-1 ? gbrDefaultPrecision-1 :
132 }
133 
134 
135 // PLEASE NOTE: only plot dialog options are processed
137  int aNestLevel, int aControl ) const
138 {
139  const char* falseStr = getTokenName( T_false );
140  const char* trueStr = getTokenName( T_true );
141 
142  aFormatter->Print( aNestLevel, "(%s\n", getTokenName( T_pcbplotparams ) );
143 
144  aFormatter->Print( aNestLevel+1, "(%s 0x%s)\n", getTokenName( T_layerselection ),
145  m_layerSelection.FmtHex().c_str() );
146 
147  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberextensions ),
148  m_useGerberProtelExtensions ? trueStr : falseStr );
149 
150  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberattributes ),
151  GetUseGerberAttributes() ? trueStr : falseStr );
152 
153  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberadvancedattributes ),
154  GetIncludeGerberNetlistInfo() ? trueStr : falseStr );
155 
156  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_creategerberjobfile ),
157  GetCreateGerberJobFile() ? trueStr : falseStr );
158 
159  if( m_gerberPrecision != gbrDefaultPrecision ) // save this option only if it is not the default value,
160  // to avoid incompatibility with older Pcbnew version
161  aFormatter->Print( aNestLevel+1, "(%s %d)\n",
162  getTokenName( T_gerberprecision ), m_gerberPrecision );
163 
164  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_excludeedgelayer ),
165  m_excludeEdgeLayer ? trueStr : falseStr );
166  aFormatter->Print( aNestLevel+1, "(%s %f)\n", getTokenName( T_linewidth ),
167  m_lineWidth / IU_PER_MM );
168  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotframeref ),
169  m_plotFrameRef ? trueStr : falseStr );
170  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_viasonmask ),
171  m_plotViaOnMaskLayer ? trueStr : falseStr );
172  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_mode ),
173  GetPlotMode() == SKETCH ? 2 : 1 ); // Value 0 (LINE mode) no more used
174  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_useauxorigin ),
175  m_useAuxOrigin ? trueStr : falseStr );
176  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpennumber ),
177  m_HPGLPenNum );
178 
179  // Obsolete parameter, pen speed is no more managed, because hpgl format
180  // is now an export format, and for this, pen speed has no meaning
181  // aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpenspeed ),
182  // m_HPGLPenSpeed );
183 
184  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpenspeed ),
185  m_HPGLPenSpeed );
186  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpendiameter ),
187  m_HPGLPenDiam );
188  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_psnegative ),
189  m_negative ? trueStr : falseStr );
190  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_psa4output ),
191  m_A4Output ? trueStr : falseStr );
192  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotreference ),
193  m_plotReference ? trueStr : falseStr );
194  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotvalue ),
195  m_plotValue ? trueStr : falseStr );
196  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotinvisibletext ),
197  m_plotInvisibleText ? trueStr : falseStr );
198  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_padsonsilk ),
199  m_plotPadsOnSilkLayer ? trueStr : falseStr );
200  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_subtractmaskfromsilk ),
201  m_subtractMaskFromSilk ? trueStr : falseStr );
202  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_outputformat ),
203  m_format );
204  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_mirror ),
205  m_mirror ? trueStr : falseStr );
206  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_drillshape ),
207  m_drillMarks );
208  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_scaleselection ),
209  m_scaleSelection );
210  aFormatter->Print( aNestLevel+1, "(%s %s)", getTokenName( T_outputdirectory ),
211  aFormatter->Quotew( m_outputDirectory ).c_str() );
212  aFormatter->Print( 0, ")\n" );
213 }
214 
215 
217 {
218  aParser->Parse( this );
219 }
220 
221 
222 bool PCB_PLOT_PARAMS::IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams, bool aCompareOnlySavedPrms ) const
223 {
224  if( m_layerSelection != aPcbPlotParams.m_layerSelection )
225  return false;
226  if( m_useGerberProtelExtensions != aPcbPlotParams.m_useGerberProtelExtensions )
227  return false;
228  if( m_useGerberAttributes != aPcbPlotParams.m_useGerberAttributes )
229  return false;
230  if( m_useGerberAttributes && m_includeGerberNetlistInfo != aPcbPlotParams.m_includeGerberNetlistInfo )
231  return false;
232  if( m_createGerberJobFile != aPcbPlotParams.m_createGerberJobFile )
233  return false;
234  if( m_gerberPrecision != aPcbPlotParams.m_gerberPrecision )
235  return false;
236  if( m_excludeEdgeLayer != aPcbPlotParams.m_excludeEdgeLayer )
237  return false;
238  if( m_lineWidth != aPcbPlotParams.m_lineWidth )
239  return false;
240  if( m_plotFrameRef != aPcbPlotParams.m_plotFrameRef )
241  return false;
242  if( m_plotViaOnMaskLayer != aPcbPlotParams.m_plotViaOnMaskLayer )
243  return false;
244  if( m_plotMode != aPcbPlotParams.m_plotMode )
245  return false;
246  if( !aCompareOnlySavedPrms )
247  {
248  if( m_DXFplotPolygonMode != aPcbPlotParams.m_DXFplotPolygonMode )
249  return false;
250  }
251  if( m_useAuxOrigin != aPcbPlotParams.m_useAuxOrigin )
252  return false;
253  if( m_HPGLPenNum != aPcbPlotParams.m_HPGLPenNum )
254  return false;
255  if( m_HPGLPenSpeed != aPcbPlotParams.m_HPGLPenSpeed )
256  return false;
257  if( m_HPGLPenDiam != aPcbPlotParams.m_HPGLPenDiam )
258  return false;
259  if( m_negative != aPcbPlotParams.m_negative )
260  return false;
261  if( m_A4Output != aPcbPlotParams.m_A4Output )
262  return false;
263  if( m_plotReference != aPcbPlotParams.m_plotReference )
264  return false;
265  if( m_plotValue != aPcbPlotParams.m_plotValue )
266  return false;
267  if( m_plotInvisibleText != aPcbPlotParams.m_plotInvisibleText )
268  return false;
269  if( m_plotPadsOnSilkLayer != aPcbPlotParams.m_plotPadsOnSilkLayer )
270  return false;
271  if( m_subtractMaskFromSilk != aPcbPlotParams.m_subtractMaskFromSilk )
272  return false;
273  if( m_format != aPcbPlotParams.m_format )
274  return false;
275  if( m_mirror != aPcbPlotParams.m_mirror )
276  return false;
277  if( m_drillMarks != aPcbPlotParams.m_drillMarks )
278  return false;
279  if( m_scaleSelection != aPcbPlotParams.m_scaleSelection )
280  return false;
281  if( m_autoScale != aPcbPlotParams.m_autoScale )
282  return false;
283  if( m_scale != aPcbPlotParams.m_scale )
284  return false;
285  if( m_fineScaleAdjustX != aPcbPlotParams.m_fineScaleAdjustX )
286  return false;
287  if( m_fineScaleAdjustY != aPcbPlotParams.m_fineScaleAdjustY )
288  return false;
289  if( m_widthAdjust != aPcbPlotParams.m_widthAdjust )
290  return false;
291  if( !aCompareOnlySavedPrms )
292  {
293  if( m_color != aPcbPlotParams.m_color )
294  return false;
295  }
296  if( m_textMode != aPcbPlotParams.m_textMode )
297  return false;
298  if( !m_outputDirectory.IsSameAs( aPcbPlotParams.m_outputDirectory ) )
299  return false;
300 
301  return true;
302 }
303 
304 
306 {
307  return setInt( &m_HPGLPenDiam, aValue, HPGL_PEN_DIAMETER_MIN, HPGL_PEN_DIAMETER_MAX );
308 }
309 
310 
312 {
313  return setInt( &m_HPGLPenSpeed, aValue, HPGL_PEN_SPEED_MIN, HPGL_PEN_SPEED_MAX );
314 }
315 
316 
318 {
319  return setInt( &m_lineWidth, aValue, PLOT_LINEWIDTH_MIN, PLOT_LINEWIDTH_MAX );
320 }
321 
322 // PCB_PLOT_PARAMS_PARSER
323 
325  PCB_PLOT_PARAMS_LEXER( aReader )
326 {
327 }
328 
329 
330 PCB_PLOT_PARAMS_PARSER::PCB_PLOT_PARAMS_PARSER( char* aLine, const wxString& aSource ) :
331  PCB_PLOT_PARAMS_LEXER( aLine, aSource )
332 {
333 }
334 
335 
337 {
338  T token;
339 
340  while( ( token = NextTok() ) != T_RIGHT )
341  {
342  if( token == T_EOF)
343  Unexpected( T_EOF );
344 
345  if( token == T_LEFT )
346  token = NextTok();
347 
348  if( token == T_pcbplotparams )
349  continue;
350 
351  bool skip_right = false;
352 
353  switch( token )
354  {
355  case T_layerselection:
356  {
357  token = NeedSYMBOLorNUMBER();
358 
359  const std::string& cur = CurStr();
360 
361  if( token == T_NUMBER ) // pretty 3 format had legacy Cu stack.
362  {
363  // unsigned legacy_mask = atol( cur.c_str() );
364 
365  /* It's not possible to convert a legacy Cu layer number to a new
366  Cu layer number without knowing the number or total Cu layers
367  in the legacy board. We do not have that information here.
368  So simply set all layers ON. User can turn them off in the UI.
369  This is one of the superiorities of the new Cu sequence.
370  aPcbPlotParams->m_layerSelection = LEGACY_PLUGIN::leg_mask2new( cu_count, legacy_mask );
371  */
372 
373  // sorry, use the UI once to fix:
374  aPcbPlotParams->m_layerSelection = LSET( 2, F_SilkS, B_SilkS) | LSET::AllCuMask();
375  }
376  else if( cur.find_first_of( "0x" ) == 0 ) // pretty ver. 4.
377  {
378  // skip the leading 2 0x bytes.
379  aPcbPlotParams->m_layerSelection.ParseHex( cur.c_str()+2, cur.size()-2 );
380  }
381  else
382  Expecting( "integer or hex layerSelection" );
383  }
384  break;
385 
387  aPcbPlotParams->m_useGerberProtelExtensions = parseBool();
388  break;
389 
391  aPcbPlotParams->m_useGerberAttributes = parseBool();
392  break;
393 
395  aPcbPlotParams->m_includeGerberNetlistInfo = parseBool();
396  break;
397 
399  aPcbPlotParams->m_createGerberJobFile = parseBool();
400  break;
401 
402  case T_gerberprecision:
403  aPcbPlotParams->m_gerberPrecision =
405  break;
406 
407  case T_psa4output:
408  aPcbPlotParams->m_A4Output = parseBool();
409  break;
410 
411  case T_excludeedgelayer:
412  aPcbPlotParams->m_excludeEdgeLayer = parseBool();
413  break;
414 
415  case T_linewidth:
416  {
417  // Due to a bug, this (minor) parameter was saved in biu
418  // and now is saved in mm
419  // If the read value is outside bounds, force a default value
420  double tmp = parseDouble();
421  if( !aPcbPlotParams->SetLineWidth( KiROUND( tmp * IU_PER_MM ) ) )
422  aPcbPlotParams->SetLineWidth( PLOT_LINEWIDTH_DEFAULT );
423  }
424  break;
425 
426  case T_plotframeref:
427  aPcbPlotParams->m_plotFrameRef = parseBool();
428  break;
429 
430  case T_viasonmask:
431  aPcbPlotParams->m_plotViaOnMaskLayer = parseBool();
432  break;
433 
434  case T_mode:
435  aPcbPlotParams->SetPlotMode( parseInt( 0, 2 ) > 1 ? SKETCH : FILLED );
436  break;
437 
438  case T_useauxorigin:
439  aPcbPlotParams->m_useAuxOrigin = parseBool();
440  break;
441 
442  case T_hpglpennumber:
443  aPcbPlotParams->m_HPGLPenNum = parseInt( HPGL_PEN_NUMBER_MIN,
445  break;
446 
447  case T_hpglpenspeed:
448  aPcbPlotParams->m_HPGLPenSpeed = parseInt( HPGL_PEN_SPEED_MIN,
450  break;
451 
452  case T_hpglpendiameter:
453  aPcbPlotParams->m_HPGLPenDiam = parseInt( HPGL_PEN_DIAMETER_MIN,
455  break;
456 
457  case T_hpglpenoverlay:
458  // No more used. juste here for compatibility with old versions
460  break;
461 
462  case T_pscolor:
463  NeedSYMBOL(); // This actually was never used...
464  break;
465 
466  case T_psnegative:
467  aPcbPlotParams->m_negative = parseBool();
468  break;
469 
470  case T_plotreference:
471  aPcbPlotParams->m_plotReference = parseBool();
472  break;
473 
474  case T_plotvalue:
475  aPcbPlotParams->m_plotValue = parseBool();
476  break;
477 
478  case T_plotinvisibletext:
479  aPcbPlotParams->m_plotInvisibleText = parseBool();
480  break;
481 
482  case T_padsonsilk:
483  aPcbPlotParams->m_plotPadsOnSilkLayer= parseBool();
484  break;
485 
487  aPcbPlotParams->m_subtractMaskFromSilk = parseBool();
488  break;
489 
490  case T_outputformat:
491  aPcbPlotParams->m_format = static_cast<PlotFormat>(
493  break;
494 
495  case T_mirror:
496  aPcbPlotParams->m_mirror = parseBool();
497  break;
498 
499  case T_drillshape:
500  aPcbPlotParams->m_drillMarks = static_cast<PCB_PLOT_PARAMS::DrillMarksType>
501  ( parseInt( 0, 2 ) );
502  break;
503 
504  case T_scaleselection:
505  aPcbPlotParams->m_scaleSelection = parseInt( 0, 4 );
506  break;
507 
508  case T_outputdirectory:
509  NeedSYMBOL();
510  aPcbPlotParams->m_outputDirectory = FROM_UTF8( CurText() );
511  break;
512 
513  default:
514  skipCurrent(); // skip unknown or outdated plot parameter
515  skip_right = true; // the closing right token is already read.
516  break;
517  }
518 
519  if( ! skip_right )
520  NeedRIGHT();
521  }
522 }
523 
524 
526 {
527  T token = NeedSYMBOL();
528 
529  if( token != T_false && token != T_true )
530  Expecting( "true|false" );
531 
532  return token == T_true;
533 }
534 
535 
536 int PCB_PLOT_PARAMS_PARSER::parseInt( int aMin, int aMax )
537 {
538  T token = NextTok();
539 
540  if( token != T_NUMBER )
541  Expecting( T_NUMBER );
542 
543  int val = atoi( CurText() );
544 
545  if( val < aMin )
546  val = aMin;
547  else if( val > aMax )
548  val = aMax;
549 
550  return val;
551 }
552 
553 
555 {
556  T token = NextTok();
557 
558  if( token != T_NUMBER )
559  Expecting( T_NUMBER );
560 
561  double val = strtod( CurText(), NULL );
562 
563  return val;
564 }
565 
566 
568 {
569  int curr_level = 0;
570  T token;
571 
572  while( ( token = NextTok() ) != T_EOF )
573  {
574  if( token == T_LEFT )
575  curr_level--;
576 
577  if( token == T_RIGHT )
578  {
579  curr_level++;
580 
581  if( curr_level > 0 )
582  return;
583  }
584  }
585 }
double m_fineScaleAdjustX
fine scale adjust X axis
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:646
#define HPGL_PEN_NUMBER_MAX
PCBPLOTPARAMS_T::T NeedSYMBOLorNUMBER()
Function NeedSYMBOLorNUMBER calls NextTok() and then verifies that the token read in satisfies bool I...
bool m_plotValue
Enable plotting of part values.
#define HPGL_PEN_SPEED_MAX
Class LINE_READER is an abstract class from which implementation specific LINE_READERs may be derived...
Definition: richio.h:81
double parseDouble()
Function parseDouble parses a double.
#define PLOT_LINEWIDTH_DEFAULT
void SetGerberPrecision(int aPrecision)
wxString m_outputDirectory
Output directory for plot files (usually relative to the board file)
static wxString FROM_UTF8(const char *cstring)
function FROM_UTF8 converts a UTF8 encoded C string to a wxString for all wxWidgets build modes...
Definition: macros.h:53
bool m_mirror
Mirror the plot around the X axis.
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
Class PCB_PLOT_PARAMS_PARSER is the parser class for PCB_PLOT_PARAMS.
bool m_excludeEdgeLayer
If false always plot (merge) the pcb edge layer on other layers.
void Unexpected(int aTok)
Function Unexpected throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:369
static const int gbrDefaultPrecision
bool m_plotPadsOnSilkLayer
Allows pads outlines on silkscreen layer (when pads are also on silk screen)
const std::string & CurStr()
Function CurStr returns a reference to current token in std::string form.
Definition: dsnlexer.h:488
#define PLOT_LINEWIDTH_MAX
double m_scale
Global scale factor, 1.0 plots a board with its actual size.
bool m_plotReference
Enable plotting of part references.
Class OUTPUTFORMATTER is an important interface (abstract class) used to output 8 bit text in a conve...
Definition: richio.h:327
bool m_useGerberProtelExtensions
When plotting gerber files, use a conventional set of Protel extensions instead of ...
bool SetHPGLPenSpeed(int aValue)
Class PCB_PLOT_PARAMS_LEXER is an automatically generated class using the TokenList2DnsLexer.cmake technology, based on keywords provided by file: /home/kicad/workspace/kicad-doxygen/common/pcb_plot_params.keywords.
int m_scaleSelection
Scale ratio index (UI only)
PCBPLOTPARAMS_T::T NeedSYMBOL()
Function NeedSYMBOL calls NextTok() and then verifies that the token read in satisfies bool IsSymbol(...
bool m_negative
Plot in negative color (supported only by some drivers)
bool m_plotFrameRef
True to plot/print frame references.
bool SetHPGLPenDiameter(int aValue)
bool SetLineWidth(int aValue)
This file contains miscellaneous commonly used macros and functions.
bool m_includeGerberNetlistInfo
Include netlist info (only in Gerber X2 format) (chapter ? in revision ?)
bool m_useGerberAttributes
Include attributes from the Gerber X2 format (chapter 5 in revision J2)
bool m_plotInvisibleText
Force plotting of fields marked invisible.
PCBPLOTPARAMS_T::T NextTok()
Function NextTok returns the next token found in the input file or T_EOF when reaching the end of fil...
bool m_DXFplotPolygonMode
DXF format: Plot items in outline (polygon) mode In polygon mode, each item to plot is converted to a...
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.
Class LSET is a set of PCB_LAYER_IDs.
PCB_PLOT_PARAMS_PARSER(LINE_READER *aReader)
bool m_subtractMaskFromSilk
On gerbers 'scrape' away the solder mask from silkscreen (trim silks)
#define HPGL_PEN_DIAMETER_MAX
double m_fineScaleAdjustY
fine scale adjust Y axis
int g_DrawDefaultLineThickness
Default line thickness in internal units used to draw or plot items using a default thickness line va...
PlotFormat
Enum PlotFormat is the set of supported output plot formats.
Definition: class_plotter.h:50
static const char * TokenName(PCBPLOTPARAMS_T::T aTok)
Function TokenName returns the name of the token in ASCII form.
std::string Quotew(const wxString &aWrapee)
Definition: richio.cpp:482
#define HPGL_PEN_DIAMETER_MIN
bool m_plotViaOnMaskLayer
True if vias are drawn on Mask layer (ie untented, exposed by mask)
static const char * getTokenName(T aTok)
void Expecting(int aTok)
Function Expecting throws an IO_ERROR exception with an input file specific error message...
Definition: dsnlexer.cpp:353
Class PCB_PLOT_PARAMS handles plot parameters and options when plotting/printing a board...
bool IsSameAs(const PCB_PLOT_PARAMS &aPcbPlotParams, bool aCompareOnlySavedPrms) const
Compare current settings to aPcbPlotParams, including not saved parameters in brd file...
int m_widthAdjust
This width factor is intended to compensate PS printers/ plotters that do not strictly obey line widt...
C++ does not put enum values in separate namespaces unless the enum itself is in a separate namespace...
bool m_useAuxOrigin
Plot gerbers using auxiliary (drill) origin instead of absolue coordinates.
bool m_createGerberJobFile
generate the auxiliary "job file" in gerber format
void SetPlotMode(EDA_DRAW_MODE_T aPlotMode)
T
enum T contains all this lexer's tokens.
int m_HPGLPenNum
HPGL only: pen number selection(1 to 9)
COLOR4D m_color
Color for plotting the current layer. Provided, but not really used.
LSET m_layerSelection
Set of layers to plot.
void skipCurrent()
Function skipCurrent Skip the current token level, i.e search for the RIGHT parenthesis which closes ...
Board layer functions and definitions.
EDA_DRAW_MODE_T m_plotMode
FILLED or SKETCH selects how to plot filled objects.
#define HPGL_PEN_NUMBER_MIN
#define PLOT_LINEWIDTH_MIN
#define HPGL_PEN_SPEED_MIN
void NeedRIGHT()
Function NeedRIGHT calls NextTok() and then verifies that the token read in is a DSN_RIGHT.
Definition: dsnlexer.cpp:401
int m_HPGLPenSpeed
HPGL only: pen speed, always in cm/s (1 to 99 cm/s)
Definition: colors.h:45
int parseInt(int aMin, int aMax)
Function parseInt parses an integer and constrains it between two values.
void Format(OUTPUTFORMATTER *aFormatter, int aNestLevel, int aControl=0) const
int PRINTF_FUNC Print(int nestLevel, const char *fmt,...)
Function Print formats and writes text to the output stream.
Definition: richio.cpp:404
static bool setInt(int *aInt, int aValue, int aMin, int aMax)
void Parse(PCB_PLOT_PARAMS *aPcbPlotParams)
void Parse(PCB_PLOT_PARAMS_PARSER *aParser)
PlotTextMode m_textMode
Choose how represent text with PS, PDF and DXF drivers.
int ParseHex(const char *aStart, int aCount)
Function ParseHex understands the output of FmtHex() and replaces this set's values with those given ...
Definition: lset.cpp:285
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
PlotFormat m_format
Plot format type (chooses the driver to be used)
DrillMarksType m_drillMarks
Holes can be not plotted, have a small mark or plotted in actual size.
int m_lineWidth
The default line width (used to draw items having no defined width)
int m_HPGLPenDiam
HPGL only: pen diameter in MILS, useful to fill areas.
int m_gerberPrecision
precision of coordinates in Gerber files: accepted 5 or 6 when units are in mm (6 or 7 in inches...