KiCad PCB EDA Suite
rs274_read_XY_and_IJ_coordinates.cpp File Reference
#include <fctsys.h>
#include <common.h>
#include <gerber_file_image.h>
#include <base_units.h>

Go to the source code of this file.

Macros

#define SCALE_LIST_SIZE   9
 

Functions

int scaletoIU (double aCoord, bool isMetric)
 Function scaletoIU converts a distance given in floating point to our internal units. More...
 
int ReadInt (char *&text, bool aSkipSeparator=true)
 Function ReadInt reads an int from an ASCII character buffer. More...
 
double ReadDouble (char *&text, bool aSkipSeparator=true)
 Function ReadDouble reads a double from an ASCII character buffer. More...
 

Variables

static double scale_list [SCALE_LIST_SIZE]
 

Macro Definition Documentation

#define SCALE_LIST_SIZE   9

Definition at line 40 of file rs274_read_XY_and_IJ_coordinates.cpp.

Function Documentation

double ReadDouble ( char *&  text,
bool  aSkipSeparator = true 
)

Function ReadDouble reads a double from an ASCII character buffer.

If there is a comma after the double, then skip over that.

Parameters
textA reference to a character pointer from which the ASCII double is read from and the pointer advanced for each character read.
aSkipSeparator= true (default) to skip comma
Returns
double

Definition at line 322 of file rs274_read_XY_and_IJ_coordinates.cpp.

Referenced by computeCenter(), GERBER_FILE_IMAGE::ExecuteRS274XCommand(), AM_PARAM::ReadParam(), and EXCELLON_IMAGE::readToolInformation().

323 {
324  double ret;
325 
326  // For strtod, a string starting by 0X or 0x is a valid number in hexadecimal or octal.
327  // However, 'X' is a separator in Gerber strings with numbers.
328  // We need to detect that
329  if( strncasecmp( text, "0X", 2 ) == 0 )
330  {
331  text++;
332  ret = 0.0;
333  }
334  else
335  ret = strtod( text, &text );
336 
337  if( *text == ',' || isspace( *text ) )
338  {
339  if( aSkipSeparator )
340  ++text;
341  }
342 
343  return ret;
344 }
int ReadInt ( char *&  text,
bool  aSkipSeparator = true 
)

Function ReadInt reads an int from an ASCII character buffer.

If there is a comma after the int, then skip over that.

Parameters
textA reference to a character pointer from which bytes are read and the pointer is advanced for each byte read.
aSkipSeparator= true (default) to skip comma
Returns
int - The int read in.

Definition at line 288 of file rs274_read_XY_and_IJ_coordinates.cpp.

Referenced by computeCenter(), GERBER_FILE_IMAGE::ExecuteRS274XCommand(), GERBER_FILE_IMAGE::ReadApertureMacro(), AM_PARAM::ReadParam(), and EXCELLON_IMAGE::readToolInformation().

289 {
290  int ret;
291 
292  // For strtol, a string starting by 0X or 0x is a valid number in hexadecimal or octal.
293  // However, 'X' is a separator in Gerber strings with numbers.
294  // We need to detect that
295  if( strncasecmp( text, "0X", 2 ) == 0 )
296  {
297  text++;
298  ret = 0;
299  }
300  else
301  ret = (int) strtol( text, &text, 10 );
302 
303  if( *text == ',' || isspace( *text ) )
304  {
305  if( aSkipSeparator )
306  ++text;
307  }
308 
309  return ret;
310 }
int scaletoIU ( double  aCoord,
bool  isMetric 
)

Function scaletoIU converts a distance given in floating point to our internal units.

Definition at line 59 of file rs274_read_XY_and_IJ_coordinates.cpp.

References IU_PER_MILS, and KiROUND().

Referenced by AM_PRIMITIVE::ConvertShapeToPolygon(), AM_PRIMITIVE::DrawBasicShape(), AM_PRIMITIVE::GetShapeDim(), mapPt(), and GERBER_FILE_IMAGE::StepAndRepeatItem().

60 {
61  int ret;
62 
63  if( isMetric ) // gerber are units in mm
64  ret = KiROUND( aCoord * IU_PER_MM );
65  else // gerber are units in inches
66  ret = KiROUND( aCoord * IU_PER_MILS * 1000.0 );
67 
68  return ret;
69 }
static int KiROUND(double v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: common.h:120
#define IU_PER_MILS
Definition: plotter.cpp:134

Variable Documentation

double scale_list[SCALE_LIST_SIZE]
static
Initial value:
=
{
1000.0 * IU_PER_MILS,
100.0 * IU_PER_MILS,
10.0 * IU_PER_MILS,
1.0 * IU_PER_MILS,
0.1 * IU_PER_MILS,
0.01 * IU_PER_MILS,
0.001 * IU_PER_MILS,
0.0001 * IU_PER_MILS,
0.00001 * IU_PER_MILS,
}
#define IU_PER_MILS
Definition: plotter.cpp:134

Definition at line 41 of file rs274_read_XY_and_IJ_coordinates.cpp.

Referenced by GERBER_FILE_IMAGE::ReadIJCoord(), and GERBER_FILE_IMAGE::ReadXYCoord().