Commit 43f75cda authored by charras's avatar charras
Browse files

code cleaning

parent b3b9c121
Loading
Loading
Loading
Loading
+16 −1
Original line number Original line Diff line number Diff line
@@ -194,6 +194,21 @@ public:
     */
     */
    void AddClearanceAreasPolygonsToPolysList( BOARD* aPcb );
    void AddClearanceAreasPolygonsToPolysList( BOARD* aPcb );


    /** Function CopyPolygonsFromBoolengineToFilledPolysList
     * Copy (Add) polygons created by kbool (after Do_Operation) to m_FilledPolysList
     * @param aBoolengine = the kbool engine used in Do_Operation
     * @return the corner count
    */
    int CopyPolygonsFromBoolengineToFilledPolysList( Bool_Engine* aBoolengine );

    /** Function CopyPolygonsFromFilledPolysListToBoolengine
     * Copy (Add) polygons created by kbool (after Do_Operation) to m_FilledPolysList
     * @param aBoolengine = kbool engine
     * @param aGroup = group in kbool engine (GROUP_A or GROUP_B only)
     * @return the corner count
    */
    int CopyPolygonsFromFilledPolysListToBoolengine( Bool_Engine* aBoolengine, GroupType aGroup = GROUP_A);

        /**
        /**
     * Function HitTestForCorner
     * Function HitTestForCorner
     * tests if the given wxPoint near a corner, or near the segment define by 2 corners.
     * tests if the given wxPoint near a corner, or near the segment define by 2 corners.
+66 −63
Original line number Original line Diff line number Diff line
@@ -65,7 +65,7 @@ double s_Correction; /* mult coeff used to enlarge rounded and oval pads (an
 *       this means the created polygons have no holes (hole are linked to outer outline by double overlapped segments
 *       this means the created polygons have no holes (hole are linked to outer outline by double overlapped segments
 *       and are therefore compatible with draw functions (DC draw polygons and Gerber or PS outputs)
 *       and are therefore compatible with draw functions (DC draw polygons and Gerber or PS outputs)
 * 2 - Add the main outline (zone outline) in group A
 * 2 - Add the main outline (zone outline) in group A
 * 3 - Creates a correction using BOOL_CORRECTION operation to inflate the resulting area
 * 3 - Creates a correction using BOOL_CORRECTION operation to shrink the resulting area
 *     with m_ZoneMinThickness/2 value.
 *     with m_ZoneMinThickness/2 value.
 *     The result is areas with a margin of m_ZoneMinThickness/2
 *     The result is areas with a margin of m_ZoneMinThickness/2
 *     When drawing outline with segments having a thickness of m_ZoneMinThickness, the outlines wilm
 *     When drawing outline with segments having a thickness of m_ZoneMinThickness, the outlines wilm
@@ -109,41 +109,13 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
     * m_ZoneMinThickness
     * m_ZoneMinThickness
     * so m_ZoneMinThickness is the min thickness of the filled zones areas
     * so m_ZoneMinThickness is the min thickness of the filled zones areas
     */
     */
    unsigned corners_count = m_FilledPolysList.size();
    CopyPolygonsFromFilledPolysListToBoolengine( booleng, GROUP_A );
    unsigned ic = 0;
    if( booleng->StartPolygonAdd( GROUP_A ) )
    {
        for( ; ic < corners_count; ic++ )
        {
            CPolyPt* corner = &m_FilledPolysList[ic];
            booleng->AddPoint( corner->x, corner->y );
            if( corner->end_contour )
                break;
        }

        booleng->EndPolygonAdd();
    }
    booleng->SetCorrectionFactor( (double) -m_ZoneMinThickness/2 );
    booleng->SetCorrectionFactor( (double) -m_ZoneMinThickness/2 );
    booleng->Do_Operation( BOOL_CORRECTION );
    booleng->Do_Operation( BOOL_CORRECTION );


    /* No copy the new outline in m_FilledPolysList */
    /* No copy the new outline in m_FilledPolysList */
    m_FilledPolysList.clear();
    m_FilledPolysList.clear();
    while( booleng->StartPolygonGet() )
    CopyPolygonsFromBoolengineToFilledPolysList( booleng );
    {
        CPolyPt corner( 0, 0, false );
        while( booleng->PolygonHasMorePoints() )
        {
            corner.x = (int) booleng->GetPolygonXPoint();
            corner.y = (int) booleng->GetPolygonYPoint();
            corner.end_contour = false;
            m_FilledPolysList.push_back( corner );
        }

        corner.end_contour = true;
        m_FilledPolysList.pop_back();
        m_FilledPolysList.push_back( corner );
        booleng->EndPolygonGet();
    }
    delete booleng;
    delete booleng;


    /* Second, Add the main (corrected) polygon (i.e. the filled area using only one outline)
    /* Second, Add the main (corrected) polygon (i.e. the filled area using only one outline)
@@ -156,21 +128,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
    /* Add the main corrected polygon (i.e. the filled area using only one outline)
    /* Add the main corrected polygon (i.e. the filled area using only one outline)
     * in GroupA in Bool_Engine
     * in GroupA in Bool_Engine
     */
     */
    corners_count = m_FilledPolysList.size();
    CopyPolygonsFromFilledPolysListToBoolengine( booleng, GROUP_A );
    ic = 0;
    if( booleng->StartPolygonAdd( GROUP_A ) )
    {
        for( ; ic < corners_count; ic++ )
        {
            CPolyPt* corner = &m_FilledPolysList[ic];
            booleng->AddPoint( corner->x, corner->y );
            if( corner->end_contour )
                break;
        }

        booleng->EndPolygonAdd();
    }



    // Calculates the clearance value that meet DRC requirements
    // Calculates the clearance value that meet DRC requirements
    int      clearance = max( m_ZoneClearance, g_DesignSettings.m_TrackClearence );
    int      clearance = max( m_ZoneClearance, g_DesignSettings.m_TrackClearence );
