KiCad PCB EDA Suite
DSN Namespace Reference

This source file implements export and import capabilities to the specctra dsn file format. More...

Classes

class  ANCESTOR
 
class  BOUNDARY
 
class  CIRCLE
 
class  CLASS
 The <class_descriptor> in the specctra spec. More...
 
class  CLASS_CLASS
 
class  CLASSES
 
class  COMP_ORDER
 The <component_order_descriptor>. More...
 
class  COMPONENT
 Implement a <component_descriptor> in the specctra dsn spec. More...
 
class  CONNECT
 
class  CONTROL
 
class  COPPER_PLANE
 A <plane_descriptor> in the specctra dsn spec. More...
 
class  ELEM
 A base class for any DSN element class. More...
 
class  ELEM_HOLDER
 A holder for any DSN class. More...
 
class  FROMTO
 
class  GRID
 
class  HISTORY
 
class  IMAGE
 
class  KEEPOUT
 Used for <keepout_descriptor> and <plane_descriptor>. More...
 
class  LAYER
 
class  LAYER_NOISE_WEIGHT
 
class  LAYER_RULE
 
class  LIBRARY
 A <library_descriptor> in the specctra dsn specification. More...
 
class  NET
 A <net_descriptor> in the DSN spec. More...
 
class  NET_OUT
 A <net_out_descriptor> of the specctra dsn spec. More...
 
class  NETWORK
 
class  PADSTACK
 Hold either a via or a pad definition. More...
 
class  PARSER
 A configuration record per the SPECCTRA DSN file spec. More...
 
class  PATH
 Support both the <path_descriptor> and the <polygon_descriptor> per the specctra dsn spec. More...
 
class  PCB
 
class  PIN
 
struct  PIN_PAIR
 Used within the WAS_IS class below to hold a pair of PIN_REFs and corresponds to the (pins was is) construct within the specctra dsn spec. More...
 
struct  PIN_REF
 A <pin_reference> definition in the specctra dsn spec. More...
 
class  PLACE
 Implement a <placement_reference> in the specctra dsn spec. More...
 
class  PLACEMENT
 
struct  POINT
 A point in the SPECCTRA DSN coordinate system. More...
 
struct  PROPERTY
 
class  QARC
 
class  RECTANGLE
 
class  REGION
 
class  ROUTE
 
class  RULE
 A <rule_descriptor> in the specctra dsn spec. More...
 
class  SESSION
 A <session_file_descriptor> in the specctra dsn spec. More...
 
class  SHAPE
 A "(shape ..)" element in the specctra dsn spec. More...
 
class  SPECCTRA_DB
 A DSN data tree, usually coming from a DSN file. More...
 
class  SPECCTRA_LAYER_PAIR
 
class  STRINGPROP
 A container for a single property whose value is a string. More...
 
class  STRUCTURE
 
class  STRUCTURE_OUT
 
class  SUPPLY_PIN
 A <supply_pin_descriptor> in the specctra dsn spec. More...
 
class  TOKPROP
 A container for a single property whose value is another DSN_T token. More...
 
class  TOPOLOGY
 
class  UNIT_RES
 A holder for either a T_unit or T_resolution object which are usually mutually exclusive in the dsn grammar, except within the T_pcb level. More...
 
class  VIA
 A <via_descriptor> in the specctra dsn spec. More...
 
class  WAS_IS
 A <was_is_descriptor> in the specctra dsn spec. More...
 
class  WINDOW
 
class  WIRE
 A <wire_shape_descriptor> in the specctra dsn spec. More...
 
class  WIRE_VIA
 A <wire_via_descriptor> in the specctra dsn spec. More...
 
class  WIRING
 A <wiring_descriptor> in the specctra dsn spec. More...
 

Typedefs

typedef std::vector< std::string > STRINGS
 
typedef std::vector< POINTPOINTS
 
typedef std::vector< PROPERTYPROPERTIES
 
typedef boost::ptr_vector< LAYER_RULELAYER_RULES
 
typedef boost::ptr_vector< PATHPATHS
 
typedef boost::ptr_vector< WINDOWWINDOWS
 
typedef boost::ptr_vector< KEEPOUTKEEPOUTS
 
typedef boost::ptr_vector< LAYERLAYERS
 
