diff --git a/gerbview/files.cpp b/gerbview/files.cpp index d19c18f25c..2ed1945db4 100644 --- a/gerbview/files.cpp +++ b/gerbview/files.cpp @@ -231,6 +231,7 @@ bool GERBVIEW_FRAME::loadListOfGerberFiles( const wxString& aPath, // Read gerber files: each file is loaded on a new GerbView layer bool success = true; int layer = GetActiveLayer(); + int visibility = GetVisibleLayers(); // Manage errors when loading files wxString msg; @@ -265,6 +266,8 @@ bool GERBVIEW_FRAME::loadListOfGerberFiles( const wxString& aPath, SetActiveLayer( layer, false ); + visibility |= ( 1 << layer ); + if( Read_GERBER_File( filename.GetFullPath() ) ) { UpdateFileHistory( m_lastFileName ); @@ -305,6 +308,8 @@ bool GERBVIEW_FRAME::loadListOfGerberFiles( const wxString& aPath, mbox.ShowModal(); } + SetVisibleLayers( visibility ); + Zoom_Automatique( false ); // Synchronize layers tools with actual active layer: diff --git a/gerbview/gerbview_frame.cpp b/gerbview/gerbview_frame.cpp index f73e2afd2f..26babda318 100644 --- a/gerbview/gerbview_frame.cpp +++ b/gerbview/gerbview_frame.cpp @@ -668,6 +668,27 @@ void GERBVIEW_FRAME::Liste_D_Codes() } +void GERBVIEW_FRAME::SortLayersByX2Attributes() +{ + auto remapping = GetImagesList()->SortImagesByZOrder(); + + ReFillLayerWidget(); + syncLayerBox( true ); + + std::unordered_map view_remapping; + + for( auto it : remapping ) + { + view_remapping[ GERBER_DRAW_LAYER( it.first) ] = GERBER_DRAW_LAYER( it.second ); + view_remapping[ GERBER_DCODE_LAYER( GERBER_DRAW_LAYER( it.first) ) ] = + GERBER_DCODE_LAYER( GERBER_DRAW_LAYER( it.second ) ); + } + + GetGalCanvas()->GetView()->ReorderLayerData( view_remapping ); + GetCanvas()->Refresh(); +} + + void GERBVIEW_FRAME::UpdateTitleAndInfo() { GERBER_FILE_IMAGE* gerber = GetGbrImage( GetActiveLayer() ); diff --git a/gerbview/gerbview_frame.h b/gerbview/gerbview_frame.h index ca7e35d120..244f764642 100644 --- a/gerbview/gerbview_frame.h +++ b/gerbview/gerbview_frame.h @@ -701,6 +701,8 @@ public: bool Clear_DrawLayers( bool query ); void Erase_Current_DrawLayer( bool query ); + void SortLayersByX2Attributes(); + // Conversion function void ExportDataInPcbnewFormat( wxCommandEvent& event ); diff --git a/gerbview/gerbview_layer_widget.cpp b/gerbview/gerbview_layer_widget.cpp index 4b7407a86a..20e2cd2d16 100644 --- a/gerbview/gerbview_layer_widget.cpp +++ b/gerbview/gerbview_layer_widget.cpp @@ -209,20 +209,7 @@ void GERBER_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event ) break; case ID_SORT_GBR_LAYERS: - auto remapping = GetImagesList()->SortImagesByZOrder(); - myframe->ReFillLayerWidget(); - myframe->syncLayerBox( true ); - - std::unordered_map view_remapping; - - for( auto it : remapping ) - { - view_remapping[ GERBER_DRAW_LAYER( it.first) ] = GERBER_DRAW_LAYER( it.second ); - } - - myframe->GetGalCanvas()->GetView()->ReorderLayerData( view_remapping ); - - myframe->GetCanvas()->Refresh(); + myframe->SortLayersByX2Attributes(); break; } } diff --git a/gerbview/job_file_reader.cpp b/gerbview/job_file_reader.cpp index f6a4b470fa..93a1eb2269 100644 --- a/gerbview/job_file_reader.cpp +++ b/gerbview/job_file_reader.cpp @@ -197,19 +197,7 @@ bool GERBVIEW_FRAME::LoadGerberJobFile( const wxString& aFullFileName ) Zoom_Automatique( false ); - auto remapping = GetImagesList()->SortImagesByZOrder(); - - ReFillLayerWidget(); - syncLayerBox( true ); - - std::unordered_map view_remapping; - - for( auto it : remapping ) - { - view_remapping[ GERBER_DRAW_LAYER( it.first) ] = GERBER_DRAW_LAYER( it.second ); - } - - GetGalCanvas()->GetView()->ReorderLayerData( view_remapping ); + SortLayersByX2Attributes(); if( !msg.IsEmpty() ) {