KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcb_io_kicad_legacy.cpp File Reference
#include <cerrno>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <pcb_io/kicad_legacy/pcb_io_kicad_legacy.h>
#include <wx/ffile.h>
#include <wx/log.h>
#include <wx/string.h>
#include <wx/filename.h>
#include <wx/wfstream.h>
#include <wx/txtstrm.h>
#include <boost/ptr_container/ptr_map.hpp>
#include <string_utils.h>
#include <macros.h>
#include <filter_reader.h>
#include <zones.h>
#include <board.h>
#include <board_design_settings.h>
#include <footprint.h>
#include <core/ignore.h>
#include <pad.h>
#include <pcb_track.h>
#include <pcb_text.h>
#include <zone.h>
#include <pcb_dimension.h>
#include <pcb_shape.h>
#include <pcb_target.h>
#include <pcb_plot_params.h>
#include <pcb_plot_params_parser.h>
#include <trigo.h>
#include <confirm.h>
#include <math/util.h>
#include <progress_reporter.h>

Go to the source code of this file.

Classes

struct  LP_CACHE
 The footprint portion of the PLUGIN API, and only for the PCB_IO_KICAD_LEGACY, so therefore is private to this implementation file, i.e. More...
 

Macros

#define FIRST_LAYER   0
 
#define FIRST_COPPER_LAYER   0
 
#define LAYER_N_BACK   0
 
#define LAYER_N_2   1
 
#define LAYER_N_3   2
 
#define LAYER_N_4   3
 
#define LAYER_N_5   4
 
#define LAYER_N_6   5
 
#define LAYER_N_7   6
 
#define LAYER_N_8   7
 
#define LAYER_N_9   8
 
#define LAYER_N_10   9
 
#define LAYER_N_11   10
 
#define LAYER_N_12   11
 
#define LAYER_N_13   12
 
#define LAYER_N_14   13
 
#define LAYER_N_15   14
 
#define LAYER_N_FRONT   15
 
#define LAST_COPPER_LAYER   LAYER_N_FRONT
 
#define FIRST_NON_COPPER_LAYER   16
 
#define ADHESIVE_N_BACK   16
 
#define ADHESIVE_N_FRONT   17
 
#define SOLDERPASTE_N_BACK   18
 
#define SOLDERPASTE_N_FRONT   19
 
#define SILKSCREEN_N_BACK   20
 
#define SILKSCREEN_N_FRONT   21
 
#define SOLDERMASK_N_BACK   22
 
#define SOLDERMASK_N_FRONT   23
 
#define DRAW_N   24
 
#define COMMENT_N   25
 
#define ECO1_N   26
 
#define ECO2_N   27
 
#define EDGE_N   28
 
#define LAST_NON_COPPER_LAYER   28
 
#define LAYER_BACK   (1 << LAYER_N_BACK)
 bit mask for copper layer
 
#define LAYER_2   (1 << LAYER_N_2)
 bit mask for layer 2
 
#define LAYER_3   (1 << LAYER_N_3)
 bit mask for layer 3
 
#define LAYER_4   (1 << LAYER_N_4)
 bit mask for layer 4
 
#define LAYER_5   (1 << LAYER_N_5)
 bit mask for layer 5
 
#define LAYER_6   (1 << LAYER_N_6)
 bit mask for layer 6
 
#define LAYER_7   (1 << LAYER_N_7)
 bit mask for layer 7
 
#define LAYER_8   (1 << LAYER_N_8)
 bit mask for layer 8
 
#define LAYER_9   (1 << LAYER_N_9)
 bit mask for layer 9
 
#define LAYER_10   (1 << LAYER_N_10)
 bit mask for layer 10
 
#define LAYER_11   (1 << LAYER_N_11)
 bit mask for layer 11
 
#define LAYER_12   (1 << LAYER_N_12)
 bit mask for layer 12
 
#define LAYER_13   (1 << LAYER_N_13)
 bit mask for layer 13
 
#define LAYER_14   (1 << LAYER_N_14)
 bit mask for layer 14
 
#define LAYER_15   (1 << LAYER_N_15)
 bit mask for layer 15
 
#define LAYER_FRONT   (1 << LAYER_N_FRONT)
 bit mask for component layer
 
#define ADHESIVE_LAYER_BACK   (1 << ADHESIVE_N_BACK)
 
#define ADHESIVE_LAYER_FRONT   (1 << ADHESIVE_N_FRONT)
 
#define SOLDERPASTE_LAYER_BACK   (1 << SOLDERPASTE_N_BACK)
 