typedef boost::ptr_vector< SPECCTRA_LAYER_PAIRSPECCTRA_LAYER_PAIRS
 
typedef boost::ptr_vector< COPPER_PLANECOPPER_PLANES
 
typedef boost::ptr_vector< PLACEPLACES
 
typedef boost::ptr_vector< COMPONENTCOMPONENTS
 
typedef boost::ptr_vector< PINPINS
 
typedef boost::ptr_vector< IMAGEIMAGES
 
typedef boost::ptr_vector< PADSTACKPADSTACKS
 
typedef std::vector< PIN_REFPIN_REFS
 
typedef boost::ptr_vector< FROMTOFROMTOS
 
typedef boost::ptr_vector< COMP_ORDERCOMP_ORDERS
 
typedef boost::ptr_vector< NETNETS
 
typedef boost::ptr_vector< CLASSCLASSLIST
 
typedef boost::ptr_vector< WIREWIRES
 
typedef boost::ptr_vector< WIRE_VIAWIRE_VIAS
 
typedef boost::ptr_vector< ANCESTORANCESTORS
 
typedef boost::ptr_vector< SUPPLY_PINSUPPLY_PINS
 
typedef boost::ptr_vector< NET_OUTNET_OUTS
 
typedef std::vector< PIN_PAIRPIN_PAIRS
 
typedef boost::ptr_set< PADSTACKPADSTACKSET
 
typedef std::map< wxString, int > PINMAP
 data type used to ensure unique-ness of pin names, holding (wxString and int) More...
 
typedef std::set< std::string > STRINGSET
 
typedef std::pair< STRINGSET::iterator, bool > STRINGSET_PAIR
 

Functions

const char * GetTokenText (T aTok)
 The DSN namespace and returns the C string representing a SPECCTRA_DB::keyword. More...
 
bool operator< (const PADSTACK &lhs, const PADSTACK &rhs)
 Used by the PADSTACKSET boost::ptr_set below. More...
 
static double scale (int kicadDist)
 Convert a distance from Pcbnew internal units to the reported Specctra DSN units in floating point format. More...
 
static double IU2um (int kicadDist)
 
static double mapX (int x)
 
static double mapY (int y)
 
static POINT mapPt (const wxPoint &pt)
 Convert a KiCad point into a DSN file point. More...
 
static bool isRoundKeepout (PAD *aPad)
 Decide if the pad is a copper-less through hole which needs to be made into a round keepout. More...
 
static PATHmakePath (const POINT &aStart, const POINT &aEnd, const std::string &aLayerName)
 Create a PATH element with a single straight line, a pair of vertices. More...
 
static int scale (double distance, UNIT_RES *aResolution)
 Function scale converts a session file distance to KiCad units of deci-mils. More...
 
static wxPoint mapPt (const POINT &aPoint, UNIT_RES *aResolution)
 Function mapPt translates a point from the Specctra Session format coordinate system to the KiCad coordinate system. More...
 

Detailed Description

This source file implements export and import capabilities to the specctra dsn file format.

The grammar for that file format is documented fairly well. There are classes for each major type of descriptor in the spec.

Since there are so many classes in here, it may be helpful to generate the Doxygen directory:

$ cd &ltkicadSourceRoot&gt $ doxygen

Then you can view the html documentation in the &ltkicadSourceRoot&gt/doxygen directory. The main class in this file is SPECCTRA_DB and its main functions are LoadPCB(), LoadSESSION(), and ExportPCB().

Wide use is made of boost::ptr_vector&lt&gt and std::vector&lt&gt template classes. If the contained object is small, then std::vector tends to be used. If the contained object is large, variable size, or would require writing an assignment operator() or copy constructor, then boost::ptr_vector cannot be beat.

Typedef Documentation

◆ ANCESTORS

typedef boost::ptr_vector<ANCESTOR> DSN::ANCESTORS

Definition at line 3304 of file specctra.h.

◆ CLASSLIST

typedef boost::ptr_vector<CLASS> DSN::CLASSLIST

Definition at line 2839 of file specctra.h.

◆ COMP_ORDERS

typedef boost::ptr_vector<COMP_ORDER> DSN::COMP_ORDERS

Definition at line 2591 of file specctra.h.

◆ COMPONENTS