@@ -274,23 +232,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )


    /* put these areas in m_FilledPolysList */
    /* put these areas in m_FilledPolysList */
    m_FilledPolysList.clear();
    m_FilledPolysList.clear();
    while( booleng->StartPolygonGet() )
    CopyPolygonsFromBoolengineToFilledPolysList( booleng );
    {
        CPolyPt corner( 0, 0, false );
        while( booleng->PolygonHasMorePoints() )
        {
            corner.x = (int) booleng->GetPolygonXPoint();
            corner.y = (int) booleng->GetPolygonYPoint();
            corner.end_contour = false;
            m_FilledPolysList.push_back( corner );
        }

        corner.end_contour = true;
        m_FilledPolysList.pop_back();
        m_FilledPolysList.push_back( corner );
        booleng->EndPolygonGet();
    }

    delete booleng;
    delete booleng;


    // Remove insulated islands:
    // Remove insulated islands:
@@ -946,3 +888,64 @@ void AddTextBoxWithClearancePolygon( Bool_Engine* aBooleng,
        aBooleng->EndPolygonAdd();
        aBooleng->EndPolygonAdd();
    }
    }
}
}


/***********************************************************************************************************/
int ZONE_CONTAINER::CopyPolygonsFromFilledPolysListToBoolengine( Bool_Engine* aBoolengine, GroupType aGroup )
/************************************************************************************************************/
/** Function CopyPolygonsFromFilledPolysListToBoolengine
 * Copy (Add) polygons created by kbool (after Do_Operation) to m_FilledPolysList
 * @param aBoolengine = kbool engine
 * @param aGroup = group in kbool engine (GROUP_A or GROUP_B only)
 * @return the corner count
*/
{
    unsigned corners_count = m_FilledPolysList.size();
    int count = 0;
    unsigned ic = 0;
    if( aBoolengine->StartPolygonAdd( aGroup ) )
    {
        for( ; ic < corners_count; ic++ )
        {
            CPolyPt* corner = &m_FilledPolysList[ic];
            aBoolengine->AddPoint( corner->x, corner->y );
            count++;
            if( corner->end_contour )
                break;
        }

        aBoolengine->EndPolygonAdd();
    }

    return count;
}
/*****************************************************************************************/
int ZONE_CONTAINER::CopyPolygonsFromBoolengineToFilledPolysList( Bool_Engine* aBoolengine )
/*****************************************************************************************/
/** Function CopyPolygonsFromBoolengineToFilledPolysList
 * Copy (Add) polygons created by kbool (after Do_Operation) to m_FilledPolysList
 * @param aBoolengine = kbool engine
 * @return the corner count
*/
{
    int count = 0;
    while( aBoolengine->StartPolygonGet() )
    {
        CPolyPt corner( 0, 0, false );
        while( aBoolengine->PolygonHasMorePoints() )
        {
            corner.x = (int) aBoolengine->GetPolygonXPoint();
            corner.y = (int) aBoolengine->GetPolygonYPoint();
            corner.end_contour = false;
            m_FilledPolysList.push_back( corner );
            count++;
        }

        corner.end_contour = true;
        m_FilledPolysList.pop_back();
        m_FilledPolysList.push_back( corner );
        aBoolengine->EndPolygonGet();
    }

    return count;
}
+4 −1
Original line number Original line Diff line number Diff line
@@ -545,7 +545,10 @@ void ArmBoolEng( Bool_Engine* aBooleng, bool aConvertHoles )
                            // should always be > DGRID  a  MARGE >= 10*DGRID is ok
                            // should always be > DGRID  a  MARGE >= 10*DGRID is ok
                            // this is also used to remove small segments and to decide when
                            // this is also used to remove small segments and to decide when
                            // two segments are in line. ( initial value = 0.001 )
                            // two segments are in line. ( initial value = 0.001 )
    double CORRECTIONFACTOR = 500.0;    // correct the polygons by this number
    double CORRECTIONFACTOR = 0.0;      // correct the polygons by this number: used in BOOL_CORRECTION operation
                                        // this operation shrinks a polygon if CORRECTIONFACTOR < 0
                                        // or stretch it if CORRECTIONFACTOR > 0
                                        // the size change is CORRECTIONFACTOR (holes are correctly handled)
    double CORRECTIONABER   = 1.0;      // the accuracy for the rounded shapes used in correction
    double CORRECTIONABER   = 1.0;      // the accuracy for the rounded shapes used in correction
    double ROUNDFACTOR  = 1.5;          // when will we round the correction shape to a circle
    double ROUNDFACTOR  = 1.5;          // when will we round the correction shape to a circle
    double SMOOTHABER   = 10.0;         // accuracy when smoothing a polygon
    double SMOOTHABER   = 10.0;         // accuracy when smoothing a polygon