31#include <wx/translation.h>
45 std::vector<wxString> subNodeChildrenToCount = { wxT(
"LIBRARY" ), wxT(
"PARTS" ),
59 for( ; cNode; cNode = cNode->
GetNext() )
61 if( cNode->GetName() == wxT(
"HEADER" ) )
65 switch(
Header.Resolution )
72 wxASSERT_MSG(
true, wxT(
"Unknown File Resolution" ) );
76 else if( cNode->GetName() == wxT(
"ASSIGNMENTS" ) )
80 else if( cNode->GetName() == wxT(
"LIBRARY" ) )
84 else if( cNode->GetName() == wxT(
"DEFAULTS" ) )
90 else if( cNode->GetName() == wxT(
"PARTS" ) )
94 else if( cNode->GetName() == wxT(
"SHEETS" ) )
98 else if( cNode->GetName() == wxT(
"SCHEMATIC" ) )
102 else if( cNode->GetName() == wxT(
"DISPLAY" ) )
108 for( ; subNode; subNode = subNode->
GetNext() )
110 if( subNode->GetName() == wxT(
"ATTRCOLORS" ) )
114 else if( subNode->GetName() == wxT(
"SCMITEMCOLORS" ) )
118 for( ; sub2Node; sub2Node = sub2Node->
GetNext() )
120 if( sub2Node->GetName() == wxT(
"SYMCOL" ) )
124 for( ; sub3Node; sub3Node = sub3Node->
GetNext() )
126 if( sub3Node->GetName() == wxT(
"PARTNAMECOL" ) )
155 const wxString& aShapeStr )
157 if( aShapeStr == wxT(
"ANNULUS" ) )
159 else if( aShapeStr == wxT(
"BOX" ) )
161 else if( aShapeStr == wxT(
"BULLET" ) )
163 else if( aShapeStr == wxT(
"ROUND" ) )
165 else if( aShapeStr == wxT(
"CROSS" ) )
167 else if( aShapeStr == wxT(
"DIAMOND" ) )
169 else if( aShapeStr == wxT(
"FINGER" ) )
171 else if( aShapeStr == wxT(
"OCTAGON" ) )
173 else if( aShapeStr == wxT(
"PLUS" ) )
175 else if( aShapeStr == wxT(
"POINTER" ) )
177 else if( aShapeStr == wxT(
"RECTANGLE" ) )
179 else if( aShapeStr == wxT(
"ROUNDED" ) )
181 else if( aShapeStr == wxT(
"SQUARE" ) )
183 else if( aShapeStr == wxT(
"STAR" ) )
185 else if( aShapeStr == wxT(
"TRIANGLE" ) )
236 wxASSERT_MSG(
false,
"Unknown terminal shape type" );
242 if( aNode->
GetChildren()->GetName() == wxT(
"ORIENT" ) )
258 wxCHECK( aNode->GetName() == wxT(
"TERMINALCODE" ), );
264 wxString
location = wxString::Format(
"TERMINALCODE -> %s",
Name );
266 for( ; cNode; cNode = cNode->
GetNext() )
268 wxString cNodeName = cNode->GetName();
271 Shape.Parse( cNode, aContext );
272 else if( cNodeName == wxT(
"FILLED" ) )
282 wxCHECK( aNode->GetName() == wxT(
"CODEDEFS" ), );
286 for( ; cNode; cNode = cNode->
GetNext() )
288 wxString
nodeName = cNode->GetName();
294 else if(
nodeName == wxT(
"TERMINALCODE" ) )
297 termcode.
Parse( cNode, aContext );
310 wxCHECK( aNode->GetName() == wxT(
"ASSIGNMENTS" ), );
313 bool settingsParsed =
false;
315 for( ; cNode; cNode = cNode->
GetNext() )
317 if( cNode->GetName() == wxT(
"CODEDEFS" ) )
321 else if( cNode->GetName() == wxT(
"SETTINGS" ) )
323 settingsParsed =
true;
326 else if( cNode->GetName() == wxT(
"GRIDS" ) )
328 Grids.Parse( cNode, aContext );
330 else if( cNode->GetName() == wxT(
"NETCLASSEDITATTRIBSETTINGS" ) )
334 else if( cNode->GetName() == wxT(
"SPCCLASSEDITATTRIBSETTINGS" ) )
344 if( !settingsParsed )
351 wxCHECK( aNode->GetName() == wxT(
"TERMINAL" ), );
357 wxString
location = wxString::Format(
"TERMINAL %ld",
ID );
362 for( ; cNode; cNode = cNode->
GetNext() )
364 wxString cNodeName = cNode->GetName();
366 if( cNodeName == wxT(
"ORIENT" ) )
368 else if( cNodeName == wxT(
"PT" ) )
378 wxCHECK( aNode->GetName() == wxT(
"PINLABELLOC" )
379 || aNode->GetName() == wxT(
"PINNUMNAMELOC" ), );
387 for( ; cNode; cNode = cNode->
GetNext() )
402 wxCHECK( aNode->GetName() == wxT(
"SYMDEF" ), );
408 for( ; cNode; cNode = cNode->
GetNext() )
410 wxString cNodeName = cNode->GetName();
416 else if( cNodeName == wxT(
"TERMINAL" ) )
419 term.
Parse( cNode, aContext );
420 Terminals.insert( std::make_pair( term.
ID, term ) );
422 else if( cNodeName == wxT(
"PINLABELLOC" ) )
425 loc.
Parse( cNode, aContext );
428 else if( cNodeName == wxT(
"PINNUMNAMELOC" ) )
431 loc.
Parse( cNode, aContext );
447 wxCHECK( aNode->GetName() == wxT(
"LIBRARY" ), );
451 for( ; cNode; cNode = cNode->
GetNext() )
453 wxString cNodeName = cNode->GetName();
455 if( cNodeName == wxT(
"SYMDEF" ) )
458 symdef.
Parse( cNode, aContext );
461 else if( cNodeName == wxT(
"HIERARCHY" ) )
481 wxCHECK( aNode->GetName() == wxT(
"SHEETS" ), );
485 for( ; cNode; cNode = cNode->
GetNext() )
487 if( cNode->GetName() == wxT(
"SHEET" ) )
504 wxCHECK( aNode->GetName() == wxT(
"COMP" ), );
510 for( ; cNode; cNode = cNode->
GetNext() )
512 if( cNode->GetName() == wxT(
"READONLY" ) )
516 else if( cNode->GetName() == wxT(
"ATTRLOC" ) )
518 AttrLoc.Parse( cNode, aContext );
531 wxCHECK( aNode->GetName() == wxT(
"PARTREF" ), );
537 for( ; cNode; cNode = cNode->
GetNext() )
539 if( cNode->GetName() == wxT(
"READONLY" ) )
543 else if( cNode->GetName() == wxT(
"ATTRLOC" ) )
545 AttrLoc.Parse( cNode, aContext );
558 wxCHECK( aNode->GetName() == wxT(
"TERMATTR" ), );
564 for( ; cNode; cNode = cNode->
GetNext() )
566 if( cNode->GetName() == wxT(
"ATTR" ) )
569 val.
Parse( cNode, aContext );
582 wxCHECK( aNode->GetName() == wxT(
"SYMPINNAME" ) || aNode->GetName() == wxT(
"SYMPINLABEL" ), );
589 for( ; cNode; cNode = cNode->
GetNext() )
591 if( cNode->GetName() == wxT(
"ATTRLOC" ) )
593 AttrLoc.Parse( cNode, aContext );
606 wxCHECK( aNode->GetName() == wxT(
"PINNUM" ), );
613 for( ; cNode; cNode = cNode->
GetNext() )
615 if( cNode->GetName() == wxT(
"ATTRLOC" ) )
617 AttrLoc.Parse( cNode, aContext );
630 wxCHECK( aNode->GetName() == wxT(
"SYMBOLVARIANT" ), );
634 for( ; cNode; cNode = cNode->
GetNext() )
636 wxString cNodeName = cNode->GetName();
638 if( cNodeName == wxT(
"SIGNALREF" ) )
640 Type = TYPE::SIGNALREF;
643 else if( cNodeName == wxT(
"GLOBALSIGNAL" ) )
645 Type = TYPE::GLOBALSIGNAL;
648 else if( cNodeName == wxT(
"TESTPOINT" ) )
650 Type = TYPE::TESTPOINT;
663 wxCHECK( aNode->GetName() == wxT(
"SIGNALREFERENCELINK" ), );
671 for( ; cNode; cNode = cNode->
GetNext() )
675 else if( cNode->GetName() == wxT(
"SIGREFTEXT" ) )
688 wxCHECK( aNode->GetName() == wxT(
"SYMBOL" ), );
695 bool originParsed =
false;
696 wxString
location = wxString::Format(
"SYMBOL -> %s",
ID );
698 for( ; cNode; cNode = cNode->
GetNext() )
700 wxString cNodeName = cNode->GetName();
702 if( !originParsed && cNodeName == wxT(
"PT" ) )
704 Origin.Parse( cNode, aContext );
707 else if( cNodeName == wxT(
"COMP" ) )
712 else if( cNodeName == wxT(
"PARTREF" ) )
714 PartRef.Parse( cNode, aContext );
717 else if( cNodeName == wxT(
"PARTNAMENOTVISIBLE" ) )
721 else if( cNodeName == wxT(
"VSYMMASTER" ) )
726 else if( cNodeName == wxT(
"GROUPREF" ) )
730 else if( cNodeName == wxT(
"REUSEBLOCKREF" ) )
734 else if( cNodeName == wxT(
"SIGNALREFERENCELINK" ) )
738 else if( cNodeName == wxT(
"ORIENT" ) )
742 else if( cNodeName == wxT(
"MIRROR" ) )
746 else if( cNodeName == wxT(
"FIX" ) )
750 else if( cNodeName == wxT(
"SCALE" ) )
755 else if( cNodeName == wxT(
"READABILITY" ) )
759 else if( cNodeName == wxT(
"GATE" ) )
763 else if( cNodeName == wxT(
"SYMBOLVARIANT" ) )
768 else if( cNodeName == wxT(
"TERMATTR" ) )
771 termattr.
Parse( cNode, aContext );
774 else if( cNodeName == wxT(
"SYMPINLABEL" ) )
777 sympinname.
Parse( cNode, aContext );
780 else if( cNodeName == wxT(
"SYMPINNAME" ) )
783 sympinname.
Parse( cNode, aContext );
786 else if( cNodeName == wxT(
"PINNUM" ) )
789 pinNum.
Parse( cNode, aContext );
792 else if( cNodeName == wxT(
"ATTR" ) )
795 attrVal.
Parse( cNode, aContext );
811 wxCHECK( aNode->GetName() == wxT(
"SIGLOC" ), );
818 for( ; cNode; cNode = cNode->
GetNext() )
833 wxCHECK( aNode->GetName() == wxT(
"BUS" ), );
841 for( ; cNode; cNode = cNode->
GetNext() )
843 wxString cNodeName = cNode->GetName();
845 if( SHAPE::IsShape( cNode ) )
847 Shape.Parse( cNode, aContext );
849 else if( cNodeName == wxT(
"BUSNAME" ) )
857 if( subNode->GetName() == wxT(
"SIGLOC" ) )
859 BusLabel.Parse( subNode, aContext );
878 wxCHECK( aNode->GetName() == wxT(
"BLOCK" ), );
885 for( ; cNode; cNode = cNode->
GetNext() )
887 wxString cNodeName = cNode->GetName();
889 if( cNodeName == wxT(
"CLONE" ) )
893 else if( cNodeName == wxT(
"PARENT" ) )
898 else if( cNodeName == wxT(
"CHILD" ) )
903 else if( cNodeName == wxT(
"BLOCKNAME" ) )
910 if( subNode->GetName() == wxT(
"ATTRLOC" ) )
921 else if( cNodeName == wxT(
"TERMINAL" ) )
924 term.
Parse( cNode, aContext );
925 Terminals.insert( std::make_pair( term.
ID, term ) );
927 else if( cNodeName == wxT(
"FIGURE" ) )
930 figure.
Parse( cNode, aContext );
931 Figures.insert( std::make_pair( figure.
ID, figure ) );
943 wxASSERT( aNode->GetName() == wxT(
"TERM" ) );
952 for( ; cNode; cNode = cNode->
GetNext() )
954 wxString cNodeName = cNode->GetName();
956 if( cNodeName == wxT(
"SIGLOC" ) )
971 wxASSERT( aNode->GetName() == wxT(
"BUSTERM" ) );
978 bool firstPointParsed =
false;
979 bool secondPointParsed =
false;
981 for( ; cNode; cNode = cNode->
GetNext() )
983 wxString cNodeName = cNode->GetName();
985 if( cNodeName == wxT(
"SIGLOC" ) )
990 else if( cNodeName == wxT(
"PT" ) )
992 if( !firstPointParsed )
995 firstPointParsed =
true;
997 else if( !secondPointParsed )
1000 secondPointParsed =
true;
1013 if( !firstPointParsed || !secondPointParsed )
1020 wxASSERT( aNode->GetName() == wxT(
"BLOCKTERM" ) );
1028 for( ; cNode; cNode = cNode->
GetNext() )
1030 wxString cNodeName = cNode->GetName();
1032 if( cNodeName == wxT(
"SIGLOC" ) )
1052 for( ; cNode; cNode = cNode->
GetNext() )
1054 wxString cNodeName = cNode->GetName();
1060 else if( cNodeName == wxT(
"PATH" ) )
1064 else if( cNodeName == wxT(
"GROUPREF" ) )
1068 else if( cNodeName == wxT(
"REUSEBLOCKREF" ) )
1072 else if( cNodeName == wxT(
"CONLINECODE" ) )
1091 for( ; cNode; cNode = cNode->
GetNext() )
1093 wxString cNodeName = cNode->GetName();
1095 if( cNodeName == wxT(
"JPT" ) )
1098 jpt.
Parse( cNode, aContext );
1099 Junctions.insert( std::make_pair( jpt.
ID, jpt ) );
1105 else if( cNodeName == wxT(
"TERM" ) )
1108 pin.Parse( cNode, aContext );
1111 else if( cNodeName == wxT(
"BUSTERM" ) )
1114 bt.
Parse( cNode, aContext );
1117 else if( cNodeName == wxT(
"BLOCKTERM" ) )
1120 bt.
Parse( cNode, aContext );
1123 else if( cNodeName == wxT(
"DANGLER" ) )
1126 dang.
Parse( cNode, aContext );
1127 Danglers.insert( std::make_pair( dang.
ID, dang ) );
1129 else if( cNodeName == wxT(
"CONN" ) )
1132 conn.
Parse( cNode, aContext );
1145 wxCHECK( aNode->GetName() == wxT(
"SCHEMATIC" ), );
1149 for( ; cNode; cNode = cNode->
GetNext() )
1151 wxString cNodeName = cNode->GetName();
1153 if( cNodeName == wxT(
"GROUP" ) )
1156 group.Parse( cNode, aContext );
1159 else if( cNodeName == wxT(
"REUSEBLOCK" ) )
1162 reuseblock.
Parse( cNode, aContext );
1163 ReuseBlocks.insert( std::make_pair( reuseblock.
ID, reuseblock ) );
1165 else if( cNodeName == wxT(
"FIGURE" ) )
1168 figure.
Parse( cNode, aContext );
1169 Figures.insert( std::make_pair( figure.
ID, figure ) );
1171 else if( cNodeName == wxT(
"SYMBOL" ) )
1174 sym.
Parse( cNode, aContext );
1175 Symbols.insert( std::make_pair( sym.
ID, sym ) );
1177 else if( cNodeName == wxT(
"BUS" ) )
1180 bus.
Parse( cNode, aContext );
1181 Buses.insert( std::make_pair( bus.
ID, bus ) );
1183 else if( cNodeName == wxT(
"BLOCK" ) )
1186 block.
Parse( cNode, aContext );
1187 Blocks.insert( std::make_pair( block.
ID, block ) );
1189 else if( cNodeName == wxT(
"NET" ) )
1192 net.
Parse( cNode, aContext );
1193 Nets.insert( std::make_pair( net.
ID, net ) );
1195 else if( cNodeName == wxT(
"TEXT" ) )
1198 txt.
Parse( cNode, aContext );
1199 Texts.insert( std::make_pair( txt.
ID, txt ) );
1201 else if( cNodeName == wxT(
"DOCSYMBOL" ) )
1204 docsym.
Parse( cNode, aContext );
1207 else if( cNodeName == wxT(
"VHIERARCHY" ) )
1230 for( ; cNode; cNode = cNode->
GetNext() )
1236 else if( cNode->GetName() == wxT(
"SIGLOC" ) )
1252 wxASSERT( aNode->GetName() == wxT(
"DANGLER" ) );
1259 bool positionParsed =
false;
1261 for( ; cNode; cNode = cNode->
GetNext() )
1263 wxString cNodeName = cNode->GetName();
1265 if( cNodeName == wxT(
"SIGLOC" ) )
1270 else if( !positionParsed && cNodeName == wxT(
"PT" ) )
1273 positionParsed =
true;
constexpr double SCH_IU_PER_MM
Schematic internal units 1=100nm.
#define WARN_UNKNOWN_NODE_IO_ERROR(nodename, location)
#define THROW_MISSING_NODE_IO_ERROR(nodename, location)
#define THROW_MISSING_PARAMETER_IO_ERROR(param, location)
static const long UNDEFINED_VALUE
static void CheckNoNextNodes(XNODE *aNode)
static XNODE * LoadArchiveFile(const wxString &aFileName, const wxString &aFileTypeIdentifier, PROGRESS_REPORTER *aProgressReporter=nullptr)
Reads a CADSTAR Archive file (S-parameter format).
wxString LAYER_ID
ID of a Sheet (if schematic) or board Layer (if PCB)
static std::vector< VERTEX > ParseAllChildVertices(XNODE *aNode, PARSER_CONTEXT *aContext, bool aTestAllChildNodes=false)
If no children are present, it just returns an empty vector (without throwing an exception).
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
void checkPoint()
Updates m_progressReporter or throws if user canceled.
static READABILITY ParseReadability(XNODE *aNode)
static long GetXmlAttributeIDLong(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
static long GetNumberOfStepsForReporting(XNODE *aRootNode, std::vector< wxString > aSubNodeChildrenToCount)
PROGRESS_REPORTER * m_progressReporter
ASSIGNMENTS_SCM Assignments
CADSTAR_SCHEMATIC Schematic
@ UNDEFINED
Only used for error checking (not a real shape)
@ ROUNDED_RECT
Keyword "ROUNDED".
int KiCadUnitDivider
Use this value to convert units in this CSA file to KiCad units.
PARTNAMECOL SymbolPartNameColor
static TERMINAL_SHAPE_TYPE ParseTermShapeType(const wxString &aShapeStr)
void Parse()
Parses the file.
An extension of wxXmlNode that can format its contents as KiCad-style s-expressions.
XNODE * GetChildren() const
This file contains miscellaneous commonly used macros and functions.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
static wxString nodeName(const wxString &aSymbolPin)
bool ParseSubNode(XNODE *aChildNode, PARSER_CONTEXT *aContext)
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
bool ParseSubNode(XNODE *aChildNode, PARSER_CONTEXT *aContext)
DOCUMENTATION_SYMBOL_ID ID
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void ParseIdentifiers(XNODE *aNode, PARSER_CONTEXT *aContext)
bool ParseSubNode(XNODE *aChildNode, PARSER_CONTEXT *aContext)
bool ParseSubNode(XNODE *aChildNode, PARSER_CONTEXT *aContext)
void ParseIdentifiers(XNODE *aNode, PARSER_CONTEXT *aContext)
NETELEMENT_ID ID
First character is "J".
bool ParseSubNode(XNODE *aChildNode, PARSER_CONTEXT *aContext)
void ParseIdentifiers(XNODE *aNode, PARSER_CONTEXT *aContext)
std::function< void()> CheckPointCallback
Callback function to report progress.
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
POINT Origin
Origin of the component (this is used as the reference point when placing the component in the design...
bool ParseSubNode(XNODE *aChildNode, PARSER_CONTEXT *aContext)
bool Stub
When the CADSTAR Archive file is exported without the component library, if components on the board a...
void ParseIdentifiers(XNODE *aNode, PARSER_CONTEXT *aContext)
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
bool NetclassEditAttributeSettings
bool SpacingclassEditAttributeSettings
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
TYPE Type
Determines what the associated layer is, whether parent, child or clone.
ATTRIBUTE_LOCATION BlockLabel
LAYER_ID LayerID
The sheet block is on (TODO: verify this is true)
LAYER_ID AssocLayerID
Parent or Child linked sheet.
std::map< TERMINAL_ID, TERMINAL > Terminals
std::map< FIGURE_ID, FIGURE > Figures
LAYER_ID LayerID
Sheet on which bus is located.
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
std::map< SYMBOL_ID, SYMBOL > Symbols
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
std::map< REUSEBLOCK_ID, REUSEBLOCK > ReuseBlocks
VARIANT_HIERARCHY VariantHierarchy
std::map< DOCUMENTATION_SYMBOL_ID, DOCUMENTATION_SYMBOL > DocumentationSymbols
std::map< FIGURE_ID, FIGURE > Figures
std::map< TEXT_ID, TEXT > Texts
std::map< BLOCK_ID, BLOCK > Blocks
std::map< BUS_ID, BUS > Buses
std::map< GROUP_ID, GROUP > Groups
std::map< NET_ID, NET_SCH > Nets
std::map< TERMINALCODE_ID, TERMINALCODE > TerminalCodes
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
ATTRIBUTE_LOCATION AttrLoc
std::map< SYMDEF_ID, SYMDEF_SCM > SymbolDefinitions
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
< "BLOCKTERM" nodename (represents a connection to a block)
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
NETELEMENT_ID ID
First four characters "BLKT".
< "BUSTERM" nodename (represents a connection to a bus)
POINT FirstPoint
Point on the bus itself.
NETELEMENT_ID ID
First two characters "BT".
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
POINT SecondPoint
Start point for any wires.
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
std::vector< VERTEX > Path
LAYER_ID LayerID
Sheet on which the connection is drawn.
LINECODE_ID ConnectionLineCode
REUSEBLOCKREF ReuseBlockRef
< "DANGLER" nodename (represents a dangling wire)
NETELEMENT_ID ID
First character "D".
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
TERMINALCODE_ID TerminalCodeID
TERMINALCODE_ID TerminalCodeID
Usually a circle, but size can be varied.
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
< "TERM" nodename (represents a pin in a SCH symbol)
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
NETELEMENT_ID ID
First character is "P".
std::map< NETELEMENT_ID, DANGLER > Danglers
std::map< NETELEMENT_ID, SYM_TERM > Terminals
std::vector< CONNECTION_SCH > Connections
std::map< NETELEMENT_ID, BUS_TERM > BusTerminals
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
std::map< NETELEMENT_ID, BLOCK_TERM > BlockTerminals
std::map< NETELEMENT_ID, JUNCTION_SCH > Junctions
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
ATTRIBUTE_LOCATION AttrLoc
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
std::vector< LAYER_ID > SheetOrder
A vector to also store the order in which sheets are to be displayed.
std::map< LAYER_ID, SHEET_NAME > SheetNames
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
wxString Text
This contains the numbers of the other sheets where the signal reference is present separated by comm...
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
ATTRIBUTE_LOCATION AttrLoc
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
REUSEBLOCKREF ReuseBlockRef
GROUP_ID GroupID
If not empty, this symbol is part of a group.
LAYER_ID LayerID
Sheet on which symbol is located.
SYMBOL_ID VariantParentSymbolID
std::map< ATTRIBUTE_ID, ATTRIBUTE_VALUE > AttributeValues
GATE_ID GateID
The gate this symbol represents within the associated Part.
long ScaleRatioNumerator
Symbols can be arbitrarily scaled in CADSTAR.
SIGNALREFERENCELINK SigRefLink
Signal References (a special form of global signal) have annotations showing the location of all the ...
std::map< TERMINAL_ID, SYMPINNAME_LABEL > PinNames
Identifier of the pin in the PCB Equivalent to KiCad's Pin Number.
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
std::map< TERMINAL_ID, SYMPINNAME_LABEL > PinLabels
Equivalent to KiCad's Pin Name.
std::map< TERMINAL_ID, PIN_NUM > PinNumbers
This seems to only appear in older designs and is similar to PinNames but only allowing numerical val...
long ScaleRatioDenominator
std::map< TERMINAL_ID, TERMATTR > TerminalAttributes
SYMBOLVARIANT SymbolVariant
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
std::map< TERMINAL_ID, PIN_NUM_LABEL_LOC > PinLabelLocations
std::map< TERMINAL_ID, PIN_NUM_LABEL_LOC > PinNumberLocations
std::map< TERMINAL_ID, TERMINAL > Terminals
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
ATTRIBUTE_LOCATION AttrLoc
std::vector< ATTRIBUTE_VALUE > Attributes
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
long LeftLength
Might also be total length.
long RightLength
Could be blank.
TERMINAL_SHAPE_TYPE ShapeType
long OrientAngle
1/1000 of a Degree
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
static bool IsTermShape(XNODE *aNode)
TERMINALCODE_ID TerminalCodeID
void Parse(XNODE *aNode, PARSER_CONTEXT *aContext) override
POINT Position
Pad position within the component's coordinate frame.