typedef boost::ptr_vector<COMPONENT> DSN::COMPONENTS

Definition at line 1812 of file specctra.h.

◆ COPPER_PLANES

typedef boost::ptr_vector<COPPER_PLANE> DSN::COPPER_PLANES

Definition at line 1363 of file specctra.h.

◆ FROMTOS

typedef boost::ptr_vector<FROMTO> DSN::FROMTOS

Definition at line 2555 of file specctra.h.

◆ IMAGES

typedef boost::ptr_vector<IMAGE> DSN::IMAGES

Definition at line 2120 of file specctra.h.

◆ KEEPOUTS

typedef boost::ptr_vector<KEEPOUT> DSN::KEEPOUTS

Definition at line 1032 of file specctra.h.

◆ LAYER_RULES

typedef boost::ptr_vector<LAYER_RULE> DSN::LAYER_RULES

Definition at line 575 of file specctra.h.

◆ LAYERS

typedef boost::ptr_vector<LAYER> DSN::LAYERS

Definition at line 1291 of file specctra.h.

◆ NET_OUTS

typedef boost::ptr_vector<NET_OUT> DSN::NET_OUTS

Definition at line 3451 of file specctra.h.

◆ NETS

typedef boost::ptr_vector<NET> DSN::NETS

Definition at line 2721 of file specctra.h.

◆ PADSTACKS

typedef boost::ptr_vector<PADSTACK> DSN::PADSTACKS

Definition at line 2239 of file specctra.h.

◆ PADSTACKSET

typedef boost::ptr_set<PADSTACK> DSN::PADSTACKSET

Definition at line 3641 of file specctra.h.

◆ PATHS

typedef boost::ptr_vector<PATH> DSN::PATHS

Definition at line 657 of file specctra.h.

◆ PIN_PAIRS

typedef std::vector<PIN_PAIR> DSN::PIN_PAIRS

Definition at line 3539 of file specctra.h.

◆ PIN_REFS

typedef std::vector<PIN_REF> DSN::PIN_REFS

Definition at line 2485 of file specctra.h.

◆ PINMAP

typedef std::map<wxString, int> DSN::PINMAP

data type used to ensure unique-ness of pin names, holding (wxString and int)

Definition at line 609 of file specctra_export.cpp.

◆ PINS

typedef boost::ptr_vector<PIN> DSN::PINS

Definition at line 2001 of file specctra.h.

◆ PLACES

typedef boost::ptr_vector<PLACE> DSN::PLACES

Definition at line 1761 of file specctra.h.

◆ POINTS

typedef std::vector<POINT> DSN::POINTS

Definition at line 167 of file specctra.h.

◆ PROPERTIES

typedef std::vector<PROPERTY> DSN::PROPERTIES

Definition at line 192 of file specctra.h.

◆ SPECCTRA_LAYER_PAIRS

typedef boost::ptr_vector<SPECCTRA_LAYER_PAIR> DSN::SPECCTRA_LAYER_PAIRS

Definition at line 1321 of file specctra.h.

◆ STRINGS

typedef std::vector<std::string> DSN::STRINGS

Definition at line 166 of file specctra.h.

◆ STRINGSET

typedef std::set<std::string> DSN::STRINGSET

Definition at line 1086 of file specctra_export.cpp.

◆ STRINGSET_PAIR

typedef std::pair<STRINGSET::iterator, bool> DSN::STRINGSET_PAIR

Definition at line 1087 of file specctra_export.cpp.

◆ SUPPLY_PINS

typedef boost::ptr_vector<SUPPLY_PIN> DSN::SUPPLY_PINS

Definition at line 3394 of file specctra.h.

◆ WINDOWS

typedef boost::ptr_vector<WINDOW> DSN::WINDOWS

Definition at line 899 of file specctra.h.

◆ WIRE_VIAS

typedef boost::ptr_vector<WIRE_VIA> DSN::WIRE_VIAS

Definition at line 3130 of file specctra.h.

◆ WIRES

typedef boost::ptr_vector<WIRE> DSN::WIRES

Definition at line 2983 of file specctra.h.

Function Documentation

◆ GetTokenText()

const char * DSN::GetTokenText ( aTok)

The DSN namespace and returns the C string representing a SPECCTRA_DB::keyword.

