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.
 
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 ...
 
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.