support trapezoid padstacks in specctra export
This commit is contained in:
parent
2e82a3f9df
commit
774e6dbbd5
|
@ -393,16 +393,16 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode,
|
||||||
ddx = ( m_DeltaSize.x >> 1 );
|
ddx = ( m_DeltaSize.x >> 1 );
|
||||||
ddy = ( m_DeltaSize.y >> 1 );
|
ddy = ( m_DeltaSize.y >> 1 );
|
||||||
|
|
||||||
coord[0].x = -dx - ddy - mask_margin.x;
|
coord[0].x = -dx - ddy - mask_margin.x; // lower left
|
||||||
coord[0].y = +dy + ddx + mask_margin.y;
|
coord[0].y = +dy + ddx + mask_margin.y;
|
||||||
|
|
||||||
coord[1].x = -dx + ddy - mask_margin.x;
|
coord[1].x = -dx + ddy - mask_margin.x; // upper left
|
||||||
coord[1].y = -dy - ddx - mask_margin.y;
|
coord[1].y = -dy - ddx - mask_margin.y;
|
||||||
|
|
||||||
coord[2].x = +dx - ddy + mask_margin.x;
|
coord[2].x = +dx - ddy + mask_margin.x; // upper right
|
||||||
coord[2].y = -dy + ddx - mask_margin.y;
|
coord[2].y = -dy + ddx - mask_margin.y;
|
||||||
|
|
||||||
coord[3].x = +dx + ddy + mask_margin.x;
|
coord[3].x = +dx + ddy + mask_margin.x; // lower right
|
||||||
coord[3].y = +dy - ddx + mask_margin.y;
|
coord[3].y = +dy - ddx + mask_margin.y;
|
||||||
|
|
||||||
for( ii = 0; ii < 4; ii++ )
|
for( ii = 0; ii < 4; ii++ )
|
||||||
|
|
|
@ -268,30 +268,9 @@ static PATH* makePath( const POINT& aStart, const POINT& aEnd, const std::string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Struct wxString_less_than
|
|
||||||
* is used by std:set<> and std::map<> instantiations which use wxString as their key.
|
|
||||||
struct wxString_less_than
|
|
||||||
{
|
|
||||||
// a "less than" test on two wxStrings
|
|
||||||
bool operator()( const wxString& s1, const wxString& s2) const
|
|
||||||
{
|
|
||||||
return s1.Cmp( s2 ) < 0; // case specific wxString compare
|
|
||||||
}
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function makePADSTACK
|
|
||||||
* creates a PADSTACK which matches the given pad. Only pads which do not
|
|
||||||
* satisfy the function isKeepout() should be passed to this function.
|
|
||||||
* @param aPad The D_PAD which needs to be made into a PADSTACK.
|
|
||||||
* @return PADSTACK* - The created padstack, including its padstack_id.
|
|
||||||
*/
|
|
||||||
PADSTACK* SPECCTRA_DB::makePADSTACK( BOARD* aBoard, D_PAD* aPad )
|
PADSTACK* SPECCTRA_DB::makePADSTACK( BOARD* aBoard, D_PAD* aPad )
|
||||||
{
|
{
|
||||||
char name[80]; // padstack name builder
|
char name[256]; // padstack name builder
|
||||||
std::string uniqifier;
|
std::string uniqifier;
|
||||||
|
|
||||||
// caller must do these checks before calling here.
|
// caller must do these checks before calling here.
|
||||||
|
@ -456,10 +435,57 @@ PADSTACK* SPECCTRA_DB::makePADSTACK( BOARD* aBoard, D_PAD* aPad )
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
|
||||||
case PAD_TRAPEZOID:
|
case PAD_TRAPEZOID:
|
||||||
|
{
|
||||||
|
double dx = scale( aPad->m_Size.x ) / 2.0;
|
||||||
|
double dy = scale( aPad->m_Size.y ) / 2.0;
|
||||||
|
|
||||||
|
double ddx = scale( aPad->m_DeltaSize.x ) / 2.0;
|
||||||
|
double ddy = scale( aPad->m_DeltaSize.y ) / 2.0;
|
||||||
|
|
||||||
|
// see class_pad_draw_functions.cpp which draws the trapezoid pad
|
||||||
|
POINT lowerLeft( -dx - ddy, -dy + ddx );
|
||||||
|
POINT upperLeft( -dx + ddy, +dy - ddx );
|
||||||
|
POINT upperRight( +dx - ddy, +dy + ddx );
|
||||||
|
POINT lowerRight( +dx + ddy, -dy - ddx );
|
||||||
|
|
||||||
|
lowerLeft += dsnOffset;
|
||||||
|
upperLeft += dsnOffset;
|
||||||
|
upperRight += dsnOffset;
|
||||||
|
lowerRight += dsnOffset;
|
||||||
|
|
||||||
|
for( int ndx=0; ndx<reportedLayers; ++ndx )
|
||||||
|
{
|
||||||
|
SHAPE* shape = new SHAPE( padstack );
|
||||||
|
padstack->Append( shape );
|
||||||
|
|
||||||
|
// a T_polygon exists as a PATH
|
||||||
|
PATH* polygon = new PATH( shape, T_polygon );
|
||||||
|
shape->SetShape( polygon );
|
||||||
|
|
||||||
|
polygon->SetLayerId( layerName[ndx] );
|
||||||
|
|
||||||
|
polygon->AppendPoint( lowerLeft );
|
||||||
|
polygon->AppendPoint( upperLeft );
|
||||||
|
polygon->AppendPoint( upperRight );
|
||||||
|
polygon->AppendPoint( lowerRight );
|
||||||
|
}
|
||||||
|
|
||||||
|
D(printf( "m_DeltaSize: %d,%d\n", aPad->m_DeltaSize.x, aPad->m_DeltaSize.y );)
|
||||||
|
|
||||||
|
// this string _must_ be unique for a given physical shape
|
||||||
|
snprintf( name, sizeof(name), "Trapz%sPad_%.6gx%.6g_%c%.6gx%c%.6g_mil",
|
||||||
|
uniqifier.c_str(), scale(aPad->m_Size.x), scale(aPad->m_Size.y),
|
||||||
|
aPad->m_DeltaSize.x < 0 ? 'm' : 'p',
|
||||||
|
abs( scale( aPad->m_DeltaSize.x )),
|
||||||
|
aPad->m_DeltaSize.y < 0 ? 'm' : 'p',
|
||||||
|
abs( scale( aPad->m_DeltaSize.y ))
|
||||||
|
);
|
||||||
|
name[ sizeof(name)-1 ] = 0;
|
||||||
|
|
||||||
|
padstack->SetPadstackId( name );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return padstack;
|
return padstack;
|
||||||
|
|
Loading…
Reference in New Issue