CADSTAR PCB Archive Importer: Parse TRUNK and TRUNKREF, display error if present (no KiCad equivalent)
This commit is contained in:
parent
8b13140122
commit
5273c77fbf
|
@ -1727,28 +1727,45 @@ void CADSTAR_ARCHIVE_PARSER::PARTS::Parse( XNODE* aNode )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CADSTAR_ARCHIVE_PARSER::NET::JUNCTION::Parse( XNODE* aNode )
|
void CADSTAR_ARCHIVE_PARSER::NET::JUNCTION::ParseIdentifiers( XNODE* aNode )
|
||||||
{
|
{
|
||||||
wxASSERT( aNode->GetName() == wxT( "JPT" ) );
|
wxASSERT( aNode->GetName() == wxT( "JPT" ) );
|
||||||
|
|
||||||
ID = GetXmlAttributeIDString( aNode, 0 );
|
ID = GetXmlAttributeIDString( aNode, 0 );
|
||||||
LayerID = GetXmlAttributeIDString( aNode, 1 );
|
LayerID = GetXmlAttributeIDString( aNode, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CADSTAR_ARCHIVE_PARSER::NET::JUNCTION::ParseSubNode( XNODE* aChildNode )
|
||||||
|
{
|
||||||
|
wxString cNodeName = aChildNode->GetName();
|
||||||
|
|
||||||
|
if( cNodeName == wxT( "PT" ) )
|
||||||
|
Location.Parse( aChildNode );
|
||||||
|
else if( cNodeName == wxT( "FIX" ) )
|
||||||
|
Fixed = true;
|
||||||
|
else if( cNodeName == wxT( "GROUPREF" ) )
|
||||||
|
GroupID = GetXmlAttributeIDString( aChildNode, 0 );
|
||||||
|
else if( cNodeName == wxT( "REUSEBLOCKREF" ) )
|
||||||
|
ReuseBlockRef.Parse( aChildNode );
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CADSTAR_ARCHIVE_PARSER::NET::JUNCTION::Parse( XNODE* aNode )
|
||||||
|
{
|
||||||
|
ParseIdentifiers( aNode );
|
||||||
XNODE* cNode = aNode->GetChildren();
|
XNODE* cNode = aNode->GetChildren();
|
||||||
|
|
||||||
for( ; cNode; cNode = cNode->GetNext() )
|
for( ; cNode; cNode = cNode->GetNext() )
|
||||||
{
|
{
|
||||||
wxString cNodeName = cNode->GetName();
|
if( ParseSubNode( cNode ) )
|
||||||
|
continue;
|
||||||
if( cNodeName == wxT( "PT" ) )
|
|
||||||
Location.Parse( cNode );
|
|
||||||
else if( cNodeName == wxT( "FIX" ) )
|
|
||||||
Fixed = true;
|
|
||||||
else if( cNodeName == wxT( "GROUPREF" ) )
|
|
||||||
GroupID = GetXmlAttributeIDString( cNode, 0 );
|
|
||||||
else if( cNodeName == wxT( "REUSEBLOCKREF" ) )
|
|
||||||
ReuseBlockRef.Parse( cNode );
|
|
||||||
else
|
else
|
||||||
THROW_UNKNOWN_NODE_IO_ERROR( cNodeName, aNode->GetName() );
|
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1036,6 +1036,8 @@ public:
|
||||||
REUSEBLOCKREF ReuseBlockRef;
|
REUSEBLOCKREF ReuseBlockRef;
|
||||||
bool Fixed = false;
|
bool Fixed = false;
|
||||||
|
|
||||||
|
void ParseIdentifiers( XNODE* aNode );
|
||||||
|
bool ParseSubNode( XNODE* aChildNode );
|
||||||
virtual void Parse( XNODE* aNode );
|
virtual void Parse( XNODE* aNode );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,14 @@ void CADSTAR_PCB_ARCHIVE_LOADER::Load( ::BOARD* aBoard )
|
||||||
loadCoppers();
|
loadCoppers();
|
||||||
loadNets();
|
loadNets();
|
||||||
|
|
||||||
|
|
||||||
|
if( Layout.Trunks.size() > 0 )
|
||||||
|
{
|
||||||
|
wxLogWarning(
|
||||||
|
_( "The CADSTAR design contains Trunk routing elements, which have no KiCad "
|
||||||
|
"equivalent. These elements were not loaded." ) );
|
||||||
|
}
|
||||||
|
|
||||||
if( Layout.VariantHierarchy.Variants.size() > 0 )
|
if( Layout.VariantHierarchy.Variants.size() > 0 )
|
||||||
{
|
{
|
||||||
wxLogWarning(
|
wxLogWarning(
|
||||||
|
|
|
@ -1894,6 +1894,15 @@ CADSTAR_PCB_ARCHIVE_PARSER::TESTLAND_SIDE CADSTAR_PCB_ARCHIVE_PARSER::ParseTestl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CADSTAR_PCB_ARCHIVE_PARSER::TRUNK::Parse( XNODE* aNode )
|
||||||
|
{
|
||||||
|
wxASSERT( aNode->GetName() == wxT( "TRUNK" ) );
|
||||||
|
|
||||||
|
ID = GetXmlAttributeIDString( aNode, 0 );
|
||||||
|
Definition = GetXmlAttributeIDString( aNode, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::PIN::Parse( XNODE* aNode )
|
void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::PIN::Parse( XNODE* aNode )
|
||||||
{
|
{
|
||||||
wxASSERT( aNode->GetName() == wxT( "PIN" ) );
|
wxASSERT( aNode->GetName() == wxT( "PIN" ) );
|
||||||
|
@ -1905,6 +1914,23 @@ void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::PIN::Parse( XNODE* aNode )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::JUNCTION_PCB::Parse( XNODE* aNode )
|
||||||
|
{
|
||||||
|
ParseIdentifiers( aNode );
|
||||||
|
XNODE* cNode = aNode->GetChildren();
|
||||||
|
|
||||||
|
for( ; cNode; cNode = cNode->GetNext() )
|
||||||
|
{
|
||||||
|
if( ParseSubNode( cNode ) )
|
||||||
|
continue;
|
||||||
|
else if( cNode->GetName() == wxT( "TRUNKREF" ) )
|
||||||
|
TrunkID = GetXmlAttributeIDString( cNode, 0 );
|
||||||
|
else
|
||||||
|
THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::VIA::Parse( XNODE* aNode )
|
void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::VIA::Parse( XNODE* aNode )
|
||||||
{
|
{
|
||||||
wxASSERT( aNode->GetName() == wxT( "VIA" ) );
|
wxASSERT( aNode->GetName() == wxT( "VIA" ) );
|
||||||
|
@ -1929,6 +1955,8 @@ void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::VIA::Parse( XNODE* aNode )
|
||||||
ReuseBlockRef.Parse( cNode );
|
ReuseBlockRef.Parse( cNode );
|
||||||
else if( cNodeName == wxT( "TESTLAND" ) )
|
else if( cNodeName == wxT( "TESTLAND" ) )
|
||||||
TestlandSide = ParseTestlandSide( cNode );
|
TestlandSide = ParseTestlandSide( cNode );
|
||||||
|
else if( cNode->GetName() == wxT( "TRUNKREF" ) )
|
||||||
|
TrunkID = GetXmlAttributeIDString( cNode, 0 );
|
||||||
else
|
else
|
||||||
THROW_UNKNOWN_NODE_IO_ERROR( cNodeName, aNode->GetName() );
|
THROW_UNKNOWN_NODE_IO_ERROR( cNodeName, aNode->GetName() );
|
||||||
}
|
}
|
||||||
|
@ -2026,6 +2054,10 @@ void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::CONNECTION_PCB::Parse( XNODE* aNode )
|
||||||
Unrouted = true;
|
Unrouted = true;
|
||||||
UnrouteLayerID = GetXmlAttributeIDString( cNode, 0 );
|
UnrouteLayerID = GetXmlAttributeIDString( cNode, 0 );
|
||||||
}
|
}
|
||||||
|
else if( cNode->GetName() == wxT( "TRUNKREF" ) )
|
||||||
|
{
|
||||||
|
TrunkID = GetXmlAttributeIDString( cNode, 0 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
THROW_UNKNOWN_NODE_IO_ERROR( cNodeName, wxT( "CONN" ) );
|
THROW_UNKNOWN_NODE_IO_ERROR( cNodeName, wxT( "CONN" ) );
|
||||||
|
@ -2045,7 +2077,13 @@ void CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::Parse( XNODE* aNode )
|
||||||
{
|
{
|
||||||
wxString cNodeName = cNode->GetName();
|
wxString cNodeName = cNode->GetName();
|
||||||
|
|
||||||
if( ParseSubNode( cNode ) )
|
if( cNodeName == wxT( "JPT" ) )
|
||||||
|
{
|
||||||
|
JUNCTION_PCB jpt;
|
||||||
|
jpt.Parse( cNode );
|
||||||
|
Junctions.insert( std::make_pair( jpt.ID, jpt ) );
|
||||||
|
}
|
||||||
|
else if( ParseSubNode( cNode ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -2440,6 +2478,12 @@ void CADSTAR_PCB_ARCHIVE_PARSER::LAYOUT::Parse( XNODE* aNode )
|
||||||
comp.Parse( cNode );
|
comp.Parse( cNode );
|
||||||
Components.insert( std::make_pair( comp.ID, comp ) );
|
Components.insert( std::make_pair( comp.ID, comp ) );
|
||||||
}
|
}
|
||||||
|
else if( cNodeName == wxT( "TRUNK" ) )
|
||||||
|
{
|
||||||
|
TRUNK trunk;
|
||||||
|
trunk.Parse( cNode );
|
||||||
|
Trunks.insert( std::make_pair( trunk.ID, trunk ) );
|
||||||
|
}
|
||||||
else if( cNodeName == wxT( "NET" ) )
|
else if( cNodeName == wxT( "NET" ) )
|
||||||
{
|
{
|
||||||
NET_PCB net;
|
NET_PCB net;
|
||||||
|
|
|
@ -73,6 +73,7 @@ public:
|
||||||
typedef long COPPER_TERM_ID;
|
typedef long COPPER_TERM_ID;
|
||||||
typedef wxString COPPER_ID;
|
typedef wxString COPPER_ID;
|
||||||
typedef wxString DRILL_TABLE_ID;
|
typedef wxString DRILL_TABLE_ID;
|
||||||
|
typedef wxString TRUNK_ID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Type of layer appropriate for the material being set up
|
* @brief Type of layer appropriate for the material being set up
|
||||||
|
@ -921,6 +922,15 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct TRUNK
|
||||||
|
{
|
||||||
|
TRUNK_ID ID;
|
||||||
|
wxString Definition; // TODO: more work required to fully parse the TRUNK structure
|
||||||
|
|
||||||
|
void Parse( XNODE* aNode );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct NET_PCB : CADSTAR_ARCHIVE_PARSER::NET
|
struct NET_PCB : CADSTAR_ARCHIVE_PARSER::NET
|
||||||
{
|
{
|
||||||
struct PIN ///< "PIN" nodename (represents a PAD in a PCB component)
|
struct PIN ///< "PIN" nodename (represents a PAD in a PCB component)
|
||||||
|
@ -932,12 +942,20 @@ public:
|
||||||
void Parse( XNODE* aNode );
|
void Parse( XNODE* aNode );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct JUNCTION_PCB : CADSTAR_ARCHIVE_PARSER::NET::JUNCTION ///< "JPT" nodename
|
||||||
|
{
|
||||||
|
TRUNK_ID TrunkID; ///< TRUNKREF Statements
|
||||||
|
|
||||||
|
void Parse( XNODE* aNode ) override;
|
||||||
|
};
|
||||||
|
|
||||||
struct VIA ///< "VIA" nodename
|
struct VIA ///< "VIA" nodename
|
||||||
{
|
{
|
||||||
NETELEMENT_ID ID; ///< First character is "V"
|
NETELEMENT_ID ID; ///< First character is "V"
|
||||||
VIACODE_ID ViaCodeID;
|
VIACODE_ID ViaCodeID;
|
||||||
LAYERPAIR_ID LayerPairID;
|
LAYERPAIR_ID LayerPairID;
|
||||||
POINT Location;
|
POINT Location;
|
||||||
|
TRUNK_ID TrunkID; ///< TRUNKREF Statements
|
||||||
GROUP_ID GroupID = wxEmptyString; ///< If not empty, this VIA is part of a group.
|
GROUP_ID GroupID = wxEmptyString; ///< If not empty, this VIA is part of a group.
|
||||||
REUSEBLOCKREF ReuseBlockRef;
|
REUSEBLOCKREF ReuseBlockRef;
|
||||||
TESTLAND_SIDE TestlandSide = TESTLAND_SIDE::NONE;
|
TESTLAND_SIDE TestlandSide = TESTLAND_SIDE::NONE;
|
||||||
|
@ -983,11 +1001,13 @@ public:
|
||||||
///< as opposed to a route (track in KiCad terms)
|
///< as opposed to a route (track in KiCad terms)
|
||||||
|
|
||||||
LAYER_ID UnrouteLayerID = wxEmptyString; ///< See Unrouted member variable.
|
LAYER_ID UnrouteLayerID = wxEmptyString; ///< See Unrouted member variable.
|
||||||
|
TRUNK_ID TrunkID; ///< TRUNKREF Statements
|
||||||
|
|
||||||
void Parse( XNODE* aNode ) override;
|
void Parse( XNODE* aNode ) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::map<NETELEMENT_ID, PIN> Pins;
|
std::map<NETELEMENT_ID, PIN> Pins;
|
||||||
|
std::map<NETELEMENT_ID, JUNCTION_PCB> Junctions;
|
||||||
std::map<NETELEMENT_ID, VIA> Vias;
|
std::map<NETELEMENT_ID, VIA> Vias;
|
||||||
std::map<NETELEMENT_ID, COPPER_TERMINAL> CopperTerminals;
|
std::map<NETELEMENT_ID, COPPER_TERMINAL> CopperTerminals;
|
||||||
std::vector<CONNECTION_PCB> Connections;
|
std::vector<CONNECTION_PCB> Connections;
|
||||||
|
@ -1160,6 +1180,7 @@ public:
|
||||||
std::map<AREA_ID, AREA> Areas;
|
std::map<AREA_ID, AREA> Areas;
|
||||||
std::map<COMPONENT_ID, COMPONENT> Components;
|
std::map<COMPONENT_ID, COMPONENT> Components;
|
||||||
std::map<DOCUMENTATION_SYMBOL_ID, DOCUMENTATION_SYMBOL> DocumentationSymbols;
|
std::map<DOCUMENTATION_SYMBOL_ID, DOCUMENTATION_SYMBOL> DocumentationSymbols;
|
||||||
|
std::map<TRUNK_ID, TRUNK> Trunks;
|
||||||
std::map<NET_ID, NET_PCB> Nets; ///< Contains tracks and vias
|
std::map<NET_ID, NET_PCB> Nets; ///< Contains tracks and vias
|
||||||
std::map<TEMPLATE_ID, TEMPLATE> Templates;
|
std::map<TEMPLATE_ID, TEMPLATE> Templates;
|
||||||
std::map<COPPER_ID, COPPER> Coppers;
|
std::map<COPPER_ID, COPPER> Coppers;
|
||||||
|
|
Loading…
Reference in New Issue