KiCad PCB EDA Suite
pcb_plot_params.cpp
Go to the documentation of this file.
1 
2 /*
3  * This program source code file is part of KiCad, a free EDA CAD application.
4  *
5  * Copyright (C) 1992-2015 KiCad Developers, see change_log.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
25 //#include <wx/wx.h>
26 #include <pcb_plot_params_parser.h>
27 #include <pcb_plot_params.h>
29 #include <plot_common.h>
30 #include <macros.h>
31 #include <convert_to_biu.h>
32 
33 
34 #define PLOT_LINEWIDTH_MIN (0.02*IU_PER_MM) // min value for default line thickness
35 #define PLOT_LINEWIDTH_MAX (2*IU_PER_MM) // max value for default line thickness
36 #define PLOT_LINEWIDTH_DEFAULT (0.15*IU_PER_MM) // def. value for default line thickness
37 #define HPGL_PEN_DIAMETER_MIN 0
38 #define HPGL_PEN_DIAMETER_MAX 100 // Unit = mil
39 #define HPGL_PEN_SPEED_MIN 1 // this param is always in cm/s
40 #define HPGL_PEN_SPEED_MAX 99 // this param is always in cm/s
41 #define HPGL_PEN_NUMBER_MIN 1
42 #define HPGL_PEN_NUMBER_MAX 16
43 
44 
50 
51 // default trailing digits in Gerber coordinates, when units are mm
52 // This is also the max usable precision (i.e. internal Pcbnew Units)
53 static const int gbrDefaultPrecision = 6;
54 
55 
56 using namespace PCBPLOTPARAMS_T;
57 
58 
59 static const char* getTokenName( T aTok )
60 {
61  return PCB_PLOT_PARAMS_LEXER::TokenName( aTok );
62 }
63 
64 
65 static bool setInt( int* aInt, int aValue, int aMin, int aMax )
66 {
67  int temp = aValue;
68 
69  if( aValue < aMin )
70  temp = aMin;
71  else if( aValue > aMax )
72  temp = aMax;
73 
74  *aInt = temp;
75  return (temp == aValue);
76 }
77 
78 // PCB_PLOT_PARAMS
79 
81 {
82  m_useGerberProtelExtensions = false;
83  m_useGerberAttributes = false;
84  m_includeGerberNetlistInfo = 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_plotOutlineMode = 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_referenceColor = BLACK;
115  m_valueColor = BLACK;
116  m_textMode = PLOTTEXTMODE_DEFAULT;
117  m_layerSelection = LSET( 2, F_SilkS, B_SilkS) | LSET::AllCuMask();
118 
119  // This parameter controls if the NPTH pads will be plotted or not
120  // it is a "local" parameter
121  m_skipNPTH_Pads = false;
122 }
123 
125 {
126  // Currently geber files use mm.
127  // accepted precision is only 6 (max value, this is the resolution of Pcbnew)
128  // or 5, min value for professional boards, when 6 creates problems
129  // to board makers.
130 
131  m_gerberPrecision = aPrecision == gbrDefaultPrecision-1 ? gbrDefaultPrecision-1 :
133 }
134 
135 
136 // PLEASE NOTE: only plot dialog options are processed
138  int aNestLevel, int aControl ) const throw( IO_ERROR )
139 {
140  const char* falseStr = getTokenName( T_false );
141  const char* trueStr = getTokenName( T_true );
142 
143  aFormatter->Print( aNestLevel, "(%s\n", getTokenName( T_pcbplotparams ) );
144 
145  aFormatter->Print( aNestLevel+1, "(%s 0x%s)\n", getTokenName( T_layerselection ),
146  m_layerSelection.FmtHex().c_str() );
147 
148  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberextensions ),
149  m_useGerberProtelExtensions ? trueStr : falseStr );
150 
151  if( m_useGerberAttributes ) // save this option only if active,
152  // to avoid incompatibility with older Pcbnew version
153  {
154  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberattributes ), trueStr );
155 
156  if( GetIncludeGerberNetlistInfo() )
157  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_usegerberadvancedattributes ), trueStr );
158  }
159 
160  if( m_gerberPrecision != gbrDefaultPrecision ) // save this option only if it is not the default value,
161  // to avoid incompatibility with older Pcbnew version
162  aFormatter->Print( aNestLevel+1, "(%s %d)\n",
163  getTokenName( T_gerberprecision ), m_gerberPrecision );
164 
165  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_excludeedgelayer ),
166  m_excludeEdgeLayer ? trueStr : falseStr );
167  aFormatter->Print( aNestLevel+1, "(%s %f)\n", getTokenName( T_linewidth ),
168  m_lineWidth / IU_PER_MM );
169  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotframeref ),
170  m_plotFrameRef ? trueStr : falseStr );
171  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_viasonmask ),
172  m_plotViaOnMaskLayer ? trueStr : falseStr );
173  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_mode ),
174  GetPlotMode() == SKETCH ? 2 : 1 ); // Value 0 (LINE mode) no more used
175  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_useauxorigin ),
176  m_useAuxOrigin ? trueStr : falseStr );
177  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpennumber ),
178  m_HPGLPenNum );
179 
180  // Obsolete parameter, pen speed is no more managed, because hpgl format
181  // is now an export format, and for this, pen speed has no meaning
182  // aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpenspeed ),
183  // m_HPGLPenSpeed );
184 
185  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpenspeed ),
186  m_HPGLPenSpeed );
187  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpendiameter ),
188  m_HPGLPenDiam );
189  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_psnegative ),
190  m_negative ? trueStr : falseStr );
191  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_psa4output ),
192  m_A4Output ? trueStr : falseStr );
193  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotreference ),
194  m_plotReference ? trueStr : falseStr );
195  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotvalue ),
196  m_plotValue ? trueStr : falseStr );
197  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_plotinvisibletext ),
198  m_plotInvisibleText ? trueStr : falseStr );
199  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_padsonsilk ),
200  m_plotPadsOnSilkLayer ? trueStr : falseStr );
201  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_subtractmaskfromsilk ),
202  m_subtractMaskFromSilk ? trueStr : falseStr );
203  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_outputformat ),
204  m_format );
205  aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_mirror ),
206  m_mirror ? trueStr : falseStr );
207  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_drillshape ),
208  m_drillMarks );
209  aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_scaleselection ),
210  m_scaleSelection );
211  aFormatter->Print( aNestLevel+1, "(%s %s)", getTokenName( T_outputdirectory ),
212  aFormatter->Quotew( m_outputDirectory ).c_str() );
213  aFormatter->Print( 0, ")\n" );
214 }
215 
216 
218  throw( PARSE_ERROR, IO_ERROR )
219 {
220  aParser->Parse( this );
221 }
222 
223 
224 bool PCB_PLOT_PARAMS::operator==( const PCB_PLOT_PARAMS &aPcbPlotParams ) const
225 {
226  if( m_layerSelection != aPcbPlotParams.m_layerSelection )
227  return false;
228  if( m_useGerberProtelExtensions != aPcbPlotParams.m_useGerberProtelExtensions )
229  return false;
230  if( m_useGerberAttributes != aPcbPlotParams.m_useGerberAttributes )
231  return false;
232  if( m_useGerberAttributes && m_includeGerberNetlistInfo != aPcbPlotParams.m_includeGerberNetlistInfo )
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( m_plotOutlineMode != aPcbPlotParams.m_plotOutlineMode )
247  return false;
248  if( m_useAuxOrigin != aPcbPlotParams.m_useAuxOrigin )
249  return false;
250  if( m_HPGLPenNum != aPcbPlotParams.m_HPGLPenNum )
251  return false;
252  if( m_HPGLPenSpeed != aPcbPlotParams.m_HPGLPenSpeed )
253  return false;
254  if( m_HPGLPenDiam != aPcbPlotParams.m_HPGLPenDiam )
255  return false;
256  if( m_negative != aPcbPlotParams.m_negative )
257  return false;
258  if( m_A4Output != aPcbPlotParams.m_A4Output )
259  return false;
260  if( m_plotReference != aPcbPlotParams.m_plotReference )
261  return false;
262  if( m_plotValue != aPcbPlotParams.m_plotValue )
263  return false;
264  if( m_plotInvisibleText != aPcbPlotParams.m_plotInvisibleText )
265  return false;
266  if( m_plotPadsOnSilkLayer != aPcbPlotParams.m_plotPadsOnSilkLayer )
267  return false;
268  if( m_subtractMaskFromSilk != aPcbPlotParams.m_subtractMaskFromSilk )
269  return false;
270  if( m_format != aPcbPlotParams.m_format )
271  return false;
272  if( m_mirror != aPcbPlotParams.m_mirror )
273  return false;
274  if( m_drillMarks != aPcbPlotParams.m_drillMarks )
275  return false;
276  if( m_scaleSelection != aPcbPlotParams.m_scaleSelection )
277  return false;
278  if( m_autoScale != aPcbPlotParams.m_autoScale )
279  return false;
280  if( m_scale != aPcbPlotParams.m_scale )
281  return false;
282  if( m_fineScaleAdjustX != aPcbPlotParams.m_fineScaleAdjustX )
283  return false;
284  if( m_fineScaleAdjustY != aPcbPlotParams.m_fineScaleAdjustY )
285  return false;
286  if( m_widthAdjust != aPcbPlotParams.m_widthAdjust )
287  return false;
288  if( m_color != aPcbPlotParams.m_color )
289  return false;
290  if( m_referenceColor != aPcbPlotParams.m_referenceColor )
291  return false;
292  if( m_valueColor != aPcbPlotParams.m_valueColor )
293  return false;
294  if( m_textMode != aPcbPlotParams.m_textMode )
295  return false;
296  if( !m_outputDirectory.IsSameAs( aPcbPlotParams.m_outputDirectory ) )
297  return false;
298  return true;
299 }
300 
301 
302 bool PCB_PLOT_PARAMS::operator!=( const PCB_PLOT_PARAMS &aPcbPlotParams ) const
303 {
304  return !( *this == aPcbPlotParams );
305 }
306 
307 
309 {
310  return setInt( &m_HPGLPenDiam, aValue, HPGL_PEN_DIAMETER_MIN, HPGL_PEN_DIAMETER_MAX );
311 }
312 
313 
315 {
316  return setInt( &m_HPGLPenSpeed, aValue, HPGL_PEN_SPEED_MIN, HPGL_PEN_SPEED_MAX );
317 }
318 
319 
321 {
322  return setInt( &m_lineWidth, aValue, PLOT_LINEWIDTH_MIN, PLOT_LINEWIDTH_MAX );
323 }
324 
325 // PCB_PLOT_PARAMS_PARSER
326 
328  PCB_PLOT_PARAMS_LEXER( aReader )
329 {
330 }
331 
332 
333 PCB_PLOT_PARAMS_PARSER::PCB_PLOT_PARAMS_PARSER( char* aLine, const wxString& aSource ) :
334  PCB_PLOT_PARAMS_LEXER( aLine, aSource )
335 {
336 }
337 
338 
340  throw( PARSE_ERROR, IO_ERROR )
341 {
342  T token;
343 
344  while( ( token = NextTok() ) != T_RIGHT )
345  {
346  if( token == T_EOF)
347  Unexpected( T_EOF );
348 
349  if( token == T_LEFT )
350  token = NextTok();
351 
352  if( token == T_pcbplotparams )
353  continue;
354 
355  bool skip_right = false;
356 
357  switch( token )
358  {
359  case T_layerselection:
360  {
361  token = NeedSYMBOLorNUMBER();
362 
363  const std::string& cur = CurStr();
364 
365  if( token == T_NUMBER ) // pretty 3 format had legacy Cu stack.
366  {
367  // unsigned legacy_mask = atol( cur.c_str() );
368 
369  /* It's not possible to convert a legacy Cu layer number to a new
370  Cu layer number without knowing the number or total Cu layers
371  in the legacy board. We do not have that information here.
372  So simply set all layers ON. User can turn them off in the UI.
373  This is one of the superiorities of the new Cu sequence.
374  aPcbPlotParams->m_layerSelection = LEGACY_PLUGIN::leg_mask2new( cu_count, legacy_mask );
375  */
376 
377  // sorry, use the UI once to fix:
378  aPcbPlotParams->m_layerSelection = LSET( 2, F_SilkS, B_SilkS) | LSET::AllCuMask();
379  }
380  else if( cur.find_first_of( "0x" ) == 0 ) // pretty ver. 4.
381  {
382  // skip the leading 2 0x bytes.
383  aPcbPlotParams->m_layerSelection.ParseHex( cur.c_str()+2, cur.size()-2 );
384  }
385  else
386  Expecting( "integer or hex layerSelection" );
387  }
388  break;
389 
391  aPcbPlotParams->m_useGerberProtelExtensions = parseBool();
392  break;
393 
395  aPcbPlotParams->m_useGerberAttributes = parseBool();
396  break;
397 
399  aPcbPlotParams->m_includeGerberNetlistInfo = 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  case T_hpglpenspeed:
447  aPcbPlotParams->m_HPGLPenSpeed = parseInt( HPGL_PEN_SPEED_MIN,
449  break;
450  case T_hpglpendiameter:
451  aPcbPlotParams->m_HPGLPenDiam = parseInt( HPGL_PEN_DIAMETER_MIN,
453  break;
454  case T_hpglpenoverlay:
455  // No more used. juste here for compatibility with old versions
457  break;
458  case T_pscolor:
459  NeedSYMBOL(); // This actually was never used...
460  break;
461 
462  case T_psnegative:
463  aPcbPlotParams->m_negative = parseBool();
464  break;
465 
466  case T_plotreference:
467  aPcbPlotParams->m_plotReference = parseBool();
468  break;
469 
470  case T_plotvalue:
471  aPcbPlotParams->m_plotValue = parseBool();
472  break;
473 
474  case T_plotinvisibletext:
475  aPcbPlotParams->m_plotInvisibleText = parseBool();
476  break;
477 
478  case T_padsonsilk:
479  aPcbPlotParams->m_plotPadsOnSilkLayer= parseBool();
480  break;
481 
483  aPcbPlotParams->m_subtractMaskFromSilk = parseBool();
484  break;
485 
486  case T_outputformat:
487  aPcbPlotParams->m_format = static_cast<PlotFormat>(
489  break;
490 
491  case T_mirror:
492  aPcbPlotParams->m_mirror = parseBool();
493  break;
494 
495  case T_drillshape:
496  aPcbPlotParams->m_drillMarks = static_cast<PCB_PLOT_PARAMS::DrillMarksType>
497  ( parseInt( 0, 2 ) );
498  break;
499 
500  case T_scaleselection:
501  aPcbPlotParams->m_scaleSelection = parseInt( 0, 4 );
502  break;
503 
504  case T_outputdirectory:
505  NeedSYMBOL();
506  aPcbPlotParams->m_outputDirectory = FROM_UTF8( CurText() );
507  break;
508 
509  default:
510  skipCurrent(); // skip unknown or outdated plot parameter
511  skip_right = true; // the closing right token is already read.
512  break;
513  }
514 
515  if( ! skip_right )
516  NeedRIGHT();
517  }
518 }
519 
520 
522 {
523  T token = NeedSYMBOL();
524 
525  if( token != T_false && token != T_true )
526  Expecting( "true|false" );
527 
528  return token == T_true;
529 }
530 
531 
532 int PCB_PLOT_PARAMS_PARSER::parseInt( int aMin, int aMax )
533 {
534  T token = NextTok();
535 
536  if( token != T_NUMBER )
537  Expecting( T_NUMBER );
538 
539  int val = atoi( CurText() );
540 
541  if( val < aMin )
542  val = aMin;
543  else if( val > aMax )
544  val = aMax;
545 
546  return val;
547 }
548 
549 
551 {
552  T token = NextTok();
553 
554  if( token != T_NUMBER )
555  Expecting( T_NUMBER );
556 
557  double val = strtod( CurText(), NULL );
558 
559  return val;
560 }
561 
563 {
564  int curr_level = 0;
565  T token;
566 
567  while( ( token = NextTok() ) != T_EOF )
568  {
569  if( token == T_LEFT )
570  curr_level--;
571 
572  if( token == T_RIGHT )
573  {
574  curr_level++;
575 
576  if( curr_level > 0 )
577  return;
578  }
579  }
580 }
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:639
#define HPGL_PEN_NUMBER_MAX
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_plotOutlineMode
Plot lines in outline mode.
PlotFormat
Enum PlotFormat is the set of supported output plot formats.
Definition: plot_common.h:49
bool m_excludeEdgeLayer
If false always plot (merge) the pcb edge layer on other layers.
static const int gbrDefaultPrecision
bool m_plotPadsOnSilkLayer
Allows pads outlines on silkscreen layer (when pads are also on silk screen)
#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 gerbers use a conventional set of Protel extensions instead of appending a suffix to th...
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)
COLOR4D m_valueColor
Color for plotting values.
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...
static double parseDouble(FILE_LINE_READER &aReader, const char *aLine, const char **aOutput=NULL)
Function parseDouble.
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
COLOR4D m_referenceColor
Color for plotting references.
int g_DrawDefaultLineThickness
Default line thickness in internal units used to draw or plot items using a default thickness line va...
static const char * TokenName(PCBPLOTPARAMS_T::T aTok)
Function TokenName returns the name of the token in ASCII form.
Common plot library Plot settings, and plotting engines (Postscript, Gerber, HPGL and DXF) ...
#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...
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 page coordinates.
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.
Struct PARSE_ERROR contains a filename or source description, a problem input line, a line number, a byte offset, and an error message which contains the the caller's report and his call site information: CPP source file, function, and line number.
Definition: ki_exception.h:94
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
bool operator==(const PCB_PLOT_PARAMS &aPcbPlotParams) const
bool operator!=(const PCB_PLOT_PARAMS &aPcbPlotParams) const
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
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.
const char * CurText()
Function CurText returns a pointer to the current token's text.
Definition: dsnlexer.h:479
Struct IO_ERROR is a class used to hold an error message and may be used when throwing exceptions con...
Definition: ki_exception.h:47
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 for the frame and in LINE mode)
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...
static long parseInt(const wxString &aValue, double aScalar)
Definition: gpcb_plugin.cpp:73