Fix a bug in board edges export to specctra DSN format. If the direction
of the S_SEGMENTs were not all the same, the specctra PATH points would come out wrong.
This commit is contained in:
parent
9435a855d8
commit
e5bfcbbd91
|
@ -492,7 +492,7 @@ const char* GetTokenText( int aTok );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class POINT
|
* Struct POINT
|
||||||
* is a holder for a point in the SPECCTRA DSN coordinate system. It can also
|
* is a holder for a point in the SPECCTRA DSN coordinate system. It can also
|
||||||
* be used to hold a distance (vector really) from some origin.
|
* be used to hold a distance (vector really) from some origin.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -336,7 +336,7 @@ PADSTACK* SPECCTRA_DB::makePADSTACK( BOARD* aBoard, D_PAD* aPad )
|
||||||
|
|
||||||
if( aPad->m_Offset.x || aPad->m_Offset.y )
|
if( aPad->m_Offset.x || aPad->m_Offset.y )
|
||||||
{
|
{
|
||||||
char offsetTxt[32];
|
char offsetTxt[64];
|
||||||
|
|
||||||
wxPoint offset( aPad->m_Offset.x, aPad->m_Offset.y );
|
wxPoint offset( aPad->m_Offset.x, aPad->m_Offset.y );
|
||||||
|
|
||||||
|
@ -720,7 +720,7 @@ void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary ) throw( IOErr
|
||||||
{
|
{
|
||||||
haveEdges = true;
|
haveEdges = true;
|
||||||
++i;
|
++i;
|
||||||
//D( item->Show( 0, std::cout );)
|
D( item->Show( 0, std::cout );)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -738,14 +738,34 @@ void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary ) throw( IOErr
|
||||||
items.Remove( 0 );
|
items.Remove( 0 );
|
||||||
|
|
||||||
prevPt = graphic->GetEnd();
|
prevPt = graphic->GetEnd();
|
||||||
path->AppendPoint( mapPt( graphic->GetEnd() ) );
|
path->AppendPoint( mapPt( prevPt ) );
|
||||||
|
|
||||||
// do not append the other end point yet, this first edge item might be an arc
|
// do not append the other end point yet, this first 'graphic' might be an arc
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
switch( graphic->m_Shape )
|
switch( graphic->m_Shape )
|
||||||
{
|
{
|
||||||
|
case S_SEGMENT:
|
||||||
|
{
|
||||||
|
wxPoint nextPt;
|
||||||
|
|
||||||
|
if( prevPt != graphic->GetStart() )
|
||||||
|
{
|
||||||
|
wxASSERT( prevPt == graphic->GetEnd() );
|
||||||
|
nextPt = graphic->GetStart();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxASSERT( prevPt == graphic->GetStart() );
|
||||||
|
nextPt = graphic->GetEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
path->AppendPoint( mapPt(nextPt) );
|
||||||
|
prevPt = nextPt;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case S_ARC:
|
case S_ARC:
|
||||||
// freerouter does not yet understand arcs, so approximate
|
// freerouter does not yet understand arcs, so approximate
|
||||||
// an arc with a series of short lines and put those
|
// an arc with a series of short lines and put those
|
||||||
|
@ -794,7 +814,7 @@ void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary ) throw( IOErr
|
||||||
// Do not output a circle, freerouter does not understand it.
|
// Do not output a circle, freerouter does not understand it.
|
||||||
// tell user his board has a problem, this is better than silently
|
// tell user his board has a problem, this is better than silently
|
||||||
// ignoring the error. "edges pcb" layer should not be used
|
// ignoring the error. "edges pcb" layer should not be used
|
||||||
// to hold islanded circles which could or should better be done
|
// to hold islanded circles which could or should be better done
|
||||||
// as simple holes. (Some of our demo boards have this problem.)
|
// as simple holes. (Some of our demo boards have this problem.)
|
||||||
// fall thru here to report the error.
|
// fall thru here to report the error.
|
||||||
#endif
|
#endif
|
||||||
|
@ -809,25 +829,6 @@ void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary ) throw( IOErr
|
||||||
ThrowIOError( error );
|
ThrowIOError( error );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case S_SEGMENT:
|
|
||||||
{
|
|
||||||
POINT nextPt;
|
|
||||||
|
|
||||||
if( prevPt != graphic->GetStart() )
|
|
||||||
{
|
|
||||||
wxASSERT( prevPt == graphic->GetEnd() );
|
|
||||||
nextPt = mapPt( graphic->GetStart() );
|
|
||||||
prevPt = graphic->GetStart();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nextPt = mapPt( graphic->GetStart() );
|
|
||||||
prevPt = graphic->GetEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
path->AppendPoint( nextPt );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( items.GetCount() == 0 )
|
if( items.GetCount() == 0 )
|
||||||
|
@ -845,6 +846,13 @@ void SPECCTRA_DB::fillBOUNDARY( BOARD* aBoard, BOUNDARY* boundary ) throw( IOErr
|
||||||
ThrowIOError( error );
|
ThrowIOError( error );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0 && defined(DEBUG)
|
||||||
|
STRINGFORMATTER sf;
|
||||||
|
path->Format( &sf, 0 );
|
||||||
|
printf( "%s\n", sf.GetString().c_str() );
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue