CADSTAR PCB Archive Importer: Parse VARIANT data + add missing "REFPLANE" flag to layers
This commit is contained in:
parent
349ac06ee2
commit
05e5740504
|
@ -585,6 +585,14 @@ void CADSTAR_PCB_ARCHIVE_PARSER::LAYER::Parse( XNODE* aNode )
|
|||
{
|
||||
Description = GetXmlAttributeIDString( cNode, 0 );
|
||||
}
|
||||
else if( cNodeName == wxT( "REFPLANE" ) )
|
||||
{
|
||||
ReferencePlane = true;
|
||||
}
|
||||
else if( cNodeName == wxT( "VLAYER" ) )
|
||||
{
|
||||
VariantLayer = true;
|
||||
}
|
||||
else if( cNodeName == wxT( "LASUBTYP" ) )
|
||||
{
|
||||
//Process subtype
|
||||
|
@ -2771,6 +2779,11 @@ void CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT::Parse( XNODE* aNode )
|
|||
{
|
||||
OrientAngle = GetXmlAttributeIDLong( cNode, 0 );
|
||||
}
|
||||
else if( cNodeName == wxT( "VCOMPMASTER" ) )
|
||||
{
|
||||
VariantParentComponentID = GetXmlAttributeIDString( aNode, 0 );
|
||||
VariantID = GetXmlAttributeIDString( aNode, 1 );
|
||||
}
|
||||
else if( cNodeName == wxT( "TEXTLOC" ) )
|
||||
{
|
||||
TEXT_LOCATION textloc;
|
||||
|
@ -3201,7 +3214,6 @@ void CADSTAR_PCB_ARCHIVE_PARSER::TEMPLATE::POURING::Parse( XNODE* aNode )
|
|||
MinDisjointCopper = GetXmlAttributeIDLong( aNode, 8 );
|
||||
|
||||
XNODE* cNode = aNode->GetChildren();
|
||||
bool fillTypeParsed = false;
|
||||
|
||||
for( ; cNode; cNode = cNode->GetNext() )
|
||||
{
|
||||
|
@ -3221,23 +3233,18 @@ void CADSTAR_PCB_ARCHIVE_PARSER::TEMPLATE::POURING::Parse( XNODE* aNode )
|
|||
TargetForAutorouting = true;
|
||||
else if( cNodeName == wxT( "THERMALCUTOUT" ) )
|
||||
ReliefType = RELIEF_TYPE::CUTOUTS;
|
||||
else if( !fillTypeParsed && cNodeName == wxT( "FILLED" ) )
|
||||
else if( cNodeName == wxT( "FILLED" ) )
|
||||
{
|
||||
FillType = COPPER_FILL_TYPE::FILLED;
|
||||
fillTypeParsed = true;
|
||||
}
|
||||
else if( !fillTypeParsed && cNodeName == wxT( "HATCHCODEREF" ) )
|
||||
else if( cNodeName == wxT( "HATCHCODEREF" ) )
|
||||
{
|
||||
FillType = COPPER_FILL_TYPE::HATCHED;
|
||||
HatchCodeID = GetXmlAttributeIDString( cNode, 0 );
|
||||
fillTypeParsed = true;
|
||||
}
|
||||
else
|
||||
THROW_UNKNOWN_NODE_IO_ERROR( cNodeName, wxT( "POURING" ) );
|
||||
}
|
||||
|
||||
if( !fillTypeParsed )
|
||||
THROW_MISSING_NODE_IO_ERROR( wxT( "FILLED" ), wxT( "POURING" ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -3492,6 +3499,26 @@ void CADSTAR_PCB_ARCHIVE_PARSER::DRILL_TABLE::Parse( XNODE* aNode )
|
|||
}
|
||||
|
||||
|
||||
void CADSTAR_PCB_ARCHIVE_PARSER::VARIANT::Parse( XNODE* aNode )
|
||||
{
|
||||
wxASSERT( aNode->GetName() == wxT( "VMASTER" ) || aNode->GetName() == wxT( "VARIANT" ) );
|
||||
|
||||
ID = GetXmlAttributeIDString( aNode, 0 );
|
||||
|
||||
if( aNode->GetName() == wxT( "VMASTER" ) )
|
||||
{
|
||||
Name = GetXmlAttributeIDString( aNode, 1 );
|
||||
Description = GetXmlAttributeIDString( aNode, 2 );
|
||||
}
|
||||
else
|
||||
{
|
||||
ParentID = GetXmlAttributeIDString( aNode, 1 );
|
||||
Name = GetXmlAttributeIDString( aNode, 2 );
|
||||
Description = GetXmlAttributeIDString( aNode, 3 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CADSTAR_PCB_ARCHIVE_PARSER::LAYOUT::Parse( XNODE* aNode )
|
||||
{
|
||||
wxASSERT( aNode->GetName() == wxT( "LAYOUT" ) );
|
||||
|
@ -3609,6 +3636,25 @@ void CADSTAR_PCB_ARCHIVE_PARSER::LAYOUT::Parse( XNODE* aNode )
|
|||
drilltable.Parse( cNode );
|
||||
DrillTables.insert( std::make_pair( drilltable.ID, drilltable ) );
|
||||
}
|
||||
else if( cNodeName == wxT( "VHIERARCHY" ) )
|
||||
{
|
||||
XNODE* subNode = cNode->GetChildren();
|
||||
|
||||
for( ; subNode; subNode = subNode->GetNext() )
|
||||
{
|
||||
if( subNode->GetName() == wxT( "VMASTER" )
|
||||
|| subNode->GetName() == wxT( "VARIANT" ) )
|
||||
{
|
||||
VARIANT variant;
|
||||
variant.Parse( subNode );
|
||||
VariantHierarchy.insert( std::make_pair( variant.ID, variant ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
THROW_UNKNOWN_NODE_IO_ERROR( subNode->GetName(), cNode->GetName() );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( cNodeName == wxT( "ERRORMARK" ) )
|
||||
{
|
||||
//ignore (this is a DRC error marker in cadstar)
|
||||
|
|
|
@ -104,6 +104,7 @@ public:
|
|||
typedef wxString AREA_ID;
|
||||
typedef wxString NET_ID;
|
||||
typedef wxString COMPONENT_ID;
|
||||
typedef wxString VARIANT_ID;
|
||||
typedef wxString DOCUMENTATION_SYMBOL_ID;
|
||||
typedef wxString NETELEMENT_ID;
|
||||
typedef wxString TEMPLATE_ID;
|
||||
|
@ -253,6 +254,8 @@ public:
|
|||
long Thickness = 0; ///< Note: Units of length are defined in file header
|
||||
MATERIAL_ID MaterialId;
|
||||
EMBEDDING Embedding = EMBEDDING::NONE;
|
||||
bool ReferencePlane = false;
|
||||
bool VariantLayer = false;
|
||||
|
||||
void Parse( XNODE* aNode );
|
||||
};
|
||||
|
@ -1691,6 +1694,8 @@ public:
|
|||
|
||||
GROUP_ID GroupID = wxEmptyString; ///< If not empty, this component is part of a group
|
||||
REUSEBLOCKREF ReuseBlockRef;
|
||||
COMPONENT_ID VariantParentComponentID = wxEmptyString;
|
||||
VARIANT_ID VariantID = wxEmptyString; ///< TODO: find out what this represents
|
||||
long OrientAngle = 0;
|
||||
bool TestPoint = false; ///< Indicates whether this component should be treated
|
||||
///< as a testpoint. See SYMDEF_TYPE::TESTPOINT
|
||||
|
@ -1881,7 +1886,6 @@ public:
|
|||
{
|
||||
enum class COPPER_FILL_TYPE
|
||||
{
|
||||
UNDEFINED,
|
||||
FILLED,
|
||||
HATCHED ///< This is a user defined HATCHCODE_ID
|
||||
};
|
||||
|
@ -1936,8 +1940,8 @@ public:
|
|||
bool AutomaticRepour = false; ///< true when subnode "REGENERATE" is present
|
||||
bool TargetForAutorouting = false; ///< true when subnode "AUTOROUTETARGET" is present
|
||||
|
||||
RELIEF_TYPE ReliefType = RELIEF_TYPE::CROSS; ///< See RELIEF_TYPE
|
||||
COPPER_FILL_TYPE FillType = COPPER_FILL_TYPE::UNDEFINED;
|
||||
RELIEF_TYPE ReliefType = RELIEF_TYPE::CROSS; ///< See RELIEF_TYPE
|
||||
COPPER_FILL_TYPE FillType = COPPER_FILL_TYPE::FILLED; ///< Assume solid fill
|
||||
HATCHCODE_ID HatchCodeID = wxEmptyString; ///< Only for FillType = HATCHED
|
||||
|
||||
void Parse( XNODE* aNode );
|
||||
|
@ -2021,6 +2025,17 @@ public:
|
|||
void Parse( XNODE* aNode );
|
||||
};
|
||||
|
||||
|
||||
struct VARIANT ///< Nodename = "VARIANT" or "VMASTER" (master variant
|
||||
{
|
||||
VARIANT_ID ID = wxEmptyString;
|
||||
VARIANT_ID ParentID = wxEmptyString; ///< if empty, then this one is the master
|
||||
wxString Name = wxEmptyString;
|
||||
wxString Description = wxEmptyString;
|
||||
|
||||
void Parse( XNODE* aNode );
|
||||
};
|
||||
|
||||
|
||||
struct LAYOUT
|
||||
{
|
||||
|
@ -2041,6 +2056,7 @@ public:
|
|||
std::map<TEXT_ID, TEXT> Texts;
|
||||
std::map<DIMENSION_ID, DIMENSION> Dimensions;
|
||||
std::map<DRILL_TABLE_ID, DRILL_TABLE> DrillTables;
|
||||
std::map<VARIANT_ID, VARIANT> VariantHierarchy;
|
||||
|
||||
void Parse( XNODE* aNode );
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue