mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 10:13:19 +02:00
Implemented per layer properties in dialog_copper_zones
This commit is contained in:
parent
a4c8da229e
commit
1082ba3c8a
@ -23,6 +23,7 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "layer_ids.h"
|
||||
#include <wx/radiobut.h>
|
||||
#include <kiface_base.h>
|
||||
#include <confirm.h>
|
||||
@ -36,6 +37,7 @@
|
||||
#include <trigo.h>
|
||||
#include <eda_pattern_match.h>
|
||||
|
||||
#include <pcb_layer_box_selector.h>
|
||||
#include <dialog_copper_zones_base.h>
|
||||
#include <string_utils.h>
|
||||
|
||||
@ -76,6 +78,8 @@ private:
|
||||
void OnNetSelectionUpdated( wxCommandEvent& event ) override;
|
||||
void OnRemoveIslandsSelection( wxCommandEvent& event ) override;
|
||||
void OnPadInZoneSelection( wxCommandEvent& event ) override;
|
||||
void OnLayerSelectorChanged( wxCommandEvent& event ) override;
|
||||
void OnHatchingOffsetChecked( wxCommandEvent& event ) override;
|
||||
|
||||
void readNetInformation();
|
||||
void readFilteringAndSortingCriteria();
|
||||
@ -91,6 +95,7 @@ private:
|
||||
void updateInfoBar();
|
||||
void storePersistentNetSortConfigurations();
|
||||
void loadPersistentNetSortConfigurations();
|
||||
void updatePerLayerProperties();
|
||||
|
||||
private:
|
||||
PCB_BASE_FRAME* m_Parent;
|
||||
@ -130,6 +135,11 @@ private:
|
||||
wxRadioButton* m_rbCenterline;
|
||||
wxRadioButton* m_rbEnvelope;
|
||||
wxCheckBox* m_cbDeleteOriginals;
|
||||
|
||||
UNIT_BINDER m_hatchingOffsetX;
|
||||
UNIT_BINDER m_hatchingOffsetY;
|
||||
|
||||
PCB_LAYER_ID m_currentLayer;
|
||||
};
|
||||
|
||||
|
||||
@ -191,7 +201,10 @@ DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE( PCB_BASE_FRAME* aParent, ZONE_SETTINGS*
|
||||
m_convertSettings( aConvertSettings ),
|
||||
m_rbCenterline( nullptr ),
|
||||
m_rbEnvelope( nullptr ),
|
||||
m_cbDeleteOriginals( nullptr )
|
||||
m_cbDeleteOriginals( nullptr ),
|
||||
m_hatchingOffsetX( aParent, m_hatchingOffsetXLabel, m_hatchingOffsetXValue, m_hatchingOffsetXUnit ),
|
||||
m_hatchingOffsetY( aParent, m_hatchingOffsetYLabel, m_hatchingOffsetYValue, m_hatchingOffsetYUnit ),
|
||||
m_currentLayer( UNDEFINED_LAYER )
|
||||
{
|
||||
m_Parent = aParent;
|
||||
|
||||
@ -264,6 +277,8 @@ DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE( PCB_BASE_FRAME* aParent, ZONE_SETTINGS*
|
||||
m_gap = nullptr;
|
||||
}
|
||||
|
||||
m_currentLayer = m_settings.m_Layers.Seq().at( 0 );
|
||||
|
||||
m_currentlySelectedNetcode = INVALID_NET_CODE;
|
||||
m_maxNetCode = INVALID_NET_CODE;
|
||||
|
||||
@ -377,6 +392,32 @@ bool DIALOG_COPPER_ZONE::TransferDataToWindow()
|
||||
|
||||
m_tcZoneName->SetValue( m_settings.m_Name );
|
||||
|
||||
m_layerSelector->SetLayersHotkeys( false );
|
||||
m_layerSelector->SetBoardFrame( m_Parent );
|
||||
m_layerSelector->SetNotAllowedLayerSet( ~( m_settings.m_Layers ) );
|
||||
m_layerSelector->Resync();
|
||||
|
||||
if( !m_settings.m_LayerProperties.empty() )
|
||||
{
|
||||
m_currentLayer = m_settings.m_LayerProperties.begin()->first;
|
||||
|
||||
m_hatchingOffsetUseDefault->SetValue(
|
||||
!m_settings.m_LayerProperties[m_currentLayer].hatching_offset.has_value() );
|
||||
|
||||
VECTOR2I value = m_settings.m_LayerProperties[m_currentLayer].hatching_offset.value_or( VECTOR2I( 0, 0 ) );
|
||||
m_hatchingOffsetX.SetValue( value.x );
|
||||
m_hatchingOffsetY.SetValue( value.y );
|
||||
|
||||
m_hatchingOffsetXValue->Enable( !m_hatchingOffsetUseDefault->IsChecked() );
|
||||
m_hatchingOffsetYValue->Enable( !m_hatchingOffsetUseDefault->IsChecked() );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_currentLayer = m_settings.m_Layers.Seq().at( 0 );
|
||||
}
|
||||
|
||||
m_layerSelector->SetLayerSelection( m_currentLayer );
|
||||
|
||||
SetInitialFocus( m_ShowNetNameFilter );
|
||||
|
||||
// Enable/Disable some widgets
|
||||
@ -485,6 +526,35 @@ void DIALOG_COPPER_ZONE::OnPadInZoneSelection( wxCommandEvent& event )
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_COPPER_ZONE::OnLayerSelectorChanged( wxCommandEvent& aEvent )
|
||||
{
|
||||
if( m_currentLayer != UNDEFINED_LAYER )
|
||||
{
|
||||
if( !m_hatchingOffsetUseDefault->IsChecked() )
|
||||
{
|
||||
m_settings.m_LayerProperties[m_currentLayer].hatching_offset =
|
||||
VECTOR2I( m_hatchingOffsetX.GetIntValue(), m_hatchingOffsetY.GetIntValue() );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_settings.m_LayerProperties[m_currentLayer].hatching_offset.reset();
|
||||
}
|
||||
}
|
||||
|
||||
updatePerLayerProperties();
|
||||
|
||||
aEvent.Skip();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_COPPER_ZONE::OnHatchingOffsetChecked( wxCommandEvent& aEvent )
|
||||
{
|
||||
m_hatchingOffsetXValue->Enable( !m_hatchingOffsetUseDefault->IsChecked() );
|
||||
m_hatchingOffsetYValue->Enable( !m_hatchingOffsetUseDefault->IsChecked() );
|
||||
aEvent.Skip();
|
||||
}
|
||||
|
||||
|
||||
bool DIALOG_COPPER_ZONE::TransferDataFromWindow()
|
||||
{
|
||||
if( m_GridStyleCtrl->GetSelection() > 0 )
|
||||
@ -512,6 +582,23 @@ bool DIALOG_COPPER_ZONE::TransferDataFromWindow()
|
||||
m_settings.m_HatchSmoothingLevel = m_spinCtrlSmoothLevel->GetValue();
|
||||
m_settings.m_HatchSmoothingValue = m_spinCtrlSmoothValue->GetValue();
|
||||
|
||||
if( m_currentLayer != UNDEFINED_LAYER )
|
||||
{
|
||||
if( !m_settings.m_LayerProperties.contains( m_currentLayer ) )
|
||||
m_settings.m_LayerProperties.emplace( m_currentLayer, ZONE_LAYER_PROPERTIES() );
|
||||
|
||||
if( !m_hatchingOffsetUseDefault->IsChecked() )
|
||||
{
|
||||
m_settings.m_LayerProperties[m_currentLayer].hatching_offset =
|
||||
VECTOR2I( m_hatchingOffsetX.GetIntValue(), m_hatchingOffsetY.GetIntValue() );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_settings.m_LayerProperties[m_currentLayer].hatching_offset.reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
*m_ptr = m_settings;
|
||||
return true;
|
||||
}
|
||||
@ -656,6 +743,15 @@ void DIALOG_COPPER_ZONE::OnLayerSelection( wxDataViewEvent& event )
|
||||
m_layers->GetValue( layerID, row, 2 );
|
||||
|
||||
m_settings.m_Layers.set( ToLAYER_ID( layerID.GetInteger() ), checked );
|
||||
|
||||
m_layerSelector->SetNotAllowedLayerSet( ~( m_settings.m_Layers ) );
|
||||
m_layerSelector->Resync();
|
||||
|
||||
m_currentLayer = m_settings.m_Layers.Seq().at( 0 );
|
||||
|
||||
m_layerSelector->SetLayerSelection( m_currentLayer );
|
||||
|
||||
updatePerLayerProperties();
|
||||
}
|
||||
|
||||
|
||||
@ -697,6 +793,28 @@ void DIALOG_COPPER_ZONE::loadPersistentNetSortConfigurations()
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_COPPER_ZONE::updatePerLayerProperties()
|
||||
{
|
||||
m_currentLayer = ToLAYER_ID( m_layerSelector->GetLayerSelection() );
|
||||
if( m_currentLayer != UNDEFINED_LAYER )
|
||||
{
|
||||
if( !m_settings.m_LayerProperties.contains( m_currentLayer ) )
|
||||
m_settings.m_LayerProperties.emplace( m_currentLayer, ZONE_LAYER_PROPERTIES() );
|
||||
|
||||
m_hatchingOffsetUseDefault->SetValue(
|
||||
!m_settings.m_LayerProperties[m_currentLayer].hatching_offset.has_value() );
|
||||
|
||||
VECTOR2I value = m_settings.m_LayerProperties[m_currentLayer].hatching_offset.value_or( VECTOR2I( 0, 0 ) );
|
||||
|
||||
m_hatchingOffsetX.SetValue( value.x );
|
||||
m_hatchingOffsetY.SetValue( value.y );
|
||||
|
||||
m_hatchingOffsetXValue->Enable( !m_hatchingOffsetUseDefault->IsChecked() );
|
||||
m_hatchingOffsetYValue->Enable( !m_hatchingOffsetUseDefault->IsChecked() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_COPPER_ZONE::OnShowNetNameFilterChange( wxCommandEvent& event )
|
||||
{
|
||||
updateDisplayedListOfNets();
|
||||
|
Loading…
x
Reference in New Issue
Block a user