KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcb_io_ipc2581.h
Go to the documentation of this file.
1
19
20#ifndef PCB_IO_IPC2581_H_
21#define PCB_IO_IPC2581_H_
22
23#include <pcb_io/pcb_io.h>
25#include <pcb_io/pcb_io_mgr.h>
27
28#include "ipc2581_types.h"
29
30#include <eda_shape.h>
31#include <layer_ids.h> // PCB_LAYER_ID
32#include <drill/drill_span.h>
33#include <font/font.h>
35#include <stroke_params.h>
36
37#include <wx/xml/xml.h>
38#include <array>
39#include <memory>
40#include <map>
41#include <set>
42#include <tuple>
43
44class BOARD;
45class BOARD_ITEM;
47class FAB_STACKUP;
48class FAB_DRILL_MODEL;
49struct DRILL_OPERATION;
50class EDA_TEXT;
51class FOOTPRINT;
53class NETINFO_ITEM;
54class PAD;
55class PADSTACK;
56class PCB_SHAPE;
57class PCB_VIA;
58class PCB_TEXT;
60class SHAPE_POLY_SET;
61class SHAPE_SEGMENT;
62
63class PCB_IO_IPC2581 : public PCB_IO
64{
65public:
66 PCB_IO_IPC2581() : PCB_IO( wxS( "IPC-2581" ) )
67 {
68 m_total_bytes = 0;
69 m_scale = 1.0;
70 m_sigfig = 3;
72 m_mode = IPC2581::MODE::USERDEF;
73 m_functionModeNode = nullptr;
74 m_anonymizeNets = false;
75 m_omitRefDes = false;
76 m_step_node = nullptr;
78 m_haveCadData = true;
79 m_enterpriseNode = nullptr;
80 m_board = nullptr;
81 m_props = nullptr;
82 m_shape_user_node = nullptr;
83 m_shape_std_node = nullptr;
84 m_line_node = nullptr;
85 m_last_padstack = nullptr;
87 m_cad_header_node = nullptr;
88 m_progress_reporter = nullptr;
89 m_xml_doc = nullptr;
90 m_xml_root = nullptr;
91 m_contentNode = nullptr;
92 m_lastAppendedNode = nullptr;
93 }
94
95 ~PCB_IO_IPC2581() override;
96
99 static constexpr int EXPORT_PHASES = 12;
100
101 void SaveBoard( const wxString& aFileName, BOARD& aBoard,
102 const std::map<std::string, UTF8>* aProperties = nullptr ) override;
103
105 {
106 return IO_BASE::IO_FILE_DESC( wxEmptyString, {}, {}, false, false, true );
107 }
108
110 {
111 // No library description for this plugin
112 return IO_BASE::IO_FILE_DESC( wxEmptyString, {} );
113 }
114
115 std::vector<FOOTPRINT*> GetImportedCachedLibraryFootprints() override;
116
117 long long GetLibraryTimestamp( const wxString& aLibraryPath ) const override
118 {
119 return 0;
120 }
121
122 // Reading currently disabled
123 bool CanReadBoard( const wxString& aFileName ) const override
124 {
125 return false;
126 }
127
128 // Reading currently disabled
129 bool CanReadFootprint( const wxString& aFileName ) const override
130 {
131 return false;
132 }
133
134 // Reading currently disabled
135 bool CanReadLibrary( const wxString& aFileName ) const override
136 {
137 return false;
138 }
139
140
141private:
142
147
151 wxXmlNode* generateXmlHeader();
152
158 wxXmlNode* generateContentSection();
159
164 wxXmlNode* generateLogisticSection();
165
171 wxXmlNode* generateHistorySection();
172
177 wxXmlNode* generateBOMSection( wxXmlNode* aEcadNode );
178
183 wxXmlNode* generateEcadSection();
184
189 wxXmlNode* generateAvlSection();
190
191 void generateCadLayers( wxXmlNode* aCadLayerNode );
192
193 void generateCadSpecs( wxXmlNode* aCadLayerNode );
194
195 void generateStackup( wxXmlNode* aCadLayerNode );
196
197 void generateDrillLayers( wxXmlNode* aCadLayerNode );
198
199 void generateAuxilliaryLayers( wxXmlNode* aCadLayerNode );
200
201 void generateStepSection( wxXmlNode* aCadNode );
202
203 void generateProfile( wxXmlNode* aStepNode );
204
205 void generateLogicalNets( wxXmlNode* aStepNode );
206
207 void generatePhyNetGroup( wxXmlNode* aStepNode );
208
209 void generateLayerFeatures( wxXmlNode* aStepNode );
210
211 void generateLayerSetDrill( wxXmlNode* aStepNode );
212
213 void generateLayerSetNet( wxXmlNode* aLayerNode, PCB_LAYER_ID aLayer, const std::vector<BOARD_ITEM*>& aItems );
214
215 void generateLayerSetAuxilliary( wxXmlNode* aStepNode );
216
217 wxXmlNode* generateContentStackup( wxXmlNode* aContentNode );
218
219 void generateContentLayerRefs( wxXmlNode* aCadDataNode );
220
222 void dropContentStepRefs();
223
226
227 bool included( IPC2581::SECTION aSection ) const
228 {
229 return m_resolved.m_included.Contains( aSection );
230 }
231
232 bool suppressed( IPC2581::SUPPRESS aWhat ) const
233 {
234 return m_resolved.m_suppressions.Contains( aWhat );
235 }
236
242 void reportPhase( const wxString& aMessage );
243
245 void tickProgress( const wxString& aMessage = wxEmptyString );
246
248 bool layerIncluded( PCB_LAYER_ID aLayer ) const;
249
251 bool stackupRowIncluded( bool aDielectric, PCB_LAYER_ID aLayer ) const;
252
258 wxString netName( const wxString& aNetname, const wxString& aSuffix = wxEmptyString );
259
261 bool omitRefDes() const
262 {
264 }
265
271 bool refDesEmitted() const
272 {
274 }
275
278 {
279 return included( IPC2581::SECTION::COMPONENTS ) && !omitRefDes();
280 }
281
282 void generateComponents( wxXmlNode* aStepNode );
283
284 void addCadHeader( wxXmlNode* aEcadNode );
285
286 wxXmlNode* addPackage( wxXmlNode* aStepNode, FOOTPRINT* aFootprint );
287
288 void addPad( wxXmlNode* aContentNode, const PAD* aPad, PCB_LAYER_ID aLayer );
289
290 void addVia( wxXmlNode* aContentNode, const PCB_VIA* aVia, PCB_LAYER_ID aLayer );
291
292 void addPadStack( wxXmlNode* aContentNode, const PAD* aPad );
293
294 void addPadStack( wxXmlNode* aContentNode, const PCB_VIA* aVia );
295
296 void ensureBackdrillSpecs( const wxString& aPadstackName, const PADSTACK& aPadstack );
297
298 void addBackdrillSpecRefs( wxXmlNode* aHoleNode, const wxString& aPadstackName );
299
300 void addPostMachiningSpecRefs( wxXmlNode* aHoleNode, const DRILL_OPERATION& aOperation );
301
303
304 void addLocationNode( wxXmlNode* aContentNode, double aX, double aY );
305
306 void addLocationNode( wxXmlNode* aContentNode, const PAD& aPad, bool aRelative,
307 PCB_LAYER_ID aLayer );
308
309 void addLocationNode( wxXmlNode* aContentNode, const PCB_SHAPE& aShape );
310
311 void addShape( wxXmlNode* aContentNode, const PCB_SHAPE& aShape, bool aInline = false );
312
313 void addShape( wxXmlNode* aContentNode, const PAD& aPad, PCB_LAYER_ID aLayer );
314
315 void addSlotCavity( wxXmlNode* aContentNode, const PAD& aPad, const wxString& aName );
316
317 void addKnockoutText( wxXmlNode* aContentNode, PCB_TEXT* aText );
318
319 void addText( wxXmlNode* aContentNode, EDA_TEXT* aShape, const KIFONT::METRICS& aFontMetrics );
320
321 void addLineDesc( wxXmlNode* aNode, int aWidth, LINE_STYLE aDashType, bool aForce = false );
322
323 void addFillDesc( wxXmlNode* aNode, FILL_T aFillType, bool aForce = false );
324
325 bool addPolygonNode( wxXmlNode* aParentNode, const SHAPE_LINE_CHAIN& aPolygon,
326 FILL_T aFillType = FILL_T::FILLED_SHAPE, int aWidth = 0,
327 LINE_STYLE aDashType = LINE_STYLE::SOLID );
328
329 bool addPolygonCutouts( wxXmlNode* aParentNode, const SHAPE_POLY_SET::POLYGON& aPolygon );
330
331 bool addOutlineNode( wxXmlNode* aParentNode, const SHAPE_POLY_SET& aPolySet, int aWidth = 0,
332 LINE_STYLE aDashType = LINE_STYLE::SOLID );
333
334 bool addContourNode( wxXmlNode* aParentNode, const SHAPE_POLY_SET& aPolySet, int aOutline = 0,
335 FILL_T aFillType = FILL_T::FILLED_SHAPE, int aWidth = 0,
336 LINE_STYLE aDashType = LINE_STYLE::SOLID );
337
338 size_t lineHash( int aWidth, LINE_STYLE aDashType );
339
340 size_t shapeHash( const PCB_SHAPE& aShape );
341
342 wxString sanitizeId( const wxString& aStr ) const;
343 wxString genString( const wxString& aStr, const char* aPrefix = nullptr ) const;
344 wxString genLayerString( PCB_LAYER_ID aLayer, const char* aPrefix ) const;
345 wxString genLayersString( PCB_LAYER_ID aTop, PCB_LAYER_ID aBottom, const char* aPrefix ) const;
346
347 wxString stackupLayerName( const BOARD_STACKUP_ITEM* aItem, int aSublayerId, const char* aPrefix ) const;
348
349 wxString floatVal( double aVal, int aSigFig = -1 ) const;
350
351 wxString pinName( const PAD* aPad ) const;
352
353 wxString componentName( FOOTPRINT* aFootprint );
354
355 void addXY( wxXmlNode* aNode, const VECTOR2I& aVec, const char* aXName = nullptr,
356 const char* aYName = nullptr );
357
358 void addAttribute( wxXmlNode* aNode, const wxString& aName, const wxString& aValue );
359
360 wxXmlNode* insertNode( wxXmlNode* aParent, const wxString& aName );
361
362 wxXmlNode* appendNode( wxXmlNode* aParent, const wxString& aName );
363
364 void appendNode( wxXmlNode* aParent, wxXmlNode* aNode );
365
366 void insertNode( wxXmlNode* aParent, wxXmlNode* aNode );
367
368 void insertNodeAfter( wxXmlNode* aPrev, wxXmlNode* aNode );
369
370 void deleteNode( wxXmlNode*& aNode );
371
372 void addLayerAttributes( wxXmlNode* aNode, PCB_LAYER_ID aLayer );
373
374private:
375
376 size_t m_total_bytes; //<! Total number of bytes to be written
377
378 wxString m_units_str; //<! Output string for units
379 double m_scale; //<! Scale factor from IU to IPC2581 units (mm, micron, in)
380 int m_sigfig; //<! Max number of digits past the decimal point
388 std::map<wxString, wxString> m_net_name_dict;
389 std::map<FOOTPRINT*, wxString> m_anon_refdes_dict;
390 wxXmlNode* m_step_node;
393 wxString m_OEMRef; //<! If set, field name containing the internal ID of parts
394 wxString m_mpn; //<! If set, field name containing the manufacturer part number
395 wxString m_mfg; //<! If set, field name containing the part manufacturer
396 wxString m_distpn; //<! If set, field name containing the distributor part number
397 wxString m_dist; //<! If set, field name containing the distributor name
398 wxString m_bomRev; //<! BOM revision string for the BomHeader element
399 wxString m_variantName; //<! BOM population variant or board current
400
401 // Node pointer to the main enterprise node to be used for adding
402 // enterprises later when forming the AVL
404
406 const FAB_STACKUP* m_fabStackup = nullptr;
407 std::vector<FOOTPRINT*> m_loaded_footprints;
408 const std::map<std::string, UTF8>* m_props;
409
410 std::map<size_t, wxString> m_user_shape_dict; //<! Map between shape hash values and reference id string
411 wxXmlNode* m_shape_user_node; //<! Output XML node for reference shapes in UserDict
412
413 std::map<size_t, wxString> m_std_shape_dict; //<! Map between shape hash values and reference id string
414 wxXmlNode* m_shape_std_node; //<! Output XML node for reference shapes in StandardDict
415
416 std::map<size_t, wxString> m_line_dict; //<! Map between line hash values and reference id string
417 wxXmlNode* m_line_node; //<! Output XML node for reference lines in LineDict
418
419 std::map<size_t, wxString> m_padstack_dict; //<! Map between padstack hash values and reference id string (PADSTACK_##)
420 std::vector<wxXmlNode*> m_padstacks; //<! Holding vector for padstacks. These need to be inserted prior to the components
421 wxXmlNode* m_last_padstack; //<! Pointer to padstack list where we can insert the VIA padstacks once we process tracks
422
423 std::map<wxString, std::array<wxString, 2>> m_padstack_backdrill_specs;
424 std::map<wxString, wxXmlNode*> m_backdrill_spec_nodes;
425 std::set<wxString> m_backdrill_spec_used;
427 std::map<std::tuple<bool, int, int, int, int>, wxString> m_post_machining_specs;
429
430 std::map<size_t, wxString>
431 m_footprint_dict; //<! Map between the footprint hash values and reference id string (<fpid>_##)
432
433 std::map<wxString, FOOTPRINT*>
434 m_footprint_refdes_dict; //<! Map between sanitized refdes and footprint pointer
435
436 std::map<FOOTPRINT*, wxString>
437 m_footprint_refdes_reverse_dict; //<! Reverse lookup for
438
439 std::map<FOOTPRINT*, wxString>
440 m_OEMRef_dict; //<! Reverse map from the footprint pointer to the reference id string assigned for components
441
442 std::map<int, std::vector<std::pair<wxString, wxString>>>
443 m_net_pin_dict; //<! Map from netcode to the component/pin pairs in the net
444
445 std::map<PCB_LAYER_ID, wxString>
446 m_layer_name_map; //<! Mapping layer name in 2581 to the internal layer id
447
448 std::map<DRILL_SPAN, std::vector<BOARD_ITEM*>> m_drill_layers; //<! Drill sets are output as layers, one per span
450
451 std::map<std::pair<PCB_LAYER_ID, PCB_LAYER_ID>, std::vector<PAD*>>
452 m_slot_holes; //<! Storage vector of slotted holes that need to be output as cutouts
453
454 std::map<std::tuple<auxLayerType, PCB_LAYER_ID, PCB_LAYER_ID>, std::vector<BOARD_ITEM*>>
456
458
459 mutable std::map<wxString, std::set<wxString>> m_element_names; //<! Track generated names by namespace
460 mutable std::map<wxString, wxString> m_generated_names; //<! Map input keys to unique names
461
462 std::set<wxUniChar> m_acceptable_chars; //<! IPC2581B and C have differing sets of allowed characters in names
463
464 wxXmlDocument* m_xml_doc;
465 wxXmlNode* m_xml_root;
466 wxXmlNode* m_contentNode;
467
469};
470
471#endif // PCB_IO_IPC2581_H_
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:84
Manage one layer needed to make a physical board.
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:410
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition eda_text.h:94
Set of schema sections.
Board stackup snapshot synchronized without changing the source board.
Definition fab_stackup.h:29
Handle the data for a net.
Definition netinfo.h:50
A PADSTACK defines the characteristics of a single or multi-layer pad, in the IPC sense of the word.
Definition padstack.h:156
Definition pad.h:61
void addText(wxXmlNode *aContentNode, EDA_TEXT *aShape, const KIFONT::METRICS &aFontMetrics)
wxString floatVal(double aVal, int aSigFig=-1) const
wxXmlNode * m_step_node
bool CanReadBoard(const wxString &aFileName) const override
void generateLayerSetDrill(wxXmlNode *aStepNode)
wxString genLayerString(PCB_LAYER_ID aLayer, const char *aPrefix) const
wxXmlNode * generateContentSection()
Creates the Content section of the XML file.
wxXmlNode * appendNode(wxXmlNode *aParent, const wxString &aName)
void addBackdrillSpecRefs(wxXmlNode *aHoleNode, const wxString &aPadstackName)
void generateDrillLayers(wxXmlNode *aCadLayerNode)
wxString sanitizeId(const wxString &aStr) const
wxXmlNode * addPackage(wxXmlNode *aStepNode, FOOTPRINT *aFootprint)
void generateComponents(wxXmlNode *aStepNode)
IPC2581::SECTION_SET emittedSections() const
Schema sections that the finished document holds.
bool addContourNode(wxXmlNode *aParentNode, const SHAPE_POLY_SET &aPolySet, int aOutline=0, FILL_T aFillType=FILL_T::FILLED_SHAPE, int aWidth=0, LINE_STYLE aDashType=LINE_STYLE::SOLID)
bool refDesEmitted() const
True if a Component keeps a designator that a reference can name.
wxString componentName(FOOTPRINT *aFootprint)
void addShape(wxXmlNode *aContentNode, const PCB_SHAPE &aShape, bool aInline=false)
IPC2581::RESOLVE_RESULT m_resolved
std::map< FOOTPRINT *, wxString > m_anon_refdes_dict
bool componentRefEmitted() const
True if a component reference can name a Component that the export wrote.
bool addOutlineNode(wxXmlNode *aParentNode, const SHAPE_POLY_SET &aPolySet, int aWidth=0, LINE_STYLE aDashType=LINE_STYLE::SOLID)
void generateStackup(wxXmlNode *aCadLayerNode)
std::map< std::tuple< auxLayerType, PCB_LAYER_ID, PCB_LAYER_ID >, std::vector< BOARD_ITEM * > > m_auxilliary_Layers
bool addPolygonNode(wxXmlNode *aParentNode, const SHAPE_LINE_CHAIN &aPolygon, FILL_T aFillType=FILL_T::FILLED_SHAPE, int aWidth=0, LINE_STYLE aDashType=LINE_STYLE::SOLID)
void insertNodeAfter(wxXmlNode *aPrev, wxXmlNode *aNode)
void generateCadLayers(wxXmlNode *aCadLayerNode)
std::vector< wxXmlNode * > m_padstacks
wxString pinName(const PAD *aPad) const
bool stackupRowIncluded(bool aDielectric, PCB_LAYER_ID aLayer) const
True if a stackup row is in a schema section that this export holds.
void generateCadSpecs(wxXmlNode *aCadLayerNode)
void addVia(wxXmlNode *aContentNode, const PCB_VIA *aVia, PCB_LAYER_ID aLayer)
IPC2581::SECTION_SET m_requestedSections
void addSlotCavity(wxXmlNode *aContentNode, const PAD &aPad, const wxString &aName)
void deleteNode(wxXmlNode *&aNode)
wxXmlNode * m_last_padstack
size_t lineHash(int aWidth, LINE_STYLE aDashType)
void SaveBoard(const wxString &aFileName, BOARD &aBoard, const std::map< std::string, UTF8 > *aProperties=nullptr) override
Write aBoard to a storage file in a format that this PCB_IO implementation knows about or it can be u...
std::map< size_t, wxString > m_std_shape_dict
wxString netName(const wxString &aNetname, const wxString &aSuffix=wxEmptyString)
Name to write for aNetname with the net name policy.
void addAttribute(wxXmlNode *aNode, const wxString &aName, const wxString &aValue)
wxXmlNode * m_shape_user_node
wxXmlNode * generateAvlSection()
Creates the Approved Vendor List section.
wxXmlNode * generateHistorySection()
Creates the history section.
wxString stackupLayerName(const BOARD_STACKUP_ITEM *aItem, int aSublayerId, const char *aPrefix) const
wxXmlNode * m_contentNode
IPC2581::MODE m_mode
void addXY(wxXmlNode *aNode, const VECTOR2I &aVec, const char *aXName=nullptr, const char *aYName=nullptr)
void reportPhase(const wxString &aMessage)
Go to the next progress phase and repaint.
wxXmlNode * m_shape_std_node
void addPadStack(wxXmlNode *aContentNode, const PAD *aPad)
std::map< FOOTPRINT *, wxString > m_OEMRef_dict
void clearLoadedFootprints()
Frees the memory allocated for the loaded footprints in m_loaded_footprints.
std::map< wxString, wxXmlNode * > m_backdrill_spec_nodes
std::map< std::pair< PCB_LAYER_ID, PCB_LAYER_ID >, std::vector< PAD * > > m_slot_holes
std::map< size_t, wxString > m_footprint_dict
wxXmlNode * m_functionModeNode
wxXmlNode * generateLogisticSection()
Creates the logistical data header.
std::map< std::tuple< bool, int, int, int, int >, wxString > m_post_machining_specs
std::map< wxString, wxString > m_net_name_dict
std::map< size_t, wxString > m_line_dict
void addLineDesc(wxXmlNode *aNode, int aWidth, LINE_STYLE aDashType, bool aForce=false)
void addKnockoutText(wxXmlNode *aContentNode, PCB_TEXT *aText)
long long GetLibraryTimestamp(const wxString &aLibraryPath) const override
Generate a timestamp representing all the files in the library (including the library directory).
std::map< size_t, wxString > m_padstack_dict
void addPostMachiningSpecRefs(wxXmlNode *aHoleNode, const DRILL_OPERATION &aOperation)
std::map< DRILL_SPAN, std::vector< BOARD_ITEM * > > m_drill_layers
std::map< wxString, FOOTPRINT * > m_footprint_refdes_dict
void generateProfile(wxXmlNode *aStepNode)
void generateLayerFeatures(wxXmlNode *aStepNode)
void generateLayerSetNet(wxXmlNode *aLayerNode, PCB_LAYER_ID aLayer, const std::vector< BOARD_ITEM * > &aItems)
bool CanReadFootprint(const wxString &aFileName) const override
Check if this PCB_IO can read a footprint from specified file or directory.
bool suppressed(IPC2581::SUPPRESS aWhat) const
wxXmlNode * generateBOMSection(wxXmlNode *aEcadNode)
Creates the BOM section.
wxXmlNode * generateContentStackup(wxXmlNode *aContentNode)
const FAB_DRILL_MODEL * m_fabDrillModel
void generateAuxilliaryLayers(wxXmlNode *aCadLayerNode)
wxXmlNode * m_cad_header_node
void addCadHeader(wxXmlNode *aEcadNode)
void generateLayerSetAuxilliary(wxXmlNode *aStepNode)
bool layerIncluded(PCB_LAYER_ID aLayer) const
True if aLayer is in a schema section that this export holds.
PROGRESS_REPORTER * m_progress_reporter
std::vector< FOOTPRINT * > GetImportedCachedLibraryFootprints() override
Return a container with the cached library footprints generated in the last call to Load.
const std::map< std::string, UTF8 > * m_props
wxString genLayersString(PCB_LAYER_ID aTop, PCB_LAYER_ID aBottom, const char *aPrefix) const
void generateLogicalNets(wxXmlNode *aStepNode)
void addFillDesc(wxXmlNode *aNode, FILL_T aFillType, bool aForce=false)
std::map< size_t, wxString > m_user_shape_dict
size_t shapeHash(const PCB_SHAPE &aShape)
void generatePhyNetGroup(wxXmlNode *aStepNode)
std::map< wxString, std::set< wxString > > m_element_names
~PCB_IO_IPC2581() override
wxString genString(const wxString &aStr, const char *aPrefix=nullptr) const
const IO_BASE::IO_FILE_DESC GetLibraryDesc() const override
Get the descriptor for the library container that this IO plugin operates on.
static constexpr int EXPORT_PHASES
Content logistic history CAD data components the two netlists BOM vendor list references the write an...
wxXmlNode * m_xml_root
std::vector< FOOTPRINT * > m_loaded_footprints
bool addPolygonCutouts(wxXmlNode *aParentNode, const SHAPE_POLY_SET::POLYGON &aPolygon)
void pruneUnusedBackdrillSpecs()
IPC2581::REVISION m_revision
std::set< wxUniChar > m_acceptable_chars
void addLayerAttributes(wxXmlNode *aNode, PCB_LAYER_ID aLayer)
wxXmlNode * generateXmlHeader()
Creates the XML header for IPC-2581.
void ensureBackdrillSpecs(const wxString &aPadstackName, const PADSTACK &aPadstack)
wxXmlNode * generateEcadSection()
Creates the ECAD section.
const FAB_STACKUP * m_fabStackup
wxXmlDocument * m_xml_doc
bool CanReadLibrary(const wxString &aFileName) const override
Checks if this IO object can read the specified library file/directory.
bool included(IPC2581::SECTION aSection) const
wxXmlNode * insertNode(wxXmlNode *aParent, const wxString &aName)
wxString m_variantName
void addPad(wxXmlNode *aContentNode, const PAD *aPad, PCB_LAYER_ID aLayer)
void generateContentLayerRefs(wxXmlNode *aCadDataNode)
void generateStepSection(wxXmlNode *aCadNode)
std::map< PCB_LAYER_ID, wxString > m_layer_name_map
void dropContentStepRefs()
Remove Content/StepRef when the export writes no Step.
std::map< wxString, wxString > m_generated_names
const IO_BASE::IO_FILE_DESC GetBoardFileDesc() const override
Return board file description for the PCB_IO.
std::set< wxString > m_backdrill_spec_used
void addLocationNode(wxXmlNode *aContentNode, double aX, double aY)
bool omitRefDes() const
True if the export removes the reference designators from the artwork.
std::map< wxString, std::array< wxString, 2 > > m_padstack_backdrill_specs
wxXmlNode * m_line_node
std::map< int, std::vector< std::pair< wxString, wxString > > > m_net_pin_dict
void tickProgress(const wxString &aMessage=wxEmptyString)
Count one unit of work in this phase and repaint at intervals.
std::map< FOOTPRINT *, wxString > m_footprint_refdes_reverse_dict
wxXmlNode * m_lastAppendedNode
Optimization for appendNode to avoid O(n) child traversal.
wxXmlNode * m_enterpriseNode
PCB_IO(const wxString &aName)
Definition pcb_io.h:372
A progress reporter interface for use in multi-threaded environments.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
Represent a set of closed polygons.
std::vector< SHAPE_LINE_CHAIN > POLYGON
represents a single polygon outline with holes.
Hole classification and drill span, shared by the drill model and the drill writers.
FILL_T
Definition eda_fill.h:29
@ FILLED_SHAPE
Fill with object color.
Definition eda_fill.h:31
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
JOB_EXPORT_PCB_FAB::DATA_SET MODE
Columns of Table 4 The job owns the enum so that every layer shares one type.
SECTION
Schema sections of the IPC-2581C function mode table, Table 4 p 80.
REVISION
Schema revision The two revisions declare different identity constraints.
SUPPRESS
Optional attributes to remove when their schema section is absent.
@ COMPONENT_REFDES
Component\refDes.
LINE_STYLE
Dashed line types.
One machining action, which is also one NC hit and one tool assignment.
Container that describes file type info.
Definition io_base.h:43
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:708