Clear out old layer data when loading on top of an existing image
Fixes: lp:1747443 * https://bugs.launchpad.net/kicad/+bug/1747443
This commit is contained in:
parent
1597f31d4b
commit
1ed7d5f816
|
@ -163,12 +163,19 @@ bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName )
|
||||||
wxString msg;
|
wxString msg;
|
||||||
int layerId = GetActiveLayer(); // current layer used in GerbView
|
int layerId = GetActiveLayer(); // current layer used in GerbView
|
||||||
GERBER_FILE_IMAGE_LIST* images = GetGerberLayout()->GetImagesList();
|
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 );
|
// The active layer contains old gerber data we have to clear
|
||||||
layerId = images->AddGbrImage( drill_Layer, layerId );
|
Erase_Current_DrawLayer( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( drill_layer == nullptr )
|
||||||
|
{
|
||||||
|
drill_layer = new EXCELLON_IMAGE( layerId );
|
||||||
|
layerId = images->AddGbrImage( drill_layer, layerId );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( layerId < 0 )
|
if( layerId < 0 )
|
||||||
|
@ -178,7 +185,7 @@ bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the Excellon drill file:
|
// Read the Excellon drill file:
|
||||||
bool success = drill_Layer->LoadFile( aFullFileName );
|
bool success = drill_layer->LoadFile( aFullFileName );
|
||||||
|
|
||||||
if( !success )
|
if( !success )
|
||||||
{
|
{
|
||||||
|
@ -188,14 +195,13 @@ bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName )
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display errors list
|
// 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" ) );
|
HTML_MESSAGE_BOX dlg( this, _( "Error reading EXCELLON drill file" ) );
|
||||||
dlg.ListSet( drill_Layer->GetMessages() );
|
dlg.ListSet( drill_layer->GetMessages() );
|
||||||
dlg.ShowModal();
|
dlg.ShowModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(JE) Is this the best place to add items to the view?
|
|
||||||
if( success )
|
if( success )
|
||||||
{
|
{
|
||||||
EDA_DRAW_PANEL_GAL* canvas = GetGalCanvas();
|
EDA_DRAW_PANEL_GAL* canvas = GetGalCanvas();
|
||||||
|
@ -204,7 +210,7 @@ bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName )
|
||||||
{
|
{
|
||||||
KIGFX::VIEW* view = canvas->GetView();
|
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 );
|
view->Add( (KIGFX::VIEW_ITEM*) item );
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,10 @@ bool GERBVIEW_FRAME::Read_GERBER_File( const wxString& GERBER_FullFileName )
|
||||||
gerber = new GERBER_FILE_IMAGE( layer );
|
gerber = new GERBER_FILE_IMAGE( layer );
|
||||||
images->AddGbrImage( gerber, layer );
|
images->AddGbrImage( gerber, layer );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Erase_Current_DrawLayer( false );
|
||||||
|
}
|
||||||
|
|
||||||
/* Read the gerber file */
|
/* Read the gerber file */
|
||||||
bool success = gerber->LoadGerberFile( GERBER_FullFileName );
|
bool success = gerber->LoadGerberFile( GERBER_FullFileName );
|
||||||
|
|
Loading…
Reference in New Issue