#define SOLDERPASTE_LAYER_FRONT   (1 << SOLDERPASTE_N_FRONT)
 
#define SILKSCREEN_LAYER_BACK   (1 << SILKSCREEN_N_BACK)
 
#define SILKSCREEN_LAYER_FRONT   (1 << SILKSCREEN_N_FRONT)
 
#define SOLDERMASK_LAYER_BACK   (1 << SOLDERMASK_N_BACK)
 
#define SOLDERMASK_LAYER_FRONT   (1 << SOLDERMASK_N_FRONT)
 
#define DRAW_LAYER   (1 << DRAW_N)
 
#define COMMENT_LAYER   (1 << COMMENT_N)
 
#define ECO1_LAYER   (1 << ECO1_N)
 
#define ECO2_LAYER   (1 << ECO2_N)
 
#define EDGE_LAYER   (1 << EDGE_N)
 
#define ALL_NO_CU_LAYERS   0x1FFF0000
 
#define ALL_CU_LAYERS   0x0000FFFF
 
#define FRONT_TECH_LAYERS
 
#define BACK_TECH_LAYERS
 
#define ALL_TECH_LAYERS   (FRONT_TECH_LAYERS | BACK_TECH_LAYERS)
 
#define BACK_LAYERS   (LAYER_BACK | BACK_TECH_LAYERS)
 
#define FRONT_LAYERS   (LAYER_FRONT | FRONT_TECH_LAYERS)
 
#define ALL_USER_LAYERS   (DRAW_LAYER | COMMENT_LAYER | ECO1_LAYER | ECO2_LAYER )
 
#define NO_LAYERS   0x00000000
 
#define PCB_LEGACY_TEXT_is_REFERENCE   0
 
#define PCB_LEGACY_TEXT_is_VALUE   1
 
#define PCB_LEGACY_TEXT_is_DIVERS   2
 
#define PCB_LEGACY_INTERNAL_UNIT   10000
 
#define SZ(x)   (sizeof(x)-1)
 Get the length of a string constant, at compile time.
 
#define MASK(x)   (1<<(x))
 
#define TESTLINE(x)   ( !strncasecmp( line, x, SZ( x ) ) && isSpace( line[SZ( x )] ) )
 C string compare test for a specific length of characters.
 
#define TESTSUBSTR(x)   ( !strncasecmp( line, x, SZ( x ) ) )
 C sub-string compare test for a specific length of characters.
 
#define READLINE(rdr)   rdr->ReadLine()
 

Typedefs

typedef PCB_IO_KICAD_LEGACY::BIU BIU
 
typedef uint32_t LEG_MASK
 
typedef unsigned LAYER_MSK
 
typedef boost::ptr_map< std::string, FOOTPRINTFOOTPRINT_MAP
 

Functions

static bool isSpace (int c)
 
static GR_TEXT_H_ALIGN_T horizJustify (const char *horizontal)
 
static GR_TEXT_V_ALIGN_T vertJustify (const char *vertical)
 
int layerMaskCountSet (LEG_MASK aMask)
 Count the number of set layers in the mask.
 
bool is_leg_copperlayer_valid (int aCu_Count, int aLegacyLayerNum)
 
static int intParse (const char *next, const char **out=nullptr)
 Parse an ASCII integer string with possible leading whitespace into an integer and updates the pointer at out if it is not NULL, just like "man strtol()".
 
static uint32_t hexParse (const char *next, const char **out=nullptr)
 Parse an ASCII hex integer string with possible leading whitespace into a long integer and updates the pointer at out if it is not nullptr, just like "man strtol".
 

Variables

static const char delims [] = " \t\r\n"
 

Macro Definition Documentation

◆ ADHESIVE_LAYER_BACK

#define ADHESIVE_LAYER_BACK   (1 << ADHESIVE_N_BACK)

Definition at line 155 of file pcb_io_kicad_legacy.cpp.

◆ ADHESIVE_LAYER_FRONT

#define ADHESIVE_LAYER_FRONT   (1 << ADHESIVE_N_FRONT)

Definition at line 156 of file pcb_io_kicad_legacy.cpp.

◆ ADHESIVE_N_BACK

#define ADHESIVE_N_BACK   16

Definition at line 122 of file pcb_io_kicad_legacy.cpp.

◆ ADHESIVE_N_FRONT

#define ADHESIVE_N_FRONT   17

Definition at line 123 of file pcb_io_kicad_legacy.cpp.

◆ ALL_CU_LAYERS

#define ALL_CU_LAYERS   0x0000FFFF

