Commit c580d5d7 authored by jean-pierre charras's avatar jean-pierre charras Committed by jp
Browse files

fixed a serious bug in zone filling, for pads with drill but not on all layers

parent af7c26e8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ void NETLIST_OBJECT::Show( std::ostream& out, int ndx )

    out << " <start " << m_Start << "/> <end " << m_End << "/>\n";

    if( m_Label )
    if( !m_Label.IsEmpty() )
        out << " <label>" << m_Label.mb_str() << "</label>\n";

    if( m_Comp )
+19 −15
Original line number Diff line number Diff line
@@ -174,8 +174,11 @@ static int MinimalReq[PIN_NMAX][PIN_NMAX] =
/** Function TestDuplicateSheetNames( )
 * inside a given sheet, one cannot have sheets with duplicate names (file
 * names can be duplicated).
 * @return the error count
 * @param aCreateMarker: true = create error markers in schematic,
 *                       false = calculate error count only
 */
int TestDuplicateSheetNames()
int TestDuplicateSheetNames(bool aCreateMarker)
{
    int            err_count = 0;
    EDA_ScreenList ScreenList;      // Created the list of screen
@@ -202,6 +205,8 @@ int TestDuplicateSheetNames()
                if( ( (SCH_SHEET*) ref_item )->m_SheetName.CmpNoCase(
                        ( ( SCH_SHEET* ) item_to_test )-> m_SheetName )
                    == 0 )
                {
                    if( aCreateMarker )
                    {
                        /* Create a new marker type ERC error*/
                        SCH_MARKER* Marker = new SCH_MARKER();
@@ -214,6 +219,7 @@ int TestDuplicateSheetNames()
                        Marker->SetErrorLevel( ERR );
                        Marker->SetNext( Screen->EEDrawList );
                        Screen->EEDrawList = Marker;
                    }
                    err_count++;
                }
            }
@@ -279,9 +285,8 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
     * inside a given sheet, one cannot have sheets with duplicate names (file
     * names can be duplicated).
     */
    int errcnt = TestDuplicateSheetNames();
    int errcnt = TestDuplicateSheetNames( true );
    g_EESchemaVar.NbErrorErc   += errcnt;
    g_EESchemaVar.NbWarningErc += errcnt;

    m_Parent->BuildNetListBase();

@@ -290,7 +295,6 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList )
    for( unsigned ii = 0; ii < g_NetObjectslist.size(); ii++ )
        g_NetObjectslist[ii]->m_FlagOfConnection = UNCONNECTED;


    StartNet   = OldItem = 0;
    NetNbItems = 0;
    MinConn    = NOC;
+9 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@
#include "protos.h"
#include "netlist_control.h"

//Imported function:
int TestDuplicateSheetNames(bool aCreateMarker);

// ID for configuration:
#define CUSTOM_NETLIST_TITLE   wxT( "CustomNetlistTitle" )
@@ -492,6 +494,13 @@ void WinEDA_NetlistFrame::GenNetlist( wxCommandEvent& event )
            return;
    }

    // Test duplicate sheet names:
    if( TestDuplicateSheetNames(false ) > 0 )
    {
        if( !IsOK( this, _( "Error: duplicate sheet names. Continue?" ) ) )
            return;
    }

    /* Cleanup the entire hierarchy */
    EDA_ScreenList ScreenList;
    for( SCH_SCREEN* screen = ScreenList.GetFirst();
+3 −2
Original line number Diff line number Diff line
@@ -216,11 +216,12 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
    have_poly_to_substract = false;

    D_PAD dummyPad((MODULE*)NULL);

    D_PAD * nextpad;
    for( MODULE* module = aPcb->m_Modules;  module;  module = module->Next() )
    {
        for( D_PAD* pad = module->m_Pads; pad != NULL; pad = pad->Next() )
        for( D_PAD* pad = module->m_Pads; pad != NULL; pad = nextpad )
        {
            nextpad = pad->Next();  // pad pointer can be modified by next code, so calculate the next pad here
            if( !pad->IsOnLayer( GetLayer() ) )
            {   /* Test fo pads that are on top or bottom only and have a hole.
                 * There are curious pads but they can be used for some components that are inside the