We needed a non-instance function to get at the SPECCTRA_DB::keyword[] and class SPECCTRA_DB is not defined yet.

Definition at line 70 of file specctra.cpp.

71 {
72  return SPECCTRA_LEXER::TokenName( aTok );
73 }

Referenced by DSN::UNIT_RES::Format(), DSN::LAYER::Format(), DSN::TOKPROP::Format(), DSN::GRID::Format(), DSN::PLACE::Format(), DSN::SHAPE::Format(), DSN::FROMTO::Format(), DSN::NET::Format(), DSN::WIRE::Format(), DSN::WIRE_VIA::Format(), DSN::PLACEMENT::FormatContents(), DSN::IMAGE::FormatContents(), DSN::PADSTACK::FormatContents(), PCB_PARSER::parseBoardUnits(), SCH_SEXPR_PARSER::parseDouble(), PCB_PARSER::parseDouble(), and SCH_SEXPR_PARSER::parseInternalUnits().

◆ isRoundKeepout()

static bool DSN::isRoundKeepout ( PAD aPad)
static

Decide if the pad is a copper-less through hole which needs to be made into a round keepout.

Definition at line 217 of file specctra_export.cpp.

218 {
219  if( aPad->GetShape() == PAD_SHAPE::CIRCLE )
220  {
221  if( aPad->GetDrillSize().x >= aPad->GetSize().x )
222  return true;
223 
224  if( !( aPad->GetLayerSet() & LSET::AllCuMask() ).any() )
225  return true;
226  }
227 
228  return false;
229 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:750
const wxSize & GetDrillSize() const
Definition: pad.h:243
const wxSize & GetSize() const
Definition: pad.h:233
PAD_SHAPE GetShape() const
Definition: pad.h:170
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
Definition: pad.h:368

References LSET::AllCuMask(), CIRCLE, PAD::GetDrillSize(), PAD::GetLayerSet(), PAD::GetShape(), and PAD::GetSize().

Referenced by DSN::SPECCTRA_DB::makeIMAGE(), and DSN::SPECCTRA_DB::makePADSTACK().

◆ IU2um()

static double DSN::IU2um ( int  kicadDist)
inlinestatic

Definition at line 179 of file specctra_export.cpp.

180 {
181  return kicadDist * (1000.0 / IU_PER_MM);
182 }
static constexpr double IU_PER_MM
Mock up a conversion function.

References IU_PER_MM.

Referenced by DSN::SPECCTRA_DB::makePADSTACK(), and DSN::SPECCTRA_DB::makeVia().

◆ makePath()

static PATH* DSN::makePath ( const POINT aStart,
const POINT aEnd,
const std::string &  aLayerName 
)
static

Create a PATH element with a single straight line, a pair of vertices.

Definition at line 235 of file specctra_export.cpp.

236 {
237  PATH* path = new PATH( 0, T_path );
238 
239  path->AppendPoint( aStart );
240  path->AppendPoint( aEnd );
241  path->SetLayerId( aLayerName.c_str() );
242  return path;
243 }
Support both the <path_descriptor> and the <polygon_descriptor> per the specctra dsn spec.
Definition: specctra.h:582

References path.

Referenced by DSN::SPECCTRA_DB::makePADSTACK().

◆ mapPt() [1/2]

static wxPoint DSN::mapPt ( const POINT aPoint,
UNIT_RES aResolution 
)
static

Function mapPt translates a point from the Specctra Session format coordinate system to the KiCad coordinate system.

Parameters
aPointThe session point to translate
aResolution- The amount to scale the point.
Returns
wxPoint - The KiCad coordinate system point.

Definition at line 151 of file specctra_import.cpp.

152 {
153  wxPoint ret( scale( aPoint.x, aResolution ),
154  -scale( aPoint.y, aResolution ) ); // negate y
155 
156  return ret;
157 }
double y
Definition: specctra.h:105
double x
Definition: specctra.h:104
const int scale

References scale(), DSN::POINT::x, and DSN::POINT::y.

◆ mapPt() [2/2]

static POINT DSN::mapPt ( const wxPoint &  pt)
static

Convert a KiCad point into a DSN file point.

Kicad's BOARD coordinates are in nanometers (called Internal Units or IU) and we are exporting in units of mils, so we have to scale them.

Definition at line 203 of file specctra_export.cpp.

204 {
205  POINT ret;
206 
207  ret.x = mapX( pt.x );
208  ret.y = mapY( pt.y );
209  ret.FixNegativeZero();
210  return ret;
211 }
void FixNegativeZero()
Change negative zero to positive zero in the IEEE floating point storage format.
Definition: specctra.h:144
double y
Definition: specctra.h:105
double x
Definition: specctra.h:104
A point in the SPECCTRA DSN coordinate system.
Definition: specctra.h:102
static double mapY(int y)
static double mapX(int x)

References DSN::POINT::FixNegativeZero(), mapX(), mapY(), DSN::POINT::x, and DSN::POINT::y.

Referenced by DSN::SPECCTRA_DB::fillBOUNDARY(), DSN::SPECCTRA_DB::FromBOARD(), DSN::SPECCTRA_DB::FromSESSION(), DSN::SPECCTRA_DB::makeIMAGE(), DSN::SPECCTRA_DB::makePADSTACK(), DSN::SPECCTRA_DB::makeTRACK(), and DSN::SPECCTRA_DB::makeVIA().

◆ mapX()

static double DSN::mapX ( int  x)
inlinestatic

Definition at line 185 of file specctra_export.cpp.

186 {
187  return scale( x );
188 }
const int scale

References scale().

Referenced by mapPt().

◆ mapY()

static double DSN::mapY ( int  y)
inlinestatic

Definition at line 191 of file specctra_export.cpp.

192 {
193  return -scale( y ); // make y negative, since it is increasing going down.
194 }
const int scale

References scale().

Referenced by mapPt().

◆ operator<()

bool DSN::operator< ( const PADSTACK lhs,
const PADSTACK rhs 
)
inline

Used by the PADSTACKSET boost::ptr_set below.

Definition at line 2245 of file specctra.h.

2246 {
2247  return PADSTACK::Compare( (PADSTACK*) &lhs, (PADSTACK*) &rhs ) < 0;
2248 }

References DSN::PADSTACK::Compare().

◆ scale() [1/2]

static int DSN::scale ( double  distance,
UNIT_RES aResolution 
)
static

Function scale converts a session file distance to KiCad units of deci-mils.

Parameters
distanceThe session file length to convert.
aResolutionThe session UNIT_RES which holds the engineering unit specifier
Returns
int - The KiCad length in internal unit

Definition at line 112 of file specctra_import.cpp.

113 {
114  double resValue = aResolution->GetValue();
115  double factor;
116 
117  switch( aResolution->GetEngUnits() )
118  {
119  default:
120  case T_inch:
121  factor = 25.4e6; // nanometers per inch
122  break;
123  case T_mil:
124  factor = 25.4e3; // nanometers per mil
125  break;
126  case T_cm:
127  factor = 1e7; // nanometers per cm
128  break;
129  case T_mm:
130  factor = 1e6; // nanometers per mm
131  break;
132  case T_um:
133  factor = 1e3; // nanometers per um
134  break;
135  }
136 
137  int ret = KiROUND( factor * distance / resValue );
138 
139  return ret;
140 }
DSN_T GetEngUnits() const
Definition: specctra.h:419
int GetValue() const
Definition: specctra.h:420
static float distance(const SFVEC2UI &a, const SFVEC2UI &b)
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

References distance(), DSN::UNIT_RES::GetEngUnits(), DSN::UNIT_RES::GetValue(), and KiROUND().

◆ scale() [2/2]

static double DSN::scale ( int  kicadDist)
inlinestatic

Convert a distance from Pcbnew internal units to the reported Specctra DSN units in floating point format.

Convert integer internal units to float um

Definition at line 171 of file specctra_export.cpp.

References IU_PER_MM.

Referenced by DSN::SPECCTRA_DB::exportNETCLASS(), DSN::SPECCTRA_DB::FromBOARD(), DSN::SPECCTRA_DB::makeIMAGE(), DSN::SPECCTRA_DB::makePADSTACK(), DSN::SPECCTRA_DB::makeTRACK(), DSN::SPECCTRA_DB::makeVia(), DSN::SPECCTRA_DB::makeVIA(), mapPt(), mapX(), and mapY().