Definition at line 173 of file pcb_io_kicad_legacy.cpp.

◆ ALL_NO_CU_LAYERS

#define ALL_NO_CU_LAYERS   0x1FFF0000

Definition at line 172 of file pcb_io_kicad_legacy.cpp.

◆ ALL_TECH_LAYERS

#define ALL_TECH_LAYERS   (FRONT_TECH_LAYERS | BACK_TECH_LAYERS)

Definition at line 178 of file pcb_io_kicad_legacy.cpp.

◆ ALL_USER_LAYERS

#define ALL_USER_LAYERS   (DRAW_LAYER | COMMENT_LAYER | ECO1_LAYER | ECO2_LAYER )

Definition at line 182 of file pcb_io_kicad_legacy.cpp.

◆ BACK_LAYERS

#define BACK_LAYERS   (LAYER_BACK | BACK_TECH_LAYERS)

Definition at line 179 of file pcb_io_kicad_legacy.cpp.

◆ BACK_TECH_LAYERS

#define BACK_TECH_LAYERS
Value:

Definition at line 176 of file pcb_io_kicad_legacy.cpp.

◆ COMMENT_LAYER

#define COMMENT_LAYER   (1 << COMMENT_N)

Definition at line 164 of file pcb_io_kicad_legacy.cpp.

◆ COMMENT_N

#define COMMENT_N   25

Definition at line 131 of file pcb_io_kicad_legacy.cpp.

◆ DRAW_LAYER

#define DRAW_LAYER   (1 << DRAW_N)

Definition at line 163 of file pcb_io_kicad_legacy.cpp.

◆ DRAW_N

#define DRAW_N   24

Definition at line 130 of file pcb_io_kicad_legacy.cpp.

◆ ECO1_LAYER

#define ECO1_LAYER   (1 << ECO1_N)

Definition at line 165 of file pcb_io_kicad_legacy.cpp.

◆ ECO1_N

#define ECO1_N   26

Definition at line 132 of file pcb_io_kicad_legacy.cpp.

◆ ECO2_LAYER

#define ECO2_LAYER   (1 << ECO2_N)

Definition at line 166 of file pcb_io_kicad_legacy.cpp.

◆ ECO2_N

#define ECO2_N   27

Definition at line 133 of file pcb_io_kicad_legacy.cpp.

◆ EDGE_LAYER

#define EDGE_LAYER   (1 << EDGE_N)

Definition at line 167 of file pcb_io_kicad_legacy.cpp.

◆ EDGE_N

#define EDGE_N   28

Definition at line 134 of file pcb_io_kicad_legacy.cpp.

◆ FIRST_COPPER_LAYER

#define FIRST_COPPER_LAYER   0

Definition at line 102 of file pcb_io_kicad_legacy.cpp.

◆ FIRST_LAYER

#define FIRST_LAYER   0

Definition at line 101 of file pcb_io_kicad_legacy.cpp.

◆ FIRST_NON_COPPER_LAYER

#define FIRST_NON_COPPER_LAYER   16

Definition at line 121 of file pcb_io_kicad_legacy.cpp.

◆ FRONT_LAYERS

#define FRONT_LAYERS   (LAYER_FRONT | FRONT_TECH_LAYERS)

Definition at line 180 of file pcb_io_kicad_legacy.cpp.

◆ FRONT_TECH_LAYERS

#define FRONT_TECH_LAYERS
Value:

Definition at line 174 of file pcb_io_kicad_legacy.cpp.

◆ LAST_COPPER_LAYER

#define LAST_COPPER_LAYER   LAYER_N_FRONT

Definition at line 119 of file pcb_io_kicad_legacy.cpp.

◆ LAST_NON_COPPER_LAYER

#define LAST_NON_COPPER_LAYER   28

Definition at line 135 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_10

#define LAYER_10   (1 << LAYER_N_10)

bit mask for layer 10

Definition at line 148 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_11

#define LAYER_11   (1 << LAYER_N_11)

bit mask for layer 11

Definition at line 149 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_12

#define LAYER_12   (1 << LAYER_N_12)

bit mask for layer 12

Definition at line 150 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_13

#define LAYER_13   (1 << LAYER_N_13)

bit mask for layer 13

Definition at line 151 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_14

#define LAYER_14   (1 << LAYER_N_14)

bit mask for layer 14

Definition at line 152 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_15

#define LAYER_15   (1 << LAYER_N_15)

bit mask for layer 15

Definition at line 153 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_2

#define LAYER_2   (1 << LAYER_N_2)

bit mask for layer 2

Definition at line 140 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_3

