30#include <wx/translation.h>
44 std::vector<wxString> subNodeChildrenToCount = { wxT(
"LIBRARY" ), wxT(
"PARTS" ),
58 for( ; cNode; cNode = cNode->
GetNext() )
60 if( cNode->GetName() == wxT(
"HEADER" ) )
64 switch(
Header.Resolution )
71 wxASSERT_MSG(
true, wxT(
"Unknown File Resolution" ) );
75 else if( cNode->GetName() == wxT(
"ASSIGNMENTS" ) )
79 else if( cNode->GetName() == wxT(
"LIBRARY" ) )
83 else if( cNode->GetName() == wxT(
"DEFAULTS" ) )
89 else if( cNode->GetName() == wxT(
"PARTS" ) )
93 else if( cNode->GetName() == wxT(
"SHEETS" ) )
97 else if( cNode->GetName() == wxT(
"SCHEMATIC" ) )
101 else if( cNode->GetName() == wxT(
"DISPLAY" ) )
107 for( ; subNode; subNode = subNode->
GetNext() )
109 if( subNode->GetName() == wxT(
"ATTRCOLORS" ) )
113 else if( subNode->GetName() == wxT(
"SCMITEMCOLORS" ) )
117 for( ; sub2Node; sub2Node = sub2Node->
GetNext() )
119 if( sub2Node->GetName() == wxT(
"SYMCOL" ) )
123 for( ; sub3Node; sub3Node = sub3Node->
GetNext() )
125 if( sub3Node->GetName() == wxT(
"PARTNAMECOL" ) )
154 const wxString& aShapeStr )
156 if( aShapeStr == wxT(
"ANNULUS" ) )
158 else if( aShapeStr == wxT(
"BOX" ) )
160 else if( aShapeStr == wxT(
"BULLET" ) )
162 else if( aShapeStr == wxT(
"ROUND" ) )
164 else if( aShapeStr == wxT(
"CROSS" ) )
166 else if( aShapeStr == wxT(
"DIAMOND" ) )
168 else if( aShapeStr == wxT(
"FINGER" ) )
170 else if( aShapeStr == wxT(
"OCTAGON" ) )
172 else if( aShapeStr == wxT(
"PLUS" ) )
174 else if( aShapeStr == wxT(
"POINTER" ) )
176 else if( aShapeStr == wxT(
"RECTANGLE" ) )
178 else if( aShapeStr == wxT(
"ROUNDED" ) )
180 else if( aShapeStr == wxT(
"SQUARE" ) )
182 else if( aShapeStr == wxT(
"STAR" ) )
184 else if( aShapeStr == wxT(
"TRIANGLE" ) )
235 wxASSERT_MSG(
false,
"Unknown terminal shape type" );
241 if( aNode->
GetChildren()->GetName() == wxT(
"ORIENT" ) )
257 wxCHECK( aNode->GetName() == wxT(
"TERMINALCODE" ), );
263 wxString
location = wxString::Format(
"TERMINALCODE -> %s",
Name );
265 for( ; cNode; cNode = cNode->
GetNext() )
267 wxString cNodeName = cNode->GetName();
270 Shape.Parse( cNode, aContext );
271 else if( cNodeName == wxT(
"FILLED" ) )
281 wxCHECK( aNode->GetName() == wxT(
"CODEDEFS" ), );
285 for( ; cNode; cNode = cNode->
GetNext() )
287 wxString nodeName = cNode->GetName();
293 else if( nodeName == wxT(
"TERMINALCODE" ) )
296 termcode.
Parse( cNode, aContext );
309 wxCHECK( aNode->GetName() == wxT(
"ASSIGNMENTS" ), );
312 bool settingsParsed =
false;
314 for( ; cNode; cNode = cNode->
GetNext() )
316 if( cNode->GetName() == wxT(
"CODEDEFS" ) )
320 else if( cNode->GetName() == wxT(
"SETTINGS" ) )
322 settingsParsed =
true;
325 else if( cNode->GetName() == wxT(
"GRIDS" ) )
327 Grids.Parse( cNode, aContext );
329 else if( cNode->GetName() == wxT(
"NETCLASSEDITATTRIBSETTINGS" ) )
333 else if( cNode->GetName() == wxT(
"SPCCLASSEDITATTRIBSETTINGS" ) )
343 if( !settingsParsed )
350 wxCHECK( aNode->GetName() == wxT(
"TERMINAL" ), );
356 wxString
location = wxString::Format(
"TERMINAL %ld",
ID );
361 for( ; cNode; cNode = cNode->
GetNext() )
363 wxString cNodeName = cNode->GetName();
365 if( cNodeName == wxT(
"ORIENT" ) )
367 else if( cNodeName == wxT(
"PT" ) )
377 wxCHECK( aNode->GetName() == wxT(
"PINLABELLOC" )
378 || aNode->GetName() == wxT(
"PINNUMNAMELOC" ), );
386 for( ; cNode; cNode = cNode->
GetNext() )
401 wxCHECK( aNode->GetName() == wxT(
"SYMDEF" ), );
407 for( ; cNode; cNode = cNode->
GetNext() )
409 wxString cNodeName = cNode->GetName();
415 else if( cNodeName == wxT(
"TERMINAL" ) )
418 term.
Parse( cNode, aContext );
419 Terminals.insert( std::make_pair( term.
ID, term ) );
421 else if( cNodeName == wxT(
"PINLABELLOC" ) )
424 loc.
Parse( cNode, aContext );
427 else if( cNodeName == wxT(
"PINNUMNAMELOC" ) )
430 loc.
Parse( cNode, aContext );
446 wxCHECK( aNode->GetName() == wxT(
"LIBRARY" ), );
450 for( ; cNode; cNode = cNode->
GetNext() )
452 wxString cNodeName = cNode->GetName();
454 if( cNodeName == wxT(
"SYMDEF" ) )
457 symdef.
Parse( cNode, aContext );
460 else if( cNodeName == wxT(
"HIERARCHY" ) )
480 wxCHECK( aNode->GetName() == wxT(
"SHEETS" ), );
484 for( ; cNode; cNode = cNode->
GetNext() )
486 if( cNode->GetName() == wxT(
"SHEET" ) )
503 wxCHECK( aNode->GetName() == wxT(
"COMP" ), );
509 for( ; cNode; cNode = cNode->
GetNext() )
511 if( cNode->GetName() == wxT(
"READONLY" ) )
515 else if( cNode->GetName() == wxT(
"ATTRLOC" ) )
517 AttrLoc.Parse( cNode, aContext );
530 wxCHECK( aNode->GetName() == wxT(
"PARTREF" ), );
536 for( ; cNode; cNode = cNode->
GetNext() )
538 if( cNode->GetName() == wxT(
"READONLY" ) )
542 else if( cNode->GetName() == wxT(
"ATTRLOC" ) )
544 AttrLoc.Parse( cNode, aContext );
557 wxCHECK( aNode->GetName() == wxT(
"TERMATTR" ), );
563 for( ; cNode; cNode = cNode->
GetNext() )
565 if( cNode->GetName() == wxT(
"ATTR" ) )
568 val.
Parse( cNode, aContext );
581 wxCHECK( aNode->GetName() == wxT(
"SYMPINNAME" ) || aNode->GetName() == wxT(
"SYMPINLABEL" ), );
588 for( ; cNode; cNode = cNode->
GetNext() )
590 if( cNode->GetName() == wxT(
"ATTRLOC" ) )
592 AttrLoc.Parse( cNode, aContext );
605 wxCHECK( aNode->GetName() == wxT(
"PINNUM" ), );
612 for( ; cNode; cNode = cNode->
GetNext() )
614 if( cNode->GetName() == wxT(
"ATTRLOC" ) )
616 AttrLoc.Parse( cNode, aContext );
629 wxCHECK( aNode->GetName() == wxT(
"SYMBOLVARIANT" ), );
633 for( ; cNode; cNode = cNode->
GetNext() )
635 wxString cNodeName = cNode->GetName();
637 if( cNodeName == wxT(
"SIGNALREF" ) )
639 Type = TYPE::SIGNALREF;
642 else if( cNodeName == wxT(
"GLOBALSIGNAL" ) )
644 Type = TYPE::GLOBALSIGNAL;
647 else if( cNodeName == wxT(
"TESTPOINT" ) )
649 Type = TYPE::TESTPOINT;
662 wxCHECK( aNode->GetName() == wxT(
"SIGNALREFERENCELINK" ), );
670 for( ; cNode; cNode = cNode->
GetNext() )
674 else if( cNode->GetName() == wxT(
"SIGREFTEXT" ) )
687 wxCHECK( aNode->GetName() == wxT(
"SYMBOL" ), );
694 bool originParsed =
false;
695 wxString
location = wxString::Format(
"SYMBOL -> %s",
ID );
697 for( ; cNode; cNode = cNode->
GetNext() )
699 wxString cNodeName = cNode->GetName();
701 if( !originParsed && cNodeName == wxT(
"PT" ) )
703 Origin.Parse( cNode, aContext );
706 else if( cNodeName == wxT(
"COMP" ) )
711 else if( cNodeName == wxT(
"PARTREF" ) )
713 PartRef.Parse( cNode, aContext );
716 else if( cNodeName == wxT(
"PARTNAMENOTVISIBLE" ) )
720 else if( cNodeName == wxT(
"VSYMMASTER" ) )
725 else if( cNodeName == wxT(
"GROUPREF" ) )
729 else if( cNodeName == wxT(
"REUSEBLOCKREF" ) )
733 else if( cNodeName == wxT(
"SIGNALREFERENCELINK" ) )
737 else if( cNodeName == wxT(
"ORIENT" ) )
741 else if( cNodeName == wxT(
"MIRROR" ) )
745 else if( cNodeName == wxT(
"FIX" ) )
749 else if( cNodeName == wxT(
"SCALE" ) )
754 else if( cNodeName == wxT(
"READABILITY" ) )
758 else if( cNodeName == wxT(
"GATE" ) )
762 else if( cNodeName == wxT(
"SYMBOLVARIANT" ) )
767 else if( cNodeName == wxT(
"TERMATTR" ) )
770 termattr.
Parse( cNode, aContext );
773 else if( cNodeName == wxT(
"SYMPINLABEL" ) )
776 sympinname.
Parse( cNode, aContext );
779 else if( cNodeName == wxT(
"SYMPINNAME" ) )
782 sympinname.
Parse( cNode, aContext );
785 else if( cNodeName == wxT(
"PINNUM" ) )
788 pinNum.
Parse( cNode, aContext );
791 else if( cNodeName == wxT(
"ATTR" ) )
794 attrVal.
Parse( cNode, aContext );
810 wxCHECK( aNode->GetName() == wxT(
"SIGLOC" ), );
817 for( ; cNode; cNode = cNode->
GetNext() )
832 wxCHECK( aNode->GetName() == wxT(
"BUS" ), );
840 for( ; cNode; cNode = cNode->
GetNext() )
842 wxString cNodeName = cNode->GetName();
844 if( SHAPE::IsShape( cNode ) )
846 Shape.Parse( cNode, aContext );
848 else if( cNodeName == wxT(
"BUSNAME" ) )
856 if( subNode->GetName() == wxT(
"SIGLOC" ) )
858 BusLabel.Parse( subNode, aContext );
877 wxCHECK( aNode->GetName() == wxT(
"BLOCK" ), );
884 for( ; cNode; cNode = cNode->
GetNext() )
886 wxString cNodeName = cNode->GetName();
888 if( cNodeName == wxT(
"CLONE" ) )
892 else if( cNodeName == wxT(
"PARENT" ) )
897 else if( cNodeName == wxT(
"CHILD" ) )
902 else if( cNodeName == wxT(
"BLOCKNAME" ) )
909 if( subNode->GetName() == wxT(
"ATTRLOC" ) )
920 else if( cNodeName == wxT(
"TERMINAL" ) )
923 term.
Parse( cNode, aContext );
924 Terminals.insert( std::make_pair( term.
ID, term ) );
926 else if( cNodeName == wxT(
"FIGURE" ) )
929 figure.
Parse( cNode, aContext );
930 Figures.insert( std::make_pair( figure.
ID, figure ) );
942 wxASSERT( aNode->GetName() == wxT(
"TERM" ) );
951 for( ; cNode; cNode = cNode->
GetNext() )
953 wxString cNodeName = cNode->GetName();
955 if( cNodeName == wxT(
"SIGLOC" ) )
970 wxASSERT( aNode->GetName() == wxT(
"BUSTERM" ) );
977 bool firstPointParsed =
false;
978 bool secondPointParsed =
false;
980 for( ; cNode; cNode = cNode->
GetNext() )
982 wxString cNodeName = cNode->GetName();
984 if( cNodeName == wxT(
"SIGLOC" ) )
989 else if( cNodeName == wxT(
"PT" ) )
991 if( !firstPointParsed )
994 firstPointParsed =
true;
996 else if( !secondPointParsed )
999 secondPointParsed =
true;
1012 if( !firstPointParsed || !secondPointParsed )
1019 wxASSERT( aNode->GetName() == wxT(
"BLOCKTERM" ) );
1027 for( ; cNode; cNode = cNode->
GetNext() )
1029 wxString cNodeName = cNode->GetName();
1031 if( cNodeName == wxT(
"SIGLOC" ) )
1051 for( ; cNode; cNode = cNode->
GetNext() )
1053 wxString cNodeName = cNode->GetName();
1059 else if( cNodeName == wxT(
"PATH" ) )
1063 else if( cNodeName == wxT(
"GROUPREF" ) )
1067 else if( cNodeName == wxT(
"REUSEBLOCKREF" ) )
1071 else if( cNodeName == wxT(
"CONLINECODE" ) )
1090 for( ; cNode; cNode = cNode->
GetNext() )
1092 wxString cNodeName = cNode->GetName();
1094 if( cNodeName == wxT(
"JPT" ) )
1097 jpt.
Parse( cNode, aContext );
1098 Junctions.insert( std::make_pair( jpt.
ID, jpt ) );
1104 else if( cNodeName == wxT(
"TERM" ) )
1107 pin.Parse( cNode, aContext );
1110 else if( cNodeName == wxT(
"BUSTERM" ) )
1113 bt.
Parse( cNode, aContext );
1116 else if( cNodeName == wxT(
"BLOCKTERM" ) )
1119 bt.
Parse( cNode, aContext );
1122 else if( cNodeName == wxT(
"DANGLER" ) )
1125 dang.
Parse( cNode, aContext );
1126 Danglers.insert( std::make_pair( dang.
ID, dang ) );
1128 else if( cNodeName == wxT(
"CONN" ) )
1131 conn.
Parse( cNode, aContext );
1144 wxCHECK( aNode->GetName() == wxT(
"SCHEMATIC" ), );
1148 for( ; cNode; cNode = cNode->
GetNext() )
1150 wxString cNodeName = cNode->GetName();
1152 if( cNodeName == wxT(
"GROUP" ) )
1155 group.Parse( cNode, aContext );
1158 else if( cNodeName == wxT(
"REUSEBLOCK" ) )
1161 reuseblock.
Parse( cNode, aContext );
1162 ReuseBlocks.insert( std::make_pair( reuseblock.
ID, reuseblock ) );
1164 else if( cNodeName == wxT(
"FIGURE" ) )
1167 figure.
Parse( cNode, aContext );
1168 Figures.insert( std::make_pair( figure.
ID, figure ) );
1170 else if( cNodeName == wxT(
"SYMBOL" ) )
1173 sym.
Parse( cNode, aContext );
1174 Symbols.insert( std::make_pair( sym.
ID, sym ) );
1176 else if( cNodeName == wxT(
"BUS" ) )
1179 bus.
Parse( cNode, aContext );
1180 Buses.insert( std::make_pair( bus.
ID, bus ) );
1182 else if( cNodeName == wxT(
"BLOCK" ) )
1185 block.
Parse( cNode, aContext );
1186 Blocks.insert( std::make_pair( block.
ID, block ) );
1188 else if( cNodeName == wxT(
"NET" ) )
1191 net.
Parse( cNode, aContext );
1192 Nets.insert( std::make_pair( net.
ID, net ) );
1194 else if( cNodeName == wxT(
"TEXT" ) )
1197 txt.
Parse( cNode, aContext );
1198 Texts.insert( std::make_pair( txt.
ID, txt ) );
1200 else if( cNodeName == wxT(
"DOCSYMBOL" ) )
1203 docsym.
Parse( cNode, aContext );
1206 else if( cNodeName == wxT(
"VHIERARCHY" ) )
1229 for( ; cNode; cNode = cNode->
GetNext() )
1235 else if( cNode->GetName() == wxT(
"SIGLOC" ) )
1251 wxASSERT( aNode->GetName() == wxT(
"DANGLER" ) );
1258 bool positionParsed =
false;
1260 for( ; cNode; cNode = cNode->
GetNext() )
1262 wxString cNodeName = cNode->GetName();
1264 if( cNodeName == wxT(
"SIGLOC" ) )
1269 else if( !positionParsed && cNodeName == wxT(
"PT" ) )
1272 positionParsed =
true;
constexpr double SCH_IU_PER_MM
Schematic internal units 1=100nm.
#define THROW_MISSING_NODE_IO_ERROR(nodename, location)
#define THROW_UNKNOWN_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 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 std::vector< POINT > ParseAllChildPoints(XNODE *aNode, PARSER_CONTEXT *aContext, bool aTestAllChildNodes=false, int aExpectedNumPoints=UNDEFINED_VALUE)
If no children are present, it just returns an empty vector (without throwing an exception).
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.
Hold an XML or S-expression element.
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 ...
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
LAYER_ID LayerID
Sheet on which the connection is drawn.
LINECODE_ID ConnectionLineCode
std::vector< POINT > Path
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.