Topo-R specctra import fix
This commit is contained in:
parent
d188bf5ae1
commit
8f853800e3
|
@ -4,6 +4,14 @@ KiCad ChangeLog 2009
|
|||
Please add newer entries at the top, list the date and your name with
|
||||
email address.
|
||||
|
||||
2009-Jul-13 UPDATE Dick Hollenbeck <dick@softplc.com>
|
||||
================================================================================
|
||||
++pcbnew
|
||||
added support to specctra import for the <structure_out> descriptor.
|
||||
<route_descriptor> had confused <structure_descriptor> with the <structure_out_descriptor>
|
||||
The fix facillitates round tripping from the TOPO-R router.
|
||||
|
||||
|
||||
2009-july-10 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
||||
================================================================================
|
||||
++Eeschema:
|
||||
|
|
|
@ -834,6 +834,49 @@ L_place:
|
|||
}
|
||||
|
||||
|
||||
void SPECCTRA_DB::doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IOError )
|
||||
{
|
||||
/*
|
||||
<structure_out_descriptor >::=
|
||||
(structure_out
|
||||
{<layer_descriptor> }
|
||||
[<rule_descriptor> ]
|
||||
)
|
||||
*/
|
||||
|
||||
DSN_T tok = nextTok();
|
||||
|
||||
while( tok != T_RIGHT )
|
||||
{
|
||||
if( tok != T_LEFT )
|
||||
expecting( T_LEFT );
|
||||
|
||||
tok = nextTok();
|
||||
switch( tok )
|
||||
{
|
||||
case T_layer:
|
||||
LAYER* layer;
|
||||
layer = new LAYER( growth );
|
||||
growth->layers.push_back( layer );
|
||||
doLAYER( layer );
|
||||
break;
|
||||
|
||||
case T_rule:
|
||||
if( growth->rules )
|
||||
unexpected( tok );
|
||||
growth->rules = new RULE( growth, T_rule );
|
||||
doRULE( growth->rules );
|
||||
break;
|
||||
|
||||
default:
|
||||
unexpected( lexer->CurText() );
|
||||
}
|
||||
|
||||
tok = nextTok();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SPECCTRA_DB::doKEEPOUT( KEEPOUT* growth ) throw( IOError )
|
||||
{
|
||||
DSN_T tok = nextTok();
|
||||
|
@ -3303,11 +3346,11 @@ void SPECCTRA_DB::doROUTE( ROUTE* growth ) throw( IOError )
|
|||
doPARSER( growth->parser );
|
||||
break;
|
||||
|
||||
case T_structure:
|
||||
if( growth->structure )
|
||||
case T_structure_out:
|
||||
if( growth->structure_out )
|
||||
unexpected( tok );
|
||||
growth->structure = new STRUCTURE( growth );
|
||||
doSTRUCTURE( growth->structure );
|
||||
growth->structure_out = new STRUCTURE_OUT( growth );
|
||||
doSTRUCTURE_OUT( growth->structure_out );
|
||||
break;
|
||||
|
||||
case T_library_out:
|
||||
|
|
|
@ -1320,6 +1320,8 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
typedef boost::ptr_vector<LAYER> LAYERS;
|
||||
|
||||
|
||||
class LAYER_PAIR : public ELEM
|
||||
{
|
||||
|
@ -1552,13 +1554,42 @@ public:
|
|||
};
|
||||
|
||||
|
||||
class STRUCTURE_OUT : public ELEM
|
||||
{
|
||||
friend class SPECCTRA_DB;
|
||||
|
||||
LAYERS layers;
|
||||
RULE* rules;
|
||||
|
||||
public:
|
||||
STRUCTURE_OUT( ELEM* aParent ) :
|
||||
ELEM( T_structure_out, aParent )
|
||||
{
|
||||
rules = 0;
|
||||
}
|
||||
|
||||
~STRUCTURE_OUT()
|
||||
{
|
||||
delete rules;
|
||||
}
|
||||
|
||||
void FormatContents( OUTPUTFORMATTER* out, int nestLevel ) throw( IOError )
|
||||
{
|
||||
for( LAYERS::iterator i=layers.begin(); i!=layers.end(); ++i )
|
||||
i->Format( out, nestLevel );
|
||||
|
||||
if( rules )
|
||||
rules->Format( out, nestLevel );
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class STRUCTURE : public ELEM_HOLDER
|
||||
{
|
||||
friend class SPECCTRA_DB;
|
||||
|
||||
UNIT_RES* unit;
|
||||
|
||||
typedef boost::ptr_vector<LAYER> LAYERS;
|
||||
LAYERS layers;
|
||||
|
||||
LAYER_NOISE_WEIGHT* layer_noise_weight;
|
||||
|
@ -3435,7 +3466,7 @@ class ROUTE : public ELEM
|
|||
|
||||
UNIT_RES* resolution;
|
||||
PARSER* parser;
|
||||
STRUCTURE* structure;
|
||||
STRUCTURE_OUT* structure_out;
|
||||
LIBRARY* library;
|
||||
NET_OUTS net_outs;
|
||||
// TEST_POINTS* test_points;
|
||||
|
@ -3447,14 +3478,14 @@ public:
|
|||
{
|
||||
resolution = 0;
|
||||
parser = 0;
|
||||
structure = 0;
|
||||
structure_out = 0;
|
||||
library = 0;
|
||||
}
|
||||
~ROUTE()
|
||||
{
|
||||
delete resolution;
|
||||
delete parser;
|
||||
delete structure;
|
||||
delete structure_out;
|
||||
delete library;
|
||||
// delete test_points;
|
||||
}
|
||||
|
@ -3475,8 +3506,8 @@ public:
|
|||
if( parser )
|
||||
parser->Format( out, nestLevel );
|
||||
|
||||
if( structure )
|
||||
structure->Format( out, nestLevel );
|
||||
if( structure_out )
|
||||
structure_out->Format( out, nestLevel );
|
||||
|
||||
if( library )
|
||||
library->Format( out, nestLevel );
|
||||
|
@ -3781,6 +3812,7 @@ class SPECCTRA_DB : public OUTPUTFORMATTER
|
|||
void doRESOLUTION( UNIT_RES* growth ) throw(IOError);
|
||||
void doUNIT( UNIT_RES* growth ) throw( IOError );
|
||||
void doSTRUCTURE( STRUCTURE* growth ) throw( IOError );
|
||||
void doSTRUCTURE_OUT( STRUCTURE_OUT* growth ) throw( IOError );
|
||||
void doLAYER_NOISE_WEIGHT( LAYER_NOISE_WEIGHT* growth ) throw( IOError );
|
||||
void doLAYER_PAIR( LAYER_PAIR* growth ) throw( IOError );
|
||||
void doBOUNDARY( BOUNDARY* growth ) throw( IOError );
|
||||
|
|
Loading…
Reference in New Issue