#define LAYER_3   (1 << LAYER_N_3)

bit mask for layer 3

Definition at line 141 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_4

#define LAYER_4   (1 << LAYER_N_4)

bit mask for layer 4

Definition at line 142 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_5

#define LAYER_5   (1 << LAYER_N_5)

bit mask for layer 5

Definition at line 143 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_6

#define LAYER_6   (1 << LAYER_N_6)

bit mask for layer 6

Definition at line 144 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_7

#define LAYER_7   (1 << LAYER_N_7)

bit mask for layer 7

Definition at line 145 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_8

#define LAYER_8   (1 << LAYER_N_8)

bit mask for layer 8

Definition at line 146 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_9

#define LAYER_9   (1 << LAYER_N_9)

bit mask for layer 9

Definition at line 147 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_BACK

#define LAYER_BACK   (1 << LAYER_N_BACK)

bit mask for copper layer

Definition at line 139 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_FRONT

#define LAYER_FRONT   (1 << LAYER_N_FRONT)

bit mask for component layer

Definition at line 154 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_10

#define LAYER_N_10   9

Definition at line 112 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_11

#define LAYER_N_11   10

Definition at line 113 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_12

#define LAYER_N_12   11

Definition at line 114 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_13

#define LAYER_N_13   12

Definition at line 115 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_14

#define LAYER_N_14   13

Definition at line 116 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_15

#define LAYER_N_15   14

Definition at line 117 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_2

#define LAYER_N_2   1

Definition at line 104 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_3

#define LAYER_N_3   2

Definition at line 105 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_4

#define LAYER_N_4   3

Definition at line 106 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_5

#define LAYER_N_5   4

Definition at line 107 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_6

#define LAYER_N_6   5

Definition at line 108 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_7

#define LAYER_N_7   6

Definition at line 109 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_8

#define LAYER_N_8   7

Definition at line 110 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_9

#define LAYER_N_9   8

Definition at line 111 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_BACK

#define LAYER_N_BACK   0

Definition at line 103 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_N_FRONT

#define LAYER_N_FRONT   15

Definition at line 118 of file pcb_io_kicad_legacy.cpp.

◆ MASK

#define MASK (   x)    (1<<(x))

Definition at line 202 of file pcb_io_kicad_legacy.cpp.

◆ NO_LAYERS

#define NO_LAYERS   0x00000000

Definition at line 184 of file pcb_io_kicad_legacy.cpp.

◆ PCB_LEGACY_INTERNAL_UNIT

#define PCB_LEGACY_INTERNAL_UNIT   10000

Definition at line 191 of file pcb_io_kicad_legacy.cpp.

◆ PCB_LEGACY_TEXT_is_DIVERS

#define PCB_LEGACY_TEXT_is_DIVERS   2

Definition at line 188 of file pcb_io_kicad_legacy.cpp.

◆ PCB_LEGACY_TEXT_is_REFERENCE

#define PCB_LEGACY_TEXT_is_REFERENCE   0

Definition at line 186 of file pcb_io_kicad_legacy.cpp.

◆ PCB_LEGACY_TEXT_is_VALUE

#define PCB_LEGACY_TEXT_is_VALUE   1

Definition at line 187 of file pcb_io_kicad_legacy.cpp.

◆ READLINE

#define READLINE (   rdr)    rdr->ReadLine()

Definition at line 237 of file pcb_io_kicad_legacy.cpp.

◆ SILKSCREEN_LAYER_BACK

#define SILKSCREEN_LAYER_BACK   (1 << SILKSCREEN_N_BACK)

Definition at line 159 of file pcb_io_kicad_legacy.cpp.

◆ SILKSCREEN_LAYER_FRONT

#define SILKSCREEN_LAYER_FRONT   (1 << SILKSCREEN_N_FRONT)

Definition at line 160 of file pcb_io_kicad_legacy.cpp.

◆ SILKSCREEN_N_BACK

#define SILKSCREEN_N_BACK   20

Definition at line 126 of file pcb_io_kicad_legacy.cpp.

◆ SILKSCREEN_N_FRONT

#define SILKSCREEN_N_FRONT   21

Definition at line 127 of file pcb_io_kicad_legacy.cpp.

◆ SOLDERMASK_LAYER_BACK

#define SOLDERMASK_LAYER_BACK   (1 << SOLDERMASK_N_BACK)

Definition at line 161 of file pcb_io_kicad_legacy.cpp.

◆ SOLDERMASK_LAYER_FRONT

#define SOLDERMASK_LAYER_FRONT   (1 << SOLDERMASK_N_FRONT)

