mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 18:23:15 +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
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "layer_ids.h"
|
||||||
#include <wx/radiobut.h>
|
#include <wx/radiobut.h>
|
||||||
#include <kiface_base.h>
|
#include <kiface_base.h>
|
||||||
#include <confirm.h>
|
#include <confirm.h>
|
||||||
@ -36,6 +37,7 @@
|
|||||||
#include <trigo.h>
|
#include <trigo.h>
|
||||||
#include <eda_pattern_match.h>
|
#include <eda_pattern_match.h>
|
||||||
|
|
||||||
|
#include <pcb_layer_box_selector.h>
|
||||||
#include <dialog_copper_zones_base.h>
|
#include <dialog_copper_zones_base.h>
|
||||||
#include <string_utils.h>
|
#include <string_utils.h>
|
||||||
|
|
||||||
@ -76,6 +78,8 @@ private:
|
|||||||
void OnNetSelectionUpdated( wxCommandEvent& event ) override;
|
void OnNetSelectionUpdated( wxCommandEvent& event ) override;
|
||||||
void OnRemoveIslandsSelection( wxCommandEvent& event ) override;
|
void OnRemoveIslandsSelection( wxCommandEvent& event ) override;
|
||||||
void OnPadInZoneSelection( wxCommandEvent& event ) override;
|
void OnPadInZoneSelection( wxCommandEvent& event ) override;
|
||||||
|
void OnLayerSelectorChanged( wxCommandEvent& event ) override;
|
||||||
|
void OnHatchingOffsetChecked( wxCommandEvent& event ) override;
|
||||||
|
|
||||||
void readNetInformation();
|
void readNetInformation();
|
||||||
void readFilteringAndSortingCriteria();
|
void readFilteringAndSortingCriteria();
|
||||||
@ -91,6 +95,7 @@ private:
|
|||||||
void updateInfoBar();
|
void updateInfoBar();
|
||||||
void storePersistentNetSortConfigurations();
|
void storePersistentNetSortConfigurations();
|
||||||
void loadPersistentNetSortConfigurations();
|
void loadPersistentNetSortConfigurations();
|
||||||
|
void updatePerLayerProperties();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
PCB_BASE_FRAME* m_Parent;
|
PCB_BASE_FRAME* m_Parent;
|
||||||
@ -130,6 +135,11 @@ private:
|
|||||||
wxRadioButton* m_rbCenterline;
|
wxRadioButton* m_rbCenterline;
|
||||||
wxRadioButton* m_rbEnvelope;
|
wxRadioButton* m_rbEnvelope;
|
||||||
wxCheckBox* m_cbDeleteOriginals;
|
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_convertSettings( aConvertSettings ),
|
||||||
m_rbCenterline( nullptr ),
|
m_rbCenterline( nullptr ),
|
||||||
m_rbEnvelope( 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;
|
m_Parent = aParent;
|
||||||
|
|
||||||
@ -264,6 +277,8 @@ DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE( PCB_BASE_FRAME* aParent, ZONE_SETTINGS*
|
|||||||
m_gap = nullptr;
|
m_gap = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_currentLayer = m_settings.m_Layers.Seq().at( 0 );
|
||||||
|
|
||||||
m_currentlySelectedNetcode = INVALID_NET_CODE;
|
m_currentlySelectedNetcode = INVALID_NET_CODE;
|
||||||
m_maxNetCode = 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_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 );
|
SetInitialFocus( m_ShowNetNameFilter );
|
||||||
|
|
||||||
// Enable/Disable some widgets
|
// 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()
|
bool DIALOG_COPPER_ZONE::TransferDataFromWindow()
|
||||||
{
|
{
|
||||||
if( m_GridStyleCtrl->GetSelection() > 0 )
|
if( m_GridStyleCtrl->GetSelection() > 0 )
|
||||||
@ -512,6 +582,23 @@ bool DIALOG_COPPER_ZONE::TransferDataFromWindow()
|
|||||||
m_settings.m_HatchSmoothingLevel = m_spinCtrlSmoothLevel->GetValue();
|
m_settings.m_HatchSmoothingLevel = m_spinCtrlSmoothLevel->GetValue();
|
||||||
m_settings.m_HatchSmoothingValue = m_spinCtrlSmoothValue->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;
|
*m_ptr = m_settings;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -656,6 +743,15 @@ void DIALOG_COPPER_ZONE::OnLayerSelection( wxDataViewEvent& event )
|
|||||||
m_layers->GetValue( layerID, row, 2 );
|
m_layers->GetValue( layerID, row, 2 );
|
||||||
|
|
||||||
m_settings.m_Layers.set( ToLAYER_ID( layerID.GetInteger() ), checked );
|
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 )
|
void DIALOG_COPPER_ZONE::OnShowNetNameFilterChange( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
updateDisplayedListOfNets();
|
updateDisplayedListOfNets();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user