diff --git a/eeschema/class_netlist_object.cpp b/eeschema/class_netlist_object.cpp index ce3c2bbded..28cda6b3e3 100644 --- a/eeschema/class_netlist_object.cpp +++ b/eeschema/class_netlist_object.cpp @@ -81,7 +81,7 @@ void NETLIST_OBJECT::Show( std::ostream& out, int ndx ) out << " \n"; - if( m_Label ) + if( !m_Label.IsEmpty() ) out << " \n"; if( m_Comp ) diff --git a/eeschema/erc.cpp b/eeschema/erc.cpp index cffbd49cb0..9efb32e6d2 100644 --- a/eeschema/erc.cpp +++ b/eeschema/erc.cpp @@ -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 @@ -203,17 +206,20 @@ int TestDuplicateSheetNames() ( ( SCH_SHEET* ) item_to_test )-> m_SheetName ) == 0 ) { - /* Create a new marker type ERC error*/ - SCH_MARKER* Marker = new SCH_MARKER(); - Marker->m_TimeStamp = GetTimeStamp(); - Marker->SetData( ERCE_DUPLICATE_SHEET_NAME, - ( (SCH_SHEET*) item_to_test )->m_Pos, - _( "Duplicate Sheet name" ), - ( (SCH_SHEET*) item_to_test )->m_Pos ); - Marker->SetMarkerType( MARK_ERC ); - Marker->SetErrorLevel( ERR ); - Marker->SetNext( Screen->EEDrawList ); - Screen->EEDrawList = Marker; + if( aCreateMarker ) + { + /* Create a new marker type ERC error*/ + SCH_MARKER* Marker = new SCH_MARKER(); + Marker->m_TimeStamp = GetTimeStamp(); + Marker->SetData( ERCE_DUPLICATE_SHEET_NAME, + ( (SCH_SHEET*) item_to_test )->m_Pos, + _( "Duplicate Sheet name" ), + ( (SCH_SHEET*) item_to_test )->m_Pos ); + Marker->SetMarkerType( MARK_ERC ); + 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; diff --git a/eeschema/netlist_control.cpp b/eeschema/netlist_control.cpp index 7c47e53bb9..67eb8e1f35 100644 --- a/eeschema/netlist_control.cpp +++ b/eeschema/netlist_control.cpp @@ -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(); diff --git a/pcbnew/zones_convert_brd_items_to_polygons.cpp b/pcbnew/zones_convert_brd_items_to_polygons.cpp index e966854346..3c71300d21 100644 --- a/pcbnew/zones_convert_brd_items_to_polygons.cpp +++ b/pcbnew/zones_convert_brd_items_to_polygons.cpp @@ -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