Definition at line 162 of file pcb_io_kicad_legacy.cpp.

◆ SOLDERMASK_N_BACK

#define SOLDERMASK_N_BACK   22

Definition at line 128 of file pcb_io_kicad_legacy.cpp.

◆ SOLDERMASK_N_FRONT

#define SOLDERMASK_N_FRONT   23

Definition at line 129 of file pcb_io_kicad_legacy.cpp.

◆ SOLDERPASTE_LAYER_BACK

#define SOLDERPASTE_LAYER_BACK   (1 << SOLDERPASTE_N_BACK)

Definition at line 157 of file pcb_io_kicad_legacy.cpp.

◆ SOLDERPASTE_LAYER_FRONT

#define SOLDERPASTE_LAYER_FRONT   (1 << SOLDERPASTE_N_FRONT)

Definition at line 158 of file pcb_io_kicad_legacy.cpp.

◆ SOLDERPASTE_N_BACK

#define SOLDERPASTE_N_BACK   18

Definition at line 124 of file pcb_io_kicad_legacy.cpp.

◆ SOLDERPASTE_N_FRONT

#define SOLDERPASTE_N_FRONT   19

Definition at line 125 of file pcb_io_kicad_legacy.cpp.

◆ SZ

#define SZ (   x)    (sizeof(x)-1)

Get the length of a string constant, at compile time.

Definition at line 194 of file pcb_io_kicad_legacy.cpp.

◆ TESTLINE

#define TESTLINE (   x)    ( !strncasecmp( line, x, SZ( x ) ) && isSpace( line[SZ( x )] ) )

C string compare test for a specific length of characters.

Definition at line 230 of file pcb_io_kicad_legacy.cpp.

◆ TESTSUBSTR

#define TESTSUBSTR (   x)    ( !strncasecmp( line, x, SZ( x ) ) )

C sub-string compare test for a specific length of characters.

Definition at line 233 of file pcb_io_kicad_legacy.cpp.

Typedef Documentation

◆ BIU

Definition at line 96 of file pcb_io_kicad_legacy.cpp.

◆ FOOTPRINT_MAP

typedef boost::ptr_map< std::string, FOOTPRINT > FOOTPRINT_MAP

Definition at line 2994 of file pcb_io_kicad_legacy.cpp.

◆ LAYER_MSK

typedef unsigned LAYER_MSK

Definition at line 138 of file pcb_io_kicad_legacy.cpp.

◆ LEG_MASK

typedef uint32_t LEG_MASK

Definition at line 99 of file pcb_io_kicad_legacy.cpp.

Function Documentation

◆ hexParse()

static uint32_t hexParse ( const char *  next,
const char **  out = nullptr 
)
inlinestatic

Parse an ASCII hex integer string with possible leading whitespace into a long integer and updates the pointer at out if it is not nullptr, just like "man strtol".

I can use this without casting, and its name says what I am doing.

Definition at line 406 of file pcb_io_kicad_legacy.cpp.

References next().

Referenced by PCB_IO_KICAD_LEGACY::loadFOOTPRINT(), PCB_IO_KICAD_LEGACY::loadGENERAL(), PCB_IO_KICAD_LEGACY::loadPAD(), PCB_IO_KICAD_LEGACY::loadPCB_LINE(), and PCB_IO_KICAD_LEGACY::loadSETUP().

◆ horizJustify()

static GR_TEXT_H_ALIGN_T horizJustify ( const char *  horizontal)
static

◆ intParse()

static int intParse ( const char *  next,
const char **  out = nullptr 
)
inlinestatic

◆ is_leg_copperlayer_valid()

bool is_leg_copperlayer_valid ( int  aCu_Count,
int  aLegacyLayerNum 
)
inline

◆ isSpace()

static bool isSpace ( int  c)
inlinestatic

Definition at line 200 of file pcb_io_kicad_legacy.cpp.

References delims.

◆ layerMaskCountSet()

int layerMaskCountSet ( LEG_MASK  aMask)

Count the number of set layers in the mask.

Definition at line 286 of file pcb_io_kicad_legacy.cpp.

Referenced by PCB_IO_KICAD_LEGACY::loadGENERAL().

◆ vertJustify()

static GR_TEXT_V_ALIGN_T vertJustify ( const char *  vertical)
static

Variable Documentation

◆ delims

const char delims[] = " \t\r\n"
static

Definition at line 197 of file pcb_io_kicad_legacy.cpp.

Referenced by isSpace(), and LP_CACHE::ReadAndVerifyHeader().