Commit 774e6dbb authored by Dick Hollenbeck's avatar Dick Hollenbeck
Browse files

support trapezoid padstacks in specctra export

parent 2e82a3f9
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -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++ )
+50 −24
Original line number Original line Diff line number Diff line
@@ -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;