Fixes: https://bugs.launchpad.net/kicad/+bug/1747443
-Jon
From 781adc8252bace405d30ba9e8878265fac73be4e Mon Sep 17 00:00:00 2001 From: Jon Evans <j...@craftyjon.com> Date: Thu, 22 Feb 2018 19:31:51 -0500 Subject: [PATCH] Clear out old layer data when loading on top of an existing image Fixes: lp:1747443 * https://bugs.launchpad.net/kicad/+bug/1747443 --- gerbview/excellon_read_drill_file.cpp | 24 +++++++++++++++--------- gerbview/readgerb.cpp | 4 ++++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/gerbview/excellon_read_drill_file.cpp b/gerbview/excellon_read_drill_file.cpp index 8895ff394..f444de64c 100644 --- a/gerbview/excellon_read_drill_file.cpp +++ b/gerbview/excellon_read_drill_file.cpp @@ -163,12 +163,19 @@ bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName ) wxString msg; int layerId = GetActiveLayer(); // current layer used in GerbView GERBER_FILE_IMAGE_LIST* images = GetGerberLayout()->GetImagesList(); - EXCELLON_IMAGE* drill_Layer = (EXCELLON_IMAGE*) images->GetGbrImage( layerId ); + auto gerber_layer = images->GetGbrImage( layerId ); + auto drill_layer = dynamic_cast<EXCELLON_IMAGE*>( gerber_layer ); - if( drill_Layer == NULL ) + if( gerber_layer && !drill_layer ) { - drill_Layer = new EXCELLON_IMAGE( layerId ); - layerId = images->AddGbrImage( drill_Layer, layerId ); + // The active layer contains old gerber data we have to clear + Erase_Current_DrawLayer( false ); + } + + if( drill_layer == nullptr ) + { + drill_layer = new EXCELLON_IMAGE( layerId ); + layerId = images->AddGbrImage( drill_layer, layerId ); } if( layerId < 0 ) @@ -178,7 +185,7 @@ bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName ) } // Read the Excellon drill file: - bool success = drill_Layer->LoadFile( aFullFileName ); + bool success = drill_layer->LoadFile( aFullFileName ); if( !success ) { @@ -188,14 +195,13 @@ bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName ) } // Display errors list - if( drill_Layer->GetMessages().size() > 0 ) + if( drill_layer->GetMessages().size() > 0 ) { HTML_MESSAGE_BOX dlg( this, _( "Error reading EXCELLON drill file" ) ); - dlg.ListSet( drill_Layer->GetMessages() ); + dlg.ListSet( drill_layer->GetMessages() ); dlg.ShowModal(); } - // TODO(JE) Is this the best place to add items to the view? if( success ) { EDA_DRAW_PANEL_GAL* canvas = GetGalCanvas(); @@ -204,7 +210,7 @@ bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName ) { KIGFX::VIEW* view = canvas->GetView(); - for( GERBER_DRAW_ITEM* item = drill_Layer->GetItemsList(); item; item = item->Next() ) + for( GERBER_DRAW_ITEM* item = drill_layer->GetItemsList(); item; item = item->Next() ) { view->Add( (KIGFX::VIEW_ITEM*) item ); } diff --git a/gerbview/readgerb.cpp b/gerbview/readgerb.cpp index 293c4a40e..f3209bf5c 100644 --- a/gerbview/readgerb.cpp +++ b/gerbview/readgerb.cpp @@ -50,6 +50,10 @@ bool GERBVIEW_FRAME::Read_GERBER_File( const wxString& GERBER_FullFileName ) gerber = new GERBER_FILE_IMAGE( layer ); images->AddGbrImage( gerber, layer ); } + else + { + Erase_Current_DrawLayer( false ); + } /* Read the gerber file */ bool success = gerber->LoadGerberFile( GERBER_FullFileName ); -- 2.14.1
_______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp