diff --git a/pcbnew/class_zone_setting.h b/pcbnew/class_zone_setting.h
index 8d69962bd4..4a1f861a48 100644
--- a/pcbnew/class_zone_setting.h
+++ b/pcbnew/class_zone_setting.h
@@ -1,48 +1,48 @@
-/****************************************************************/
-/* class ZONE_SETTING used to handle zones parameters in dialogs */
-/****************************************************************/
-
-#ifndef ZONE_SETTING_H
-#define ZONE_SETTING_H
-
-
-#ifndef eda_global
-#define eda_global extern
-#endif
-
-
-/*************************************************/
-/* Class ZONE_SETTING to handle zones parameters */
-/*************************************************/
-class ZONE_SETTING
-{
-public:
- int m_GridFillValue; // Grid value for filling zone by segments, 0 to used polygons to fill
- int m_ZoneClearance; // Clearance value
- int m_NetcodeSelection; // Net code selection for the current zone
- int m_CurrentZone_Layer; // Layer used to create the current zone
- int m_Zone_HatchingStyle; // Option to show the zone area (outlines only, short hatches or full hatches
- int m_ArcToSegmentsCount; /* Option to select number of segments to approximate a circle
- * 16 or 32 segments */
- int m_FilledAreasShowMode; // Used to select draw options for filled areas in a zone (currently normal =0, sketch = 1)
- long m_ThermalReliefGapValue; // tickness of the gap in thermal reliefs
- long m_ThermalReliefCopperBridgeValue; // tickness of the copper bridge in thermal reliefs
- int m_Zone_Pad_Options; // How pads are covered by copper in zone
-public:
- ZONE_SETTING( void );
-
- /** function ImportSetting
- * copy settings from a given zone
- * @param aSource: the given zone
- */
- void ImportSetting( const ZONE_CONTAINER& aSource );
-
- /** function ExportSetting
- * copy settings to a given zone
- * @param aTarget: the given zone
- */
- void ExportSetting( ZONE_CONTAINER& aTarget );
-};
-
-
-#endif // ifndef ZONE_SETTING_H
+/****************************************************************/
+/* class ZONE_SETTING used to handle zones parameters in dialogs */
+/****************************************************************/
+
+#ifndef ZONE_SETTING_H
+#define ZONE_SETTING_H
+
+
+#ifndef eda_global
+#define eda_global extern
+#endif
+
+
+/*************************************************/
+/* Class ZONE_SETTING to handle zones parameters */
+/*************************************************/
+class ZONE_SETTING
+{
+public:
+ int m_GridFillValue; // Grid value for filling zone by segments, 0 to used polygons to fill
+ int m_ZoneClearance; // Clearance value
+ int m_NetcodeSelection; // Net code selection for the current zone
+ int m_CurrentZone_Layer; // Layer used to create the current zone
+ int m_Zone_HatchingStyle; // Option to show the zone area (outlines only, short hatches or full hatches
+ int m_ArcToSegmentsCount; /* Option to select number of segments to approximate a circle
+ * 16 or 32 segments */
+ int m_FilledAreasShowMode; // Used to select draw options for filled areas in a zone (currently normal =0, sketch = 1)
+ long m_ThermalReliefGapValue; // tickness of the gap in thermal reliefs
+ long m_ThermalReliefCopperBridgeValue; // tickness of the copper bridge in thermal reliefs
+ int m_Zone_Pad_Options; // How pads are covered by copper in zone
+public:
+ ZONE_SETTING( void );
+
+ /** function ImportSetting
+ * copy settings from a given zone
+ * @param aSource: the given zone
+ */
+ void ImportSetting( const ZONE_CONTAINER& aSource );
+
+ /** function ExportSetting
+ * copy settings to a given zone
+ * @param aTarget: the given zone
+ */
+ void ExportSetting( ZONE_CONTAINER& aTarget );
+};
+
+
+#endif // ifndef ZONE_SETTING_H
diff --git a/pcbnew/dialog_copper_zones.cpp b/pcbnew/dialog_copper_zones.cpp
index 8e059bdaba..f1b906c05c 100644
--- a/pcbnew/dialog_copper_zones.cpp
+++ b/pcbnew/dialog_copper_zones.cpp
@@ -1,486 +1,486 @@
-/////////////////////////////////////////////////////////////////////////////
-
-// Name: dialog_copper_zones.cpp
-// Author: jean-pierre Charras
-// Created: 09/oct/2008
-/// Licence: GNU License
-/////////////////////////////////////////////////////////////////////////////
-
-#if defined (__GNUG__) && !defined (NO_GCC_PRAGMA)
-#pragma implementation "zones.h"
-#endif
-
-// For compilers that support precompilation, includes "wx/wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
-#ifndef WX_PRECOMP
-#include "wx/wx.h"
-#endif
-
-#include "fctsys.h"
-#include "wxstruct.h"
-
-#include "common.h"
-#include "PolyLine.h"
-#include "pcbnew.h"
-#include "trigo.h"
-#include "autorout.h"
-#include "zones.h"
-
-#include "dialog_copper_zones.h"
-
-
-/************************************************************************************************/
-dialog_copper_zone::dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_SETTING* zone_setting ) :
- dialog_copper_zone_base( parent )
-/************************************************************************************************/
-{
- m_Parent = parent;
- m_Zone_Setting = zone_setting;
- m_NetSorting = 1; // 0 = alphabetic sort, 1 = pad count sort
- if( m_Parent->m_Parent->m_EDA_Config )
- {
- m_NetSorting = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_SORT_OPTION_KEY, 1l );
- }
-
- SetReturnCode( ZONE_ABORT ); // Will be changed on buttons click
-}
-
-
-/*****************************************************************/
-void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event )
-/*****************************************************************/
-
-// Initialise all dialog options and values in wxTextCtrl
-{
- BOARD* board = m_Parent->m_Pcb;
-
- SetFont( *g_DialogFont );
-
- SetFocus(); // Required under wxGTK if we want to demiss the dialog with the ESC key
-
- wxString msg = _( "Zone clearance value:" ) + ReturnUnitSymbol( g_UnitMetric );
- m_ClearanceValueTitle->SetLabel( msg );
-
- msg = _( "Grid :" ) + ReturnUnitSymbol( g_UnitMetric );
- m_GridCtrl->SetLabel( msg );
-
- msg = ReturnStringFromValue( g_UnitMetric,
- m_Zone_Setting->m_ZoneClearance,
- m_Parent->m_InternalUnits );
- m_ZoneClearanceCtrl->SetValue( msg );
-
- if( g_Zone_45_Only )
- m_OrientEdgesOpt->SetSelection( 1 );
-
- static const int GridList[4] = { 25, 50, 100, 250 };
- int selection = 0;
-
- int grid_routing = m_Zone_Setting->m_GridFillValue;
-
- for( unsigned ii = 0; ii < 4; ii++ )
- {
- msg = ReturnStringFromValue( g_UnitMetric,
- GridList[ii],
- m_Parent->m_InternalUnits );
- m_GridCtrl->SetString( ii, msg );
- if( grid_routing == GridList[ii] )
- selection = ii;
- }
-
- if( grid_routing == 0 ) // No Grid: fill with polygons
- selection = 4;
-
- m_GridCtrl->SetSelection( selection );
-
- msg = ReturnStringFromValue( g_UnitMetric,
- m_Zone_Setting->m_ZoneClearance,
- m_Parent->m_InternalUnits );
- m_ZoneClearanceCtrl->SetValue( msg );
-
- switch( m_Zone_Setting->m_Zone_Pad_Options )
- {
- case PAD_NOT_IN_ZONE: // Pads are not covered
- m_PadInZoneOpt->SetSelection( 2 );
- break;
-
- case THERMAL_PAD: // Use thermal relief for pads
- m_PadInZoneOpt->SetSelection( 1 );
- break;
-
- case PAD_IN_ZONE: // pads are covered by copper
- m_PadInZoneOpt->SetSelection( 0 );
- break;
- }
-
- if( m_Zone_Setting->m_FilledAreasShowMode == 1 )
- m_ShowFilledAreasInSketchOpt->SetValue( true );
-
-
- if( m_Zone_Setting->m_Zone_Pad_Options != THERMAL_PAD )
- {
- m_AntipadSizeValue->Enable( false );
- m_CopperWidthValue->Enable( false );
- }
- else
- {
- m_AntipadSizeValue->Enable( true );
- m_CopperWidthValue->Enable( true );
- }
-
- AddUnitSymbol( *m_AntipadSizeText, g_UnitMetric );
- AddUnitSymbol( *m_CopperBridgeWidthText, g_UnitMetric );
- PutValueInLocalUnits( *m_AntipadSizeValue,
- m_Zone_Setting->m_ThermalReliefGapValue,
- PCB_INTERNAL_UNIT );
- PutValueInLocalUnits( *m_CopperWidthValue,
- m_Zone_Setting->m_ThermalReliefCopperBridgeValue,
- PCB_INTERNAL_UNIT );
-
- switch( m_Zone_Setting->m_Zone_HatchingStyle )
- {
- case CPolyLine::NO_HATCH:
- m_OutlineAppearanceCtrl->SetSelection( 0 );
- break;
-
- case CPolyLine::DIAGONAL_EDGE:
- m_OutlineAppearanceCtrl->SetSelection( 1 );
- break;
-
- case CPolyLine::DIAGONAL_FULL:
- m_OutlineAppearanceCtrl->SetSelection( 2 );
- break;
- }
-
- m_ArcApproximationOpt->SetSelection( m_Zone_Setting->m_ArcToSegmentsCount == 32 ? 1 : 0 );
-
- /* build copper layers list */
- int layer_cnt = board->GetCopperLayerCount();
- for( int ii = 0; ii < board->GetCopperLayerCount(); ii++ )
- {
- int layer_number = COPPER_LAYER_N;
-
- if( layer_cnt <= 1 || ii < layer_cnt - 1 )
- layer_number = ii;
- else if( ii == layer_cnt - 1 )
- layer_number = LAYER_CMP_N;
-
- m_LayerId[ii] = layer_number;
-
- msg = board->GetLayerName( layer_number ).Trim();
- m_LayerSelectionCtrl->InsertItems( 1, &msg, ii );
-
- if( m_Zone_Setting->m_CurrentZone_Layer == layer_number )
- m_LayerSelectionCtrl->SetSelection( ii );
- }
-
- m_NetSortingOption->SetSelection( m_NetSorting );
-
- wxString NetNameFilter;
- if( m_Parent->m_Parent->m_EDA_Config )
- {
- NetNameFilter =
- m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_FILTER_STRING_KEY, wxT( "N_0*" ) );
- }
-
- m_NetNameFilter->SetValue( NetNameFilter );
- wxArrayString ListNetName;
- m_Parent->m_Pcb->ReturnSortedNetnamesList(
- ListNetName,
- m_NetSorting ==
- 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT );
-
- if( m_NetSorting != 0 )
- {
- wxString Filter = m_NetNameFilter->GetValue();
- for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
- {
- if( ListNetName[ii].Matches( Filter.GetData() ) )
- {
- ListNetName.RemoveAt( ii );
- ii--;
- }
- }
- }
-
- m_ListNetNameSelection->InsertItems( ListNetName, 0 );
-
- // Select net:
- int net_select = m_Zone_Setting->m_NetcodeSelection;
-
- if( net_select > 0 )
- {
- EQUIPOT* equipot = m_Parent->m_Pcb->FindNet( net_select );
- if( equipot ) // Search net in list and select it
- {
- for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
- {
- if( ListNetName[ii] == equipot->m_Netname )
- {
- m_ListNetNameSelection->SetSelection( ii );
- m_ListNetNameSelection->EnsureVisible( ii );
- break;
- }
- }
- }
- }
- if( GetSizer() )
- {
- GetSizer()->SetSizeHints( this );
- }
- Center();
-}
-
-
-/********************************************************************/
-void dialog_copper_zone::OnButtonCancelClick( wxCommandEvent& event )
-/********************************************************************/
-{
- EndModal( ZONE_ABORT );
-}
-
-
-/********************************************************************************************/
-bool dialog_copper_zone::AcceptOptions( bool aPromptForErrors, bool aUseExportableSetupOnly )
-/********************************************************************************************/
-
-/** Function dialog_copper_zone::AcceptOptions(
- * @return false if incorrect options, true if Ok.
- * @param aPromptForErrors = true to prompt user on incorrectparams
- * @param aUseExportableSetupOnly = true to use exportable parametres only (used to export this setup to other zones)
- */
-{
- switch( m_PadInZoneOpt->GetSelection() )
- {
- case 2:
- m_Zone_Setting->m_Zone_Pad_Options = PAD_NOT_IN_ZONE; // Pads are not covered
- break;
-
- case 1:
- m_Zone_Setting->m_Zone_Pad_Options = THERMAL_PAD; // Use thermal relief for pads
- break;
-
- case 0:
- m_Zone_Setting->m_Zone_Pad_Options = PAD_IN_ZONE; // pads are covered by copper
- break;
- }
-
- switch( m_OutlineAppearanceCtrl->GetSelection() )
- {
- case 0:
- m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::NO_HATCH;
- break;
-
- case 1:
- m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::DIAGONAL_EDGE;
- break;
-
- case 2:
- m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::DIAGONAL_FULL;
- break;
- }
-
- m_Zone_Setting->m_ArcToSegmentsCount = m_ArcApproximationOpt->GetSelection() == 1 ? 32 : 16;
-
- if( m_Parent->m_Parent->m_EDA_Config )
- {
- m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY,
- (long) m_Zone_Setting->m_Zone_HatchingStyle );
- }
-
- switch( m_GridCtrl->GetSelection() )
- {
- case 0:
- m_Zone_Setting->m_GridFillValue = 25;
- break;
-
- case 1:
- m_Zone_Setting->m_GridFillValue = 50;
- break;
-
- default:
- case 2:
- m_Zone_Setting->m_GridFillValue = 100;
- break;
-
- case 3:
- m_Zone_Setting->m_GridFillValue = 250;
- break;
-
- case 4:
- m_Zone_Setting->m_GridFillValue = 0;
-#if 0 // I hope this feature works fine ( JP Charras)
- DisplayInfo( this, wxT(
- "You are using No grid for filling zones\nThis is currently in development and for tests only.\n Do not use for production" ) );
-#endif
- break;
- }
-
- wxString txtvalue = m_ZoneClearanceCtrl->GetValue();
- m_Zone_Setting->m_ZoneClearance =
- ReturnValueFromString( g_UnitMetric, txtvalue, m_Parent->m_InternalUnits );
- if( m_OrientEdgesOpt->GetSelection() == 0 )
- g_Zone_45_Only = FALSE;
- else
- g_Zone_45_Only = TRUE;
-
- m_Zone_Setting->m_FilledAreasShowMode = m_ShowFilledAreasInSketchOpt->IsChecked() ? 1 : 0;
-
- m_Zone_Setting->m_ThermalReliefGapValue = ReturnValueFromTextCtrl( *m_AntipadSizeValue,
- PCB_INTERNAL_UNIT );
- m_Zone_Setting->m_ThermalReliefCopperBridgeValue = ReturnValueFromTextCtrl(
- *m_CopperWidthValue,
- PCB_INTERNAL_UNIT );
-
- m_Parent->m_Parent->m_EDA_Config->Write( ZONE_THERMAL_RELIEF_GAP_STRING_KEY,
- (long) m_Zone_Setting->m_ThermalReliefGapValue );
- m_Parent->m_Parent->m_EDA_Config->Write(
- ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY,
- (long) m_Zone_Setting->
- m_ThermalReliefCopperBridgeValue );
-
- // If we use only exportable to others zones parameters, exit here:
- if( aUseExportableSetupOnly )
- return true;
-
- /* Get the layer selection for this zone */
- int ii = m_LayerSelectionCtrl->GetSelection();
- if( ii < 0 && aPromptForErrors )
- {
- DisplayError( this, _( "Error : you must choose a layer" ) );
- return false;
- }
-
-
- m_Zone_Setting->m_CurrentZone_Layer = m_LayerId[ii];
-
-
- /* Get the net name selection for this zone */
- ii = m_ListNetNameSelection->GetSelection();
- if( ii < 0 && aPromptForErrors )
- {
- DisplayError( this, _( "Error : you must choose a net name" ) );
- return false;
- }
-
- wxString net_name = m_ListNetNameSelection->GetString( ii );
-
- /* Search net_code for this net */
- EQUIPOT* net;
- g_Zone_Default_Setting.m_NetcodeSelection = 0;
- for( net = m_Parent->m_Pcb->m_Equipots; net; net = net->Next() )
- {
- if( net->m_Netname == net_name )
- {
- g_Zone_Default_Setting.m_NetcodeSelection = net->GetNet();
- break;
- }
- }
-
- return true;
-}
-
-
-/***************************************************************************/
-void dialog_copper_zone::OnNetSortingOptionSelected( wxCommandEvent& event )
-/***************************************************************************/
-{
- wxArrayString ListNetName;
-
- m_NetSorting = m_NetSortingOption->GetSelection();
- m_Parent->m_Pcb->ReturnSortedNetnamesList(
- ListNetName,
- m_NetSorting ==
- 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT );
- if( m_NetSorting != 0 )
- {
- wxString Filter = m_NetNameFilter->GetValue();
- for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
- {
- if( ListNetName[ii].Matches( Filter.GetData() ) )
- {
- ListNetName.RemoveAt( ii );
- ii--;
- }
- }
- }
- m_ListNetNameSelection->Clear();
- m_ListNetNameSelection->InsertItems( ListNetName, 0 );
- if( m_Parent->m_Parent->m_EDA_Config )
- {
- m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_SORT_OPTION_KEY, (long) m_NetSorting );
- m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_FILTER_STRING_KEY,
- m_NetNameFilter->GetValue() );
- }
-
- // Select and isplay current zone net name in listbox:
- int net_select = m_Zone_Setting->m_NetcodeSelection;
- if( net_select > 0 )
- {
- EQUIPOT* equipot = m_Parent->m_Pcb->FindNet( net_select );
- if( equipot ) // Search net in list and select it
- {
- for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
- {
- if( ListNetName[ii] == equipot->m_Netname )
- {
- m_ListNetNameSelection->SetSelection( ii );
- m_ListNetNameSelection->EnsureVisible( ii );
- break;
- }
- }
- }
- }
-}
-
-
-/*****************************************************************/
-void dialog_copper_zone::OnButtonOkClick( wxCommandEvent& event )
-/*****************************************************************/
-{
- if( AcceptOptions( true ) )
- EndModal( ZONE_OK );
-}
-
-
-/******************************************************************************/
-void dialog_copper_zone::ExportSetupToOtherCopperZones( wxCommandEvent& event )
-/******************************************************************************/
-{
- if( !AcceptOptions( true, true ) )
- return;
-
- // Export settings ( but layer ) to others zones:
- BOARD* pcb = m_Parent->m_Pcb;
- for( int ii = 0; ii < pcb->GetAreaCount(); ii++ )
- {
- ZONE_CONTAINER* zone = pcb->GetArea( ii );
- int zone_layer = zone->GetLayer();
- m_Zone_Setting->ExportSetting( *zone );
- zone->SetLayer( zone_layer );
- m_Parent->GetScreen()->SetModify();
- }
-}
-
-
-/******************************************************************/
-void dialog_copper_zone::OnPadsInZoneClick( wxCommandEvent& event )
-/******************************************************************/
-{
- switch( m_PadInZoneOpt->GetSelection() )
- {
- default:
- m_AntipadSizeValue->Enable( false );
- m_CopperWidthValue->Enable( false );
- break;
-
- case 1:
- m_AntipadSizeValue->Enable( true );
- m_CopperWidthValue->Enable( true );
- break;
- }
-}
+/////////////////////////////////////////////////////////////////////////////
+
+// Name: dialog_copper_zones.cpp
+// Author: jean-pierre Charras
+// Created: 09/oct/2008
+/// Licence: GNU License
+/////////////////////////////////////////////////////////////////////////////
+
+#if defined (__GNUG__) && !defined (NO_GCC_PRAGMA)
+#pragma implementation "zones.h"
+#endif
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+#include "wx/wx.h"
+#endif
+
+#include "fctsys.h"
+#include "wxstruct.h"
+
+#include "common.h"
+#include "PolyLine.h"
+#include "pcbnew.h"
+#include "trigo.h"
+#include "autorout.h"
+#include "zones.h"
+
+#include "dialog_copper_zones.h"
+
+
+/************************************************************************************************/
+dialog_copper_zone::dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_SETTING* zone_setting ) :
+ dialog_copper_zone_base( parent )
+/************************************************************************************************/
+{
+ m_Parent = parent;
+ m_Zone_Setting = zone_setting;
+ m_NetSorting = 1; // 0 = alphabetic sort, 1 = pad count sort
+ if( m_Parent->m_Parent->m_EDA_Config )
+ {
+ m_NetSorting = m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_SORT_OPTION_KEY, 1l );
+ }
+
+ SetReturnCode( ZONE_ABORT ); // Will be changed on buttons click
+}
+
+
+/*****************************************************************/
+void dialog_copper_zone::OnInitDialog( wxInitDialogEvent& event )
+/*****************************************************************/
+
+// Initialise all dialog options and values in wxTextCtrl
+{
+ BOARD* board = m_Parent->m_Pcb;
+
+ SetFont( *g_DialogFont );
+
+ SetFocus(); // Required under wxGTK if we want to demiss the dialog with the ESC key
+
+ wxString msg = _( "Zone clearance value:" ) + ReturnUnitSymbol( g_UnitMetric );
+ m_ClearanceValueTitle->SetLabel( msg );
+
+ msg = _( "Grid :" ) + ReturnUnitSymbol( g_UnitMetric );
+ m_GridCtrl->SetLabel( msg );
+
+ msg = ReturnStringFromValue( g_UnitMetric,
+ m_Zone_Setting->m_ZoneClearance,
+ m_Parent->m_InternalUnits );
+ m_ZoneClearanceCtrl->SetValue( msg );
+
+ if( g_Zone_45_Only )
+ m_OrientEdgesOpt->SetSelection( 1 );
+
+ static const int GridList[4] = { 25, 50, 100, 250 };
+ int selection = 0;
+
+ int grid_routing = m_Zone_Setting->m_GridFillValue;
+
+ for( unsigned ii = 0; ii < 4; ii++ )
+ {
+ msg = ReturnStringFromValue( g_UnitMetric,
+ GridList[ii],
+ m_Parent->m_InternalUnits );
+ m_GridCtrl->SetString( ii, msg );
+ if( grid_routing == GridList[ii] )
+ selection = ii;
+ }
+
+ if( grid_routing == 0 ) // No Grid: fill with polygons
+ selection = 4;
+
+ m_GridCtrl->SetSelection( selection );
+
+ msg = ReturnStringFromValue( g_UnitMetric,
+ m_Zone_Setting->m_ZoneClearance,
+ m_Parent->m_InternalUnits );
+ m_ZoneClearanceCtrl->SetValue( msg );
+
+ switch( m_Zone_Setting->m_Zone_Pad_Options )
+ {
+ case PAD_NOT_IN_ZONE: // Pads are not covered
+ m_PadInZoneOpt->SetSelection( 2 );
+ break;
+
+ case THERMAL_PAD: // Use thermal relief for pads
+ m_PadInZoneOpt->SetSelection( 1 );
+ break;
+
+ case PAD_IN_ZONE: // pads are covered by copper
+ m_PadInZoneOpt->SetSelection( 0 );
+ break;
+ }
+
+ if( m_Zone_Setting->m_FilledAreasShowMode == 1 )
+ m_ShowFilledAreasInSketchOpt->SetValue( true );
+
+
+ if( m_Zone_Setting->m_Zone_Pad_Options != THERMAL_PAD )
+ {
+ m_AntipadSizeValue->Enable( false );
+ m_CopperWidthValue->Enable( false );
+ }
+ else
+ {
+ m_AntipadSizeValue->Enable( true );
+ m_CopperWidthValue->Enable( true );
+ }
+
+ AddUnitSymbol( *m_AntipadSizeText, g_UnitMetric );
+ AddUnitSymbol( *m_CopperBridgeWidthText, g_UnitMetric );
+ PutValueInLocalUnits( *m_AntipadSizeValue,
+ m_Zone_Setting->m_ThermalReliefGapValue,
+ PCB_INTERNAL_UNIT );
+ PutValueInLocalUnits( *m_CopperWidthValue,
+ m_Zone_Setting->m_ThermalReliefCopperBridgeValue,
+ PCB_INTERNAL_UNIT );
+
+ switch( m_Zone_Setting->m_Zone_HatchingStyle )
+ {
+ case CPolyLine::NO_HATCH:
+ m_OutlineAppearanceCtrl->SetSelection( 0 );
+ break;
+
+ case CPolyLine::DIAGONAL_EDGE:
+ m_OutlineAppearanceCtrl->SetSelection( 1 );
+ break;
+
+ case CPolyLine::DIAGONAL_FULL:
+ m_OutlineAppearanceCtrl->SetSelection( 2 );
+ break;
+ }
+
+ m_ArcApproximationOpt->SetSelection( m_Zone_Setting->m_ArcToSegmentsCount == 32 ? 1 : 0 );
+
+ /* build copper layers list */
+ int layer_cnt = board->GetCopperLayerCount();
+ for( int ii = 0; ii < board->GetCopperLayerCount(); ii++ )
+ {
+ int layer_number = COPPER_LAYER_N;
+
+ if( layer_cnt <= 1 || ii < layer_cnt - 1 )
+ layer_number = ii;
+ else if( ii == layer_cnt - 1 )
+ layer_number = LAYER_CMP_N;
+
+ m_LayerId[ii] = layer_number;
+
+ msg = board->GetLayerName( layer_number ).Trim();
+ m_LayerSelectionCtrl->InsertItems( 1, &msg, ii );
+
+ if( m_Zone_Setting->m_CurrentZone_Layer == layer_number )
+ m_LayerSelectionCtrl->SetSelection( ii );
+ }
+
+ m_NetSortingOption->SetSelection( m_NetSorting );
+
+ wxString NetNameFilter;
+ if( m_Parent->m_Parent->m_EDA_Config )
+ {
+ NetNameFilter =
+ m_Parent->m_Parent->m_EDA_Config->Read( ZONE_NET_FILTER_STRING_KEY, wxT( "N_0*" ) );
+ }
+
+ m_NetNameFilter->SetValue( NetNameFilter );
+ wxArrayString ListNetName;
+ m_Parent->m_Pcb->ReturnSortedNetnamesList(
+ ListNetName,
+ m_NetSorting ==
+ 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT );
+
+ if( m_NetSorting != 0 )
+ {
+ wxString Filter = m_NetNameFilter->GetValue();
+ for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
+ {
+ if( ListNetName[ii].Matches( Filter.GetData() ) )
+ {
+ ListNetName.RemoveAt( ii );
+ ii--;
+ }
+ }
+ }
+
+ m_ListNetNameSelection->InsertItems( ListNetName, 0 );
+
+ // Select net:
+ int net_select = m_Zone_Setting->m_NetcodeSelection;
+
+ if( net_select > 0 )
+ {
+ EQUIPOT* equipot = m_Parent->m_Pcb->FindNet( net_select );
+ if( equipot ) // Search net in list and select it
+ {
+ for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
+ {
+ if( ListNetName[ii] == equipot->m_Netname )
+ {
+ m_ListNetNameSelection->SetSelection( ii );
+ m_ListNetNameSelection->EnsureVisible( ii );
+ break;
+ }
+ }
+ }
+ }
+ if( GetSizer() )
+ {
+ GetSizer()->SetSizeHints( this );
+ }
+ Center();
+}
+
+
+/********************************************************************/
+void dialog_copper_zone::OnButtonCancelClick( wxCommandEvent& event )
+/********************************************************************/
+{
+ EndModal( ZONE_ABORT );
+}
+
+
+/********************************************************************************************/
+bool dialog_copper_zone::AcceptOptions( bool aPromptForErrors, bool aUseExportableSetupOnly )
+/********************************************************************************************/
+
+/** Function dialog_copper_zone::AcceptOptions(
+ * @return false if incorrect options, true if Ok.
+ * @param aPromptForErrors = true to prompt user on incorrectparams
+ * @param aUseExportableSetupOnly = true to use exportable parametres only (used to export this setup to other zones)
+ */
+{
+ switch( m_PadInZoneOpt->GetSelection() )
+ {
+ case 2:
+ m_Zone_Setting->m_Zone_Pad_Options = PAD_NOT_IN_ZONE; // Pads are not covered
+ break;
+
+ case 1:
+ m_Zone_Setting->m_Zone_Pad_Options = THERMAL_PAD; // Use thermal relief for pads
+ break;
+
+ case 0:
+ m_Zone_Setting->m_Zone_Pad_Options = PAD_IN_ZONE; // pads are covered by copper
+ break;
+ }
+
+ switch( m_OutlineAppearanceCtrl->GetSelection() )
+ {
+ case 0:
+ m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::NO_HATCH;
+ break;
+
+ case 1:
+ m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::DIAGONAL_EDGE;
+ break;
+
+ case 2:
+ m_Zone_Setting->m_Zone_HatchingStyle = CPolyLine::DIAGONAL_FULL;
+ break;
+ }
+
+ m_Zone_Setting->m_ArcToSegmentsCount = m_ArcApproximationOpt->GetSelection() == 1 ? 32 : 16;
+
+ if( m_Parent->m_Parent->m_EDA_Config )
+ {
+ m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY,
+ (long) m_Zone_Setting->m_Zone_HatchingStyle );
+ }
+
+ switch( m_GridCtrl->GetSelection() )
+ {
+ case 0:
+ m_Zone_Setting->m_GridFillValue = 25;
+ break;
+
+ case 1:
+ m_Zone_Setting->m_GridFillValue = 50;
+ break;
+
+ default:
+ case 2:
+ m_Zone_Setting->m_GridFillValue = 100;
+ break;
+
+ case 3:
+ m_Zone_Setting->m_GridFillValue = 250;
+ break;
+
+ case 4:
+ m_Zone_Setting->m_GridFillValue = 0;
+#if 0 // I hope this feature works fine ( JP Charras)
+ DisplayInfo( this, wxT(
+ "You are using No grid for filling zones\nThis is currently in development and for tests only.\n Do not use for production" ) );
+#endif
+ break;
+ }
+
+ wxString txtvalue = m_ZoneClearanceCtrl->GetValue();
+ m_Zone_Setting->m_ZoneClearance =
+ ReturnValueFromString( g_UnitMetric, txtvalue, m_Parent->m_InternalUnits );
+ if( m_OrientEdgesOpt->GetSelection() == 0 )
+ g_Zone_45_Only = FALSE;
+ else
+ g_Zone_45_Only = TRUE;
+
+ m_Zone_Setting->m_FilledAreasShowMode = m_ShowFilledAreasInSketchOpt->IsChecked() ? 1 : 0;
+
+ m_Zone_Setting->m_ThermalReliefGapValue = ReturnValueFromTextCtrl( *m_AntipadSizeValue,
+ PCB_INTERNAL_UNIT );
+ m_Zone_Setting->m_ThermalReliefCopperBridgeValue = ReturnValueFromTextCtrl(
+ *m_CopperWidthValue,
+ PCB_INTERNAL_UNIT );
+
+ m_Parent->m_Parent->m_EDA_Config->Write( ZONE_THERMAL_RELIEF_GAP_STRING_KEY,
+ (long) m_Zone_Setting->m_ThermalReliefGapValue );
+ m_Parent->m_Parent->m_EDA_Config->Write(
+ ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY,
+ (long) m_Zone_Setting->
+ m_ThermalReliefCopperBridgeValue );
+
+ // If we use only exportable to others zones parameters, exit here:
+ if( aUseExportableSetupOnly )
+ return true;
+
+ /* Get the layer selection for this zone */
+ int ii = m_LayerSelectionCtrl->GetSelection();
+ if( ii < 0 && aPromptForErrors )
+ {
+ DisplayError( this, _( "Error : you must choose a layer" ) );
+ return false;
+ }
+
+
+ m_Zone_Setting->m_CurrentZone_Layer = m_LayerId[ii];
+
+
+ /* Get the net name selection for this zone */
+ ii = m_ListNetNameSelection->GetSelection();
+ if( ii < 0 && aPromptForErrors )
+ {
+ DisplayError( this, _( "Error : you must choose a net name" ) );
+ return false;
+ }
+
+ wxString net_name = m_ListNetNameSelection->GetString( ii );
+
+ /* Search net_code for this net */
+ EQUIPOT* net;
+ g_Zone_Default_Setting.m_NetcodeSelection = 0;
+ for( net = m_Parent->m_Pcb->m_Equipots; net; net = net->Next() )
+ {
+ if( net->m_Netname == net_name )
+ {
+ g_Zone_Default_Setting.m_NetcodeSelection = net->GetNet();
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+/***************************************************************************/
+void dialog_copper_zone::OnNetSortingOptionSelected( wxCommandEvent& event )
+/***************************************************************************/
+{
+ wxArrayString ListNetName;
+
+ m_NetSorting = m_NetSortingOption->GetSelection();
+ m_Parent->m_Pcb->ReturnSortedNetnamesList(
+ ListNetName,
+ m_NetSorting ==
+ 0 ? BOARD::ALPHA_SORT : BOARD::PAD_CNT_SORT );
+ if( m_NetSorting != 0 )
+ {
+ wxString Filter = m_NetNameFilter->GetValue();
+ for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
+ {
+ if( ListNetName[ii].Matches( Filter.GetData() ) )
+ {
+ ListNetName.RemoveAt( ii );
+ ii--;
+ }
+ }
+ }
+ m_ListNetNameSelection->Clear();
+ m_ListNetNameSelection->InsertItems( ListNetName, 0 );
+ if( m_Parent->m_Parent->m_EDA_Config )
+ {
+ m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_SORT_OPTION_KEY, (long) m_NetSorting );
+ m_Parent->m_Parent->m_EDA_Config->Write( ZONE_NET_FILTER_STRING_KEY,
+ m_NetNameFilter->GetValue() );
+ }
+
+ // Select and isplay current zone net name in listbox:
+ int net_select = m_Zone_Setting->m_NetcodeSelection;
+ if( net_select > 0 )
+ {
+ EQUIPOT* equipot = m_Parent->m_Pcb->FindNet( net_select );
+ if( equipot ) // Search net in list and select it
+ {
+ for( unsigned ii = 0; ii < ListNetName.GetCount(); ii++ )
+ {
+ if( ListNetName[ii] == equipot->m_Netname )
+ {
+ m_ListNetNameSelection->SetSelection( ii );
+ m_ListNetNameSelection->EnsureVisible( ii );
+ break;
+ }
+ }
+ }
+ }
+}
+
+
+/*****************************************************************/
+void dialog_copper_zone::OnButtonOkClick( wxCommandEvent& event )
+/*****************************************************************/
+{
+ if( AcceptOptions( true ) )
+ EndModal( ZONE_OK );
+}
+
+
+/******************************************************************************/
+void dialog_copper_zone::ExportSetupToOtherCopperZones( wxCommandEvent& event )
+/******************************************************************************/
+{
+ if( !AcceptOptions( true, true ) )
+ return;
+
+ // Export settings ( but layer ) to others zones:
+ BOARD* pcb = m_Parent->m_Pcb;
+ for( int ii = 0; ii < pcb->GetAreaCount(); ii++ )
+ {
+ ZONE_CONTAINER* zone = pcb->GetArea( ii );
+ int zone_layer = zone->GetLayer();
+ m_Zone_Setting->ExportSetting( *zone );
+ zone->SetLayer( zone_layer );
+ m_Parent->GetScreen()->SetModify();
+ }
+}
+
+
+/******************************************************************/
+void dialog_copper_zone::OnPadsInZoneClick( wxCommandEvent& event )
+/******************************************************************/
+{
+ switch( m_PadInZoneOpt->GetSelection() )
+ {
+ default:
+ m_AntipadSizeValue->Enable( false );
+ m_CopperWidthValue->Enable( false );
+ break;
+
+ case 1:
+ m_AntipadSizeValue->Enable( true );
+ m_CopperWidthValue->Enable( true );
+ break;
+ }
+}
diff --git a/pcbnew/dialog_copper_zones.h b/pcbnew/dialog_copper_zones.h
index 6051ba5a51..bdd2cfd512 100644
--- a/pcbnew/dialog_copper_zones.h
+++ b/pcbnew/dialog_copper_zones.h
@@ -1,29 +1,29 @@
-/* dialog_copper_zones.h */
-
-#ifndef DIALOG_COPPER_ZONES
-#define DIALOG_COPPER_ZONES
-
-#include "dialog_copper_zones_base.h"
-
-/* here is the derivated class from dialog_copper_zone_frame created by wxFormBuilder
-*/
-class dialog_copper_zone: public dialog_copper_zone_base
-{
-public:
- WinEDA_PcbFrame* m_Parent;
- ZONE_SETTING * m_Zone_Setting;
- long m_NetSorting;
- int m_LayerId[LAYER_COUNT]; // Handle the real layer number from layer name position in m_LayerSelectionCtrl
-
-public:
- dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_SETTING * zone_setting);
- void OnInitDialog( wxInitDialogEvent& event );
- void OnButtonOkClick( wxCommandEvent& event );
- void OnButtonCancelClick( wxCommandEvent& event );
- bool AcceptOptions(bool aPromptForErrors, bool aUseExportableSetupOnly = false);
- void OnNetSortingOptionSelected( wxCommandEvent& event );
- void ExportSetupToOtherCopperZones( wxCommandEvent& event );
- void OnPadsInZoneClick( wxCommandEvent& event );
-};
-
-#endif // #ifndef DIALOG_COPPER_ZONES
+/* dialog_copper_zones.h */
+
+#ifndef DIALOG_COPPER_ZONES
+#define DIALOG_COPPER_ZONES
+
+#include "dialog_copper_zones_base.h"
+
+/* here is the derivated class from dialog_copper_zone_frame created by wxFormBuilder
+*/
+class dialog_copper_zone: public dialog_copper_zone_base
+{
+public:
+ WinEDA_PcbFrame* m_Parent;
+ ZONE_SETTING * m_Zone_Setting;
+ long m_NetSorting;
+ int m_LayerId[LAYER_COUNT]; // Handle the real layer number from layer name position in m_LayerSelectionCtrl
+
+public:
+ dialog_copper_zone( WinEDA_PcbFrame* parent, ZONE_SETTING * zone_setting);
+ void OnInitDialog( wxInitDialogEvent& event );
+ void OnButtonOkClick( wxCommandEvent& event );
+ void OnButtonCancelClick( wxCommandEvent& event );
+ bool AcceptOptions(bool aPromptForErrors, bool aUseExportableSetupOnly = false);
+ void OnNetSortingOptionSelected( wxCommandEvent& event );
+ void ExportSetupToOtherCopperZones( wxCommandEvent& event );
+ void OnPadsInZoneClick( wxCommandEvent& event );
+};
+
+#endif // #ifndef DIALOG_COPPER_ZONES
diff --git a/pcbnew/dialog_copper_zones_base.cpp b/pcbnew/dialog_copper_zones_base.cpp
index 9858c93e03..c30e7674d5 100644
--- a/pcbnew/dialog_copper_zones_base.cpp
+++ b/pcbnew/dialog_copper_zones_base.cpp
@@ -1,209 +1,209 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Apr 16 2008)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#include "dialog_copper_zones_base.h"
-
-///////////////////////////////////////////////////////////////////////////
-
-BEGIN_EVENT_TABLE( dialog_copper_zone_base, wxDialog )
- EVT_INIT_DIALOG( dialog_copper_zone_base::_wxFB_OnInitDialog )
- EVT_RADIOBOX( wxID_PADS_IN_ZONE_OPTIONS, dialog_copper_zone_base::_wxFB_OnPadsInZoneClick )
- EVT_BUTTON( wxID_BUTTON_EXPORT, dialog_copper_zone_base::_wxFB_ExportSetupToOtherCopperZones )
- EVT_BUTTON( wxID_OK, dialog_copper_zone_base::_wxFB_OnButtonOkClick )
- EVT_BUTTON( wxID_CANCEL, dialog_copper_zone_base::_wxFB_OnButtonCancelClick )
- EVT_RADIOBOX( ID_NET_SORTING_OPTION, dialog_copper_zone_base::_wxFB_OnNetSortingOptionSelected )
-END_EVENT_TABLE()
-
-dialog_copper_zone_base::dialog_copper_zone_base( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* m_MainBoxSize;
- m_MainBoxSize = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* m_OptionsBoxSizer;
- m_OptionsBoxSizer = new wxBoxSizer( wxHORIZONTAL );
-
- wxStaticBoxSizer* m_ExportableSetupSizer;
- m_ExportableSetupSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Zone Setup:") ), wxHORIZONTAL );
-
- wxBoxSizer* m_LeftBoxSizer;
- m_LeftBoxSizer = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* m_FillOptionsBox;
- m_FillOptionsBox = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Zone Fill Options:") ), wxVERTICAL );
-
- wxString m_GridCtrlChoices[] = { _("0.00000"), _("0.00000"), _("0.00000"), _("0.00000"), _("No grid (For tests only!)") };
- int m_GridCtrlNChoices = sizeof( m_GridCtrlChoices ) / sizeof( wxString );
- m_GridCtrl = new wxRadioBox( this, ID_RADIOBOX_GRID_SELECTION, _("Grid Size for Filling:"), wxDefaultPosition, wxDefaultSize, m_GridCtrlNChoices, m_GridCtrlChoices, 1, wxRA_SPECIFY_COLS );
- m_GridCtrl->SetSelection( 4 );
- m_FillOptionsBox->Add( m_GridCtrl, 0, wxALL|wxEXPAND, 5 );
-
- wxString m_PadInZoneOptChoices[] = { _("Include pads"), _("Thermal relief"), _("Exclude pads") };
- int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString );
- m_PadInZoneOpt = new wxRadioBox( this, wxID_PADS_IN_ZONE_OPTIONS, _("Pad in Zone:"), wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 1, wxRA_SPECIFY_COLS );
- m_PadInZoneOpt->SetSelection( 1 );
- m_FillOptionsBox->Add( m_PadInZoneOpt, 0, wxALL|wxEXPAND, 5 );
-
- wxStaticBoxSizer* m_ThermalShapesParamsSizer;
- m_ThermalShapesParamsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Thermal Reliefs Parameters") ), wxVERTICAL );
-
- m_AntipadSizeText = new wxStaticText( this, wxID_ANY, _("Antipad Size"), wxDefaultPosition, wxDefaultSize, 0 );
- m_AntipadSizeText->Wrap( -1 );
- m_ThermalShapesParamsSizer->Add( m_AntipadSizeText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_AntipadSizeValue = new wxTextCtrl( this, wxID_ANTIPAD_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_AntipadSizeValue->SetToolTip( _("Define the gap around the pad") );
-
- m_ThermalShapesParamsSizer->Add( m_AntipadSizeValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- m_CopperBridgeWidthText = new wxStaticText( this, wxID_ANY, _("Copper Width"), wxDefaultPosition, wxDefaultSize, 0 );
- m_CopperBridgeWidthText->Wrap( -1 );
- m_ThermalShapesParamsSizer->Add( m_CopperBridgeWidthText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_CopperWidthValue = new wxTextCtrl( this, wxID_COPPER_BRIDGE_VALUE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_CopperWidthValue->SetToolTip( _("Define the tickness of copper in thermal reliefs") );
-
- m_ThermalShapesParamsSizer->Add( m_CopperWidthValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- m_FillOptionsBox->Add( m_ThermalShapesParamsSizer, 0, wxEXPAND, 5 );
-
- m_LeftBoxSizer->Add( m_FillOptionsBox, 1, wxEXPAND, 5 );
-
- m_ExportableSetupSizer->Add( m_LeftBoxSizer, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- m_ExportableSetupSizer->Add( 5, 5, 0, wxEXPAND, 5 );
-
- wxBoxSizer* m_MiddleBox;
- m_MiddleBox = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* m_MiddleBoxSizer;
- m_MiddleBoxSizer = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* m_OutilinesBoxOpt;
- m_OutilinesBoxOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Outlines Options:") ), wxVERTICAL );
-
- wxString m_OrientEdgesOptChoices[] = { _("Any"), _("H , V and 45 deg") };
- int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
- m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone edges orient:"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS );
- m_OrientEdgesOpt->SetSelection( 0 );
- m_OutilinesBoxOpt->Add( m_OrientEdgesOpt, 0, wxALL|wxEXPAND, 5 );
-
- wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched outline"), _("Full hatched") };
- int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
- m_OutlineAppearanceCtrl = new wxRadioBox( this, ID_RADIOBOX_OUTLINES_OPTION, _("Outlines Appearance"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS );
- m_OutlineAppearanceCtrl->SetSelection( 1 );
- m_OutlineAppearanceCtrl->SetToolTip( _("Choose how a zone outline is displayed\n- Single line\n- Short hatching\n- Full zone area hatched") );
-
- m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxEXPAND, 5 );
-
- wxString m_ArcApproximationOptChoices[] = { _("16 segments / 360 deg"), _("32 segments / 360 deg") };
- int m_ArcApproximationOptNChoices = sizeof( m_ArcApproximationOptChoices ) / sizeof( wxString );
- m_ArcApproximationOpt = new wxRadioBox( this, wxID_ARC_APPROX, _("Arcs Approximation:"), wxDefaultPosition, wxDefaultSize, m_ArcApproximationOptNChoices, m_ArcApproximationOptChoices, 1, wxRA_SPECIFY_COLS );
- m_ArcApproximationOpt->SetSelection( 1 );
- m_ArcApproximationOpt->SetToolTip( _("Number of segments to approximate a circle in filling calculations.\n16 segment is faster to calculate and when redraw screen.\n32 segment give a better quality") );
-
- m_OutilinesBoxOpt->Add( m_ArcApproximationOpt, 0, wxALL|wxEXPAND, 5 );
-
- wxStaticBoxSizer* m_OthersOptionsSizer;
- m_OthersOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Others Options:") ), wxVERTICAL );
-
- m_ShowFilledAreasInSketchOpt = new wxCheckBox( this, wxID_ANY, _("Show filled areas in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
-
- m_ShowFilledAreasInSketchOpt->SetToolTip( _("If enabled, filled areas in is this zone will be displayed as non filled polygons.\nIf disabled, filled areas in is this zone will be displayed as \"solid\" areas (normal mode).") );
-
- m_OthersOptionsSizer->Add( m_ShowFilledAreasInSketchOpt, 0, wxALL, 5 );
-
- m_ClearanceValueTitle = new wxStaticText( this, wxID_ANY, _("Zone clearance value (mm):"), wxDefaultPosition, wxDefaultSize, 0 );
- m_ClearanceValueTitle->Wrap( -1 );
- m_OthersOptionsSizer->Add( m_ClearanceValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_ZoneClearanceCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_OthersOptionsSizer->Add( m_ZoneClearanceCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_OutilinesBoxOpt->Add( m_OthersOptionsSizer, 1, wxEXPAND, 5 );
-
- m_MiddleBoxSizer->Add( m_OutilinesBoxOpt, 1, wxEXPAND, 5 );
-
- m_ExportSetupButton = new wxButton( this, wxID_BUTTON_EXPORT, _("Export to others zones"), wxDefaultPosition, wxDefaultSize, 0 );
- m_ExportSetupButton->SetToolTip( _("Export this zone setup to all others copper zones") );
-
- m_MiddleBoxSizer->Add( m_ExportSetupButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_MiddleBox->Add( m_MiddleBoxSizer, 0, 0, 5 );
-
- m_ExportableSetupSizer->Add( m_MiddleBox, 1, wxEXPAND, 5 );
-
- m_OptionsBoxSizer->Add( m_ExportableSetupSizer, 1, wxEXPAND, 5 );
-
-
- m_OptionsBoxSizer->Add( 0, 0, 0, wxEXPAND, 5 );
-
- wxBoxSizer* m_RightBoxSizer;
- m_RightBoxSizer = new wxBoxSizer( wxVERTICAL );
-
- m_OkButton = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 );
- m_OkButton->SetDefault();
- m_RightBoxSizer->Add( m_OkButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_ButtonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
- m_RightBoxSizer->Add( m_ButtonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
-
- m_RightBoxSizer->Add( 5, 20, 0, wxEXPAND, 5 );
-
- wxStaticBoxSizer* m_NetSortOptSizer;
- m_NetSortOptSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Nets Display Options:") ), wxVERTICAL );
-
- wxString m_NetSortingOptionChoices[] = { _("Alphabetic"), _("Advanced") };
- int m_NetSortingOptionNChoices = sizeof( m_NetSortingOptionChoices ) / sizeof( wxString );
- m_NetSortingOption = new wxRadioBox( this, ID_NET_SORTING_OPTION, _("Net sorting:"), wxDefaultPosition, wxDefaultSize, m_NetSortingOptionNChoices, m_NetSortingOptionChoices, 1, wxRA_SPECIFY_COLS );
- m_NetSortingOption->SetSelection( 1 );
- m_NetSortingOption->SetToolTip( _("Nets can be sorted:\nBy alphabetic order\nBy number of pads in the net (advanced)") );
-
- m_NetSortOptSizer->Add( m_NetSortingOption, 0, wxALL|wxEXPAND, 5 );
-
- m_staticText5 = new wxStaticText( this, wxID_ANY, _("Filter"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText5->Wrap( -1 );
- m_NetSortOptSizer->Add( m_staticText5, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_NetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_NetSortOptSizer->Add( m_NetNameFilter, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_RightBoxSizer->Add( m_NetSortOptSizer, 1, wxEXPAND, 5 );
-
- m_OptionsBoxSizer->Add( m_RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_MainBoxSize->Add( m_OptionsBoxSizer, 0, 0, 5 );
-
- wxBoxSizer* m_NetAndLayersLiastBoxSizer;
- m_NetAndLayersLiastBoxSizer = new wxBoxSizer( wxVERTICAL );
-
- m_staticText2 = new wxStaticText( this, wxID_ANY, _("Net:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText2->Wrap( -1 );
- m_NetAndLayersLiastBoxSizer->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_ListNetNameSelection = new wxListBox( this, ID_NETNAME_SELECTION, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- m_NetAndLayersLiastBoxSizer->Add( m_ListNetNameSelection, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_staticText3 = new wxStaticText( this, wxID_ANY, _("Layer:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText3->Wrap( -1 );
- m_NetAndLayersLiastBoxSizer->Add( m_staticText3, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_LayerSelectionCtrl = new wxListBox( this, ID_LAYER_CHOICE, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- m_NetAndLayersLiastBoxSizer->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_MainBoxSize->Add( m_NetAndLayersLiastBoxSizer, 0, wxEXPAND, 5 );
-
- this->SetSizer( m_MainBoxSize );
- this->Layout();
-}
-
-dialog_copper_zone_base::~dialog_copper_zone_base()
-{
-}
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Apr 16 2008)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_copper_zones_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+BEGIN_EVENT_TABLE( dialog_copper_zone_base, wxDialog )
+ EVT_INIT_DIALOG( dialog_copper_zone_base::_wxFB_OnInitDialog )
+ EVT_RADIOBOX( wxID_PADS_IN_ZONE_OPTIONS, dialog_copper_zone_base::_wxFB_OnPadsInZoneClick )
+ EVT_BUTTON( wxID_BUTTON_EXPORT, dialog_copper_zone_base::_wxFB_ExportSetupToOtherCopperZones )
+ EVT_BUTTON( wxID_OK, dialog_copper_zone_base::_wxFB_OnButtonOkClick )
+ EVT_BUTTON( wxID_CANCEL, dialog_copper_zone_base::_wxFB_OnButtonCancelClick )
+ EVT_RADIOBOX( ID_NET_SORTING_OPTION, dialog_copper_zone_base::_wxFB_OnNetSortingOptionSelected )
+END_EVENT_TABLE()
+
+dialog_copper_zone_base::dialog_copper_zone_base( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* m_MainBoxSize;
+ m_MainBoxSize = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* m_OptionsBoxSizer;
+ m_OptionsBoxSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxStaticBoxSizer* m_ExportableSetupSizer;
+ m_ExportableSetupSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Zone Setup:") ), wxHORIZONTAL );
+
+ wxBoxSizer* m_LeftBoxSizer;
+ m_LeftBoxSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* m_FillOptionsBox;
+ m_FillOptionsBox = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Zone Fill Options:") ), wxVERTICAL );
+
+ wxString m_GridCtrlChoices[] = { _("0.00000"), _("0.00000"), _("0.00000"), _("0.00000"), _("No grid (For tests only!)") };
+ int m_GridCtrlNChoices = sizeof( m_GridCtrlChoices ) / sizeof( wxString );
+ m_GridCtrl = new wxRadioBox( this, ID_RADIOBOX_GRID_SELECTION, _("Grid Size for Filling:"), wxDefaultPosition, wxDefaultSize, m_GridCtrlNChoices, m_GridCtrlChoices, 1, wxRA_SPECIFY_COLS );
+ m_GridCtrl->SetSelection( 4 );
+ m_FillOptionsBox->Add( m_GridCtrl, 0, wxALL|wxEXPAND, 5 );
+
+ wxString m_PadInZoneOptChoices[] = { _("Include pads"), _("Thermal relief"), _("Exclude pads") };
+ int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString );
+ m_PadInZoneOpt = new wxRadioBox( this, wxID_PADS_IN_ZONE_OPTIONS, _("Pad in Zone:"), wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 1, wxRA_SPECIFY_COLS );
+ m_PadInZoneOpt->SetSelection( 1 );
+ m_FillOptionsBox->Add( m_PadInZoneOpt, 0, wxALL|wxEXPAND, 5 );
+
+ wxStaticBoxSizer* m_ThermalShapesParamsSizer;
+ m_ThermalShapesParamsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Thermal Reliefs Parameters") ), wxVERTICAL );
+
+ m_AntipadSizeText = new wxStaticText( this, wxID_ANY, _("Antipad Size"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_AntipadSizeText->Wrap( -1 );
+ m_ThermalShapesParamsSizer->Add( m_AntipadSizeText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_AntipadSizeValue = new wxTextCtrl( this, wxID_ANTIPAD_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_AntipadSizeValue->SetToolTip( _("Define the gap around the pad") );
+
+ m_ThermalShapesParamsSizer->Add( m_AntipadSizeValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_CopperBridgeWidthText = new wxStaticText( this, wxID_ANY, _("Copper Width"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_CopperBridgeWidthText->Wrap( -1 );
+ m_ThermalShapesParamsSizer->Add( m_CopperBridgeWidthText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_CopperWidthValue = new wxTextCtrl( this, wxID_COPPER_BRIDGE_VALUE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_CopperWidthValue->SetToolTip( _("Define the tickness of copper in thermal reliefs") );
+
+ m_ThermalShapesParamsSizer->Add( m_CopperWidthValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_FillOptionsBox->Add( m_ThermalShapesParamsSizer, 0, wxEXPAND, 5 );
+
+ m_LeftBoxSizer->Add( m_FillOptionsBox, 1, wxEXPAND, 5 );
+
+ m_ExportableSetupSizer->Add( m_LeftBoxSizer, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ m_ExportableSetupSizer->Add( 5, 5, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* m_MiddleBox;
+ m_MiddleBox = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* m_MiddleBoxSizer;
+ m_MiddleBoxSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* m_OutilinesBoxOpt;
+ m_OutilinesBoxOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Outlines Options:") ), wxVERTICAL );
+
+ wxString m_OrientEdgesOptChoices[] = { _("Any"), _("H , V and 45 deg") };
+ int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
+ m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone edges orient:"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS );
+ m_OrientEdgesOpt->SetSelection( 0 );
+ m_OutilinesBoxOpt->Add( m_OrientEdgesOpt, 0, wxALL|wxEXPAND, 5 );
+
+ wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched outline"), _("Full hatched") };
+ int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
+ m_OutlineAppearanceCtrl = new wxRadioBox( this, ID_RADIOBOX_OUTLINES_OPTION, _("Outlines Appearance"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS );
+ m_OutlineAppearanceCtrl->SetSelection( 1 );
+ m_OutlineAppearanceCtrl->SetToolTip( _("Choose how a zone outline is displayed\n- Single line\n- Short hatching\n- Full zone area hatched") );
+
+ m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxEXPAND, 5 );
+
+ wxString m_ArcApproximationOptChoices[] = { _("16 segments / 360 deg"), _("32 segments / 360 deg") };
+ int m_ArcApproximationOptNChoices = sizeof( m_ArcApproximationOptChoices ) / sizeof( wxString );
+ m_ArcApproximationOpt = new wxRadioBox( this, wxID_ARC_APPROX, _("Arcs Approximation:"), wxDefaultPosition, wxDefaultSize, m_ArcApproximationOptNChoices, m_ArcApproximationOptChoices, 1, wxRA_SPECIFY_COLS );
+ m_ArcApproximationOpt->SetSelection( 1 );
+ m_ArcApproximationOpt->SetToolTip( _("Number of segments to approximate a circle in filling calculations.\n16 segment is faster to calculate and when redraw screen.\n32 segment give a better quality") );
+
+ m_OutilinesBoxOpt->Add( m_ArcApproximationOpt, 0, wxALL|wxEXPAND, 5 );
+
+ wxStaticBoxSizer* m_OthersOptionsSizer;
+ m_OthersOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Others Options:") ), wxVERTICAL );
+
+ m_ShowFilledAreasInSketchOpt = new wxCheckBox( this, wxID_ANY, _("Show filled areas in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
+
+ m_ShowFilledAreasInSketchOpt->SetToolTip( _("If enabled, filled areas in is this zone will be displayed as non filled polygons.\nIf disabled, filled areas in is this zone will be displayed as \"solid\" areas (normal mode).") );
+
+ m_OthersOptionsSizer->Add( m_ShowFilledAreasInSketchOpt, 0, wxALL, 5 );
+
+ m_ClearanceValueTitle = new wxStaticText( this, wxID_ANY, _("Zone clearance value (mm):"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ClearanceValueTitle->Wrap( -1 );
+ m_OthersOptionsSizer->Add( m_ClearanceValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_ZoneClearanceCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_OthersOptionsSizer->Add( m_ZoneClearanceCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_OutilinesBoxOpt->Add( m_OthersOptionsSizer, 1, wxEXPAND, 5 );
+
+ m_MiddleBoxSizer->Add( m_OutilinesBoxOpt, 1, wxEXPAND, 5 );
+
+ m_ExportSetupButton = new wxButton( this, wxID_BUTTON_EXPORT, _("Export to others zones"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ExportSetupButton->SetToolTip( _("Export this zone setup to all others copper zones") );
+
+ m_MiddleBoxSizer->Add( m_ExportSetupButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_MiddleBox->Add( m_MiddleBoxSizer, 0, 0, 5 );
+
+ m_ExportableSetupSizer->Add( m_MiddleBox, 1, wxEXPAND, 5 );
+
+ m_OptionsBoxSizer->Add( m_ExportableSetupSizer, 1, wxEXPAND, 5 );
+
+
+ m_OptionsBoxSizer->Add( 0, 0, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* m_RightBoxSizer;
+ m_RightBoxSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_OkButton = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_OkButton->SetDefault();
+ m_RightBoxSizer->Add( m_OkButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_ButtonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_RightBoxSizer->Add( m_ButtonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+
+ m_RightBoxSizer->Add( 5, 20, 0, wxEXPAND, 5 );
+
+ wxStaticBoxSizer* m_NetSortOptSizer;
+ m_NetSortOptSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Nets Display Options:") ), wxVERTICAL );
+
+ wxString m_NetSortingOptionChoices[] = { _("Alphabetic"), _("Advanced") };
+ int m_NetSortingOptionNChoices = sizeof( m_NetSortingOptionChoices ) / sizeof( wxString );
+ m_NetSortingOption = new wxRadioBox( this, ID_NET_SORTING_OPTION, _("Net sorting:"), wxDefaultPosition, wxDefaultSize, m_NetSortingOptionNChoices, m_NetSortingOptionChoices, 1, wxRA_SPECIFY_COLS );
+ m_NetSortingOption->SetSelection( 1 );
+ m_NetSortingOption->SetToolTip( _("Nets can be sorted:\nBy alphabetic order\nBy number of pads in the net (advanced)") );
+
+ m_NetSortOptSizer->Add( m_NetSortingOption, 0, wxALL|wxEXPAND, 5 );
+
+ m_staticText5 = new wxStaticText( this, wxID_ANY, _("Filter"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText5->Wrap( -1 );
+ m_NetSortOptSizer->Add( m_staticText5, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_NetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_NetSortOptSizer->Add( m_NetNameFilter, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_RightBoxSizer->Add( m_NetSortOptSizer, 1, wxEXPAND, 5 );
+
+ m_OptionsBoxSizer->Add( m_RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_MainBoxSize->Add( m_OptionsBoxSizer, 0, 0, 5 );
+
+ wxBoxSizer* m_NetAndLayersLiastBoxSizer;
+ m_NetAndLayersLiastBoxSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText2 = new wxStaticText( this, wxID_ANY, _("Net:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText2->Wrap( -1 );
+ m_NetAndLayersLiastBoxSizer->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_ListNetNameSelection = new wxListBox( this, ID_NETNAME_SELECTION, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ m_NetAndLayersLiastBoxSizer->Add( m_ListNetNameSelection, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticText3 = new wxStaticText( this, wxID_ANY, _("Layer:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText3->Wrap( -1 );
+ m_NetAndLayersLiastBoxSizer->Add( m_staticText3, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_LayerSelectionCtrl = new wxListBox( this, ID_LAYER_CHOICE, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ m_NetAndLayersLiastBoxSizer->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_MainBoxSize->Add( m_NetAndLayersLiastBoxSizer, 0, wxEXPAND, 5 );
+
+ this->SetSizer( m_MainBoxSize );
+ this->Layout();
+}
+
+dialog_copper_zone_base::~dialog_copper_zone_base()
+{
+}
diff --git a/pcbnew/dialog_copper_zones_base.fbp b/pcbnew/dialog_copper_zones_base.fbp
index 43e10bf727..af7543a741 100644
--- a/pcbnew/dialog_copper_zones_base.fbp
+++ b/pcbnew/dialog_copper_zones_base.fbp
@@ -1,1423 +1,1423 @@
-
-
-
-
-
+
+
+
+
+
+ C++
+ 1
+ UTF-8
+ table
+ dialog_copper_zones_base
+ 1000
+ none
+ 1
+ dialog_copper_zones_base
+
+ .
+
+ 1
+ 1
+ 0
+
+
+
+
+ 1
+
+
+
+ 0
+ wxID_ANY
+
+
+ dialog_copper_zone_base
+
+ 545,493
+ wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
+
+ Fill Zones Options
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnInitDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ m_MainBoxSize
+ wxVERTICAL
+ none
+
+ 5
+
+ 0
+
+
+ m_OptionsBoxSizer
+ wxHORIZONTAL
+ none
+
+ 5
+ wxEXPAND
+ 1
+
+ wxID_ANY
+ Zone Setup:
+
+ m_ExportableSetupSizer
+ wxHORIZONTAL
+ none
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL
+ 0
+
+
+ m_LeftBoxSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND
+ 1
+
+ wxID_ANY
+ Zone Fill Options:
+
+ m_FillOptionsBox
+ wxVERTICAL
+ none
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+
+ "0.00000" "0.00000" "0.00000" "0.00000" "No grid (For tests only!)"
+
+ 1
+
+
+ 0
+ ID_RADIOBOX_GRID_SELECTION
+ Grid Size for Filling:
+ 1
+
+
+ m_GridCtrl
+ protected
+
+ 4
+
+ wxRA_SPECIFY_COLS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+
+ "Include pads" "Thermal relief" "Exclude pads"
+
+ 1
+
+
+ 0
+ wxID_PADS_IN_ZONE_OPTIONS
+ Pad in Zone:
+ 1
+
+
+ m_PadInZoneOpt
+ protected
+
+ 1
+
+ wxRA_SPECIFY_COLS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnPadsInZoneClick
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ wxID_ANY
+ Thermal Reliefs Parameters
+
+ m_ThermalShapesParamsSizer
+ wxVERTICAL
+ none
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Antipad Size
+
+
+ m_AntipadSizeText
+ protected
+
+
+
+
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANTIPAD_SIZE
+
+ 0
+
+ m_AntipadSizeValue
+ protected
+
+
+
+
+ Define the gap around the pad
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Copper Width
+
+
+ m_CopperBridgeWidthText
+ protected
+
+
+
+
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_COPPER_BRIDGE_VALUE
+
+ 0
+
+ m_CopperWidthValue
+ protected
+
+
+
+
+ Define the tickness of copper in thermal reliefs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 5
+ protected
+ 5
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+
+ m_MiddleBox
+ wxVERTICAL
+ none
+
+ 5
+
+ 0
+
+
+ m_MiddleBoxSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND
+ 1
+
+ wxID_ANY
+ Outlines Options:
+
+ m_OutilinesBoxOpt
+ wxVERTICAL
+ none
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+
+ "Any" "H , V and 45 deg"
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Zone edges orient:
+ 1
+
+
+ m_OrientEdgesOpt
+ protected
+
+ 0
+
+ wxRA_SPECIFY_COLS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+
+ "Line" "Hatched outline" "Full hatched"
+
+ 1
+
+
+ 0
+ ID_RADIOBOX_OUTLINES_OPTION
+ Outlines Appearance
+ 1
+
+
+ m_OutlineAppearanceCtrl
+ protected
+
+ 1
+
+ wxRA_SPECIFY_COLS
+
+ Choose how a zone outline is displayed
- Single line
- Short hatching
- Full zone area hatched
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+
+ "16 segments / 360 deg" "32 segments / 360 deg"
+
+ 1
+
+
+ 0
+ wxID_ARC_APPROX
+ Arcs Approximation:
+ 1
+
+
+ m_ArcApproximationOpt
+ protected
+
+ 1
+
+ wxRA_SPECIFY_COLS
+
+ Number of segments to approximate a circle in filling calculations.
16 segment is faster to calculate and when redraw screen.
32 segment give a better quality
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ wxID_ANY
+ Others Options:
+
+ m_OthersOptionsSizer
+ wxVERTICAL
+ none
+
+
+ 5
+ wxALL
+ 0
+
+
+ 0
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Show filled areas in sketch mode
+
+
+ m_ShowFilledAreasInSketchOpt
+ protected
+
+
+
+
+ If enabled, filled areas in is this zone will be displayed as non filled polygons.
If disabled, filled areas in is this zone will be displayed as "solid" areas (normal mode).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Zone clearance value (mm):
+
+
+ m_ClearanceValueTitle
+ protected
+
+
+
+
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+
+ 0
+
+ m_ZoneClearanceCtrl
+ protected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL
+ 0
+
+
+
+ 0
+ 1
+
+
+ 0
+ wxID_BUTTON_EXPORT
+ Export to others zones
+
+
+ m_ExportSetupButton
+ protected
+
+
+
+
+ Export this zone setup to all others copper zones
+
+
+
+ ExportSetupToOtherCopperZones
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+
+ m_RightBoxSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL
+ 0
+
+
+
+ 1
+ 1
+
+
+ 0
+ wxID_OK
+ Ok
+
+
+ m_OkButton
+ protected
+
+
+
+
+
+
+
+
+ OnButtonOkClick
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL
+ 0
+
+
+
+ 0
+ 1
+
+
+ 0
+ wxID_CANCEL
+ Cancel
+
+
+ m_ButtonCancel
+ protected
+
+
+
+
+
+
+
+
+ OnButtonCancelClick
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 20
+ protected
+ 5
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ wxID_ANY
+ Nets Display Options:
+
+ m_NetSortOptSizer
+ wxVERTICAL
+ none
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+
+ "Alphabetic" "Advanced"
+
+ 1
+
+
+ 0
+ ID_NET_SORTING_OPTION
+ Net sorting:
+ 1
+
+
+ m_NetSortingOption
+ protected
+
+ 1
+
+ wxRA_SPECIFY_COLS
+
+ Nets can be sorted:
By alphabetic order
By number of pads in the net (advanced)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OnNetSortingOptionSelected
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Filter
+
+
+ m_staticText5
+ protected
+
+
+
+
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ ID_TEXTCTRL_NETNAMES_FILTER
+
+ 0
+
+ m_NetNameFilter
+ protected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+
+ m_NetAndLayersLiastBoxSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Net:
+
+
+ m_staticText2
+ protected
+
+
+
+
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+
+
+
+ 1
+
+
+ 0
+ ID_NETNAME_SELECTION
+
+
+ m_ListNetNameSelection
+ protected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Layer:
+
+
+ m_staticText3
+ protected
+
+
+
+
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+
+
+
+ 1
+
+
+ 0
+ ID_LAYER_CHOICE
+
+
+ m_LayerSelectionCtrl
+ protected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pcbnew/dialog_copper_zones_base.h b/pcbnew/dialog_copper_zones_base.h
index 1b163d2980..23df121eb4 100644
--- a/pcbnew/dialog_copper_zones_base.h
+++ b/pcbnew/dialog_copper_zones_base.h
@@ -1,104 +1,104 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Apr 16 2008)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#ifndef __dialog_copper_zones_base__
-#define __dialog_copper_zones_base__
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-///////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class dialog_copper_zone_base
-///////////////////////////////////////////////////////////////////////////////
-class dialog_copper_zone_base : public wxDialog
-{
- DECLARE_EVENT_TABLE()
- private:
-
- // Private event handlers
- void _wxFB_OnInitDialog( wxInitDialogEvent& event ){ OnInitDialog( event ); }
- void _wxFB_OnPadsInZoneClick( wxCommandEvent& event ){ OnPadsInZoneClick( event ); }
- void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); }
- void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); }
- void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); }
- void _wxFB_OnNetSortingOptionSelected( wxCommandEvent& event ){ OnNetSortingOptionSelected( event ); }
-
-
- protected:
- enum
- {
- ID_RADIOBOX_GRID_SELECTION = 1000,
- wxID_PADS_IN_ZONE_OPTIONS,
- wxID_ANTIPAD_SIZE,
- wxID_COPPER_BRIDGE_VALUE,
- ID_RADIOBOX_OUTLINES_OPTION,
- wxID_ARC_APPROX,
- wxID_BUTTON_EXPORT,
- ID_NET_SORTING_OPTION,
- ID_TEXTCTRL_NETNAMES_FILTER,
- ID_NETNAME_SELECTION,
- ID_LAYER_CHOICE,
- };
-
- wxRadioBox* m_GridCtrl;
- wxRadioBox* m_PadInZoneOpt;
- wxStaticText* m_AntipadSizeText;
- wxTextCtrl* m_AntipadSizeValue;
- wxStaticText* m_CopperBridgeWidthText;
- wxTextCtrl* m_CopperWidthValue;
-
- wxRadioBox* m_OrientEdgesOpt;
- wxRadioBox* m_OutlineAppearanceCtrl;
- wxRadioBox* m_ArcApproximationOpt;
- wxCheckBox* m_ShowFilledAreasInSketchOpt;
- wxStaticText* m_ClearanceValueTitle;
- wxTextCtrl* m_ZoneClearanceCtrl;
- wxButton* m_ExportSetupButton;
-
- wxButton* m_OkButton;
- wxButton* m_ButtonCancel;
-
- wxRadioBox* m_NetSortingOption;
- wxStaticText* m_staticText5;
- wxTextCtrl* m_NetNameFilter;
- wxStaticText* m_staticText2;
- wxListBox* m_ListNetNameSelection;
- wxStaticText* m_staticText3;
- wxListBox* m_LayerSelectionCtrl;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnInitDialog( wxInitDialogEvent& event ){ event.Skip(); }
- virtual void OnPadsInZoneClick( wxCommandEvent& event ){ event.Skip(); }
- virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ){ event.Skip(); }
- virtual void OnButtonOkClick( wxCommandEvent& event ){ event.Skip(); }
- virtual void OnButtonCancelClick( wxCommandEvent& event ){ event.Skip(); }
- virtual void OnNetSortingOptionSelected( wxCommandEvent& event ){ event.Skip(); }
-
-
- public:
- dialog_copper_zone_base( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Fill Zones Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 545,493 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
- ~dialog_copper_zone_base();
-
-};
-
-#endif //__dialog_copper_zones_base__
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Apr 16 2008)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __dialog_copper_zones_base__
+#define __dialog_copper_zones_base__
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class dialog_copper_zone_base
+///////////////////////////////////////////////////////////////////////////////
+class dialog_copper_zone_base : public wxDialog
+{
+ DECLARE_EVENT_TABLE()
+ private:
+
+ // Private event handlers
+ void _wxFB_OnInitDialog( wxInitDialogEvent& event ){ OnInitDialog( event ); }
+ void _wxFB_OnPadsInZoneClick( wxCommandEvent& event ){ OnPadsInZoneClick( event ); }
+ void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); }
+ void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); }
+ void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); }
+ void _wxFB_OnNetSortingOptionSelected( wxCommandEvent& event ){ OnNetSortingOptionSelected( event ); }
+
+
+ protected:
+ enum
+ {
+ ID_RADIOBOX_GRID_SELECTION = 1000,
+ wxID_PADS_IN_ZONE_OPTIONS,
+ wxID_ANTIPAD_SIZE,
+ wxID_COPPER_BRIDGE_VALUE,
+ ID_RADIOBOX_OUTLINES_OPTION,
+ wxID_ARC_APPROX,
+ wxID_BUTTON_EXPORT,
+ ID_NET_SORTING_OPTION,
+ ID_TEXTCTRL_NETNAMES_FILTER,
+ ID_NETNAME_SELECTION,
+ ID_LAYER_CHOICE,
+ };
+
+ wxRadioBox* m_GridCtrl;
+ wxRadioBox* m_PadInZoneOpt;
+ wxStaticText* m_AntipadSizeText;
+ wxTextCtrl* m_AntipadSizeValue;
+ wxStaticText* m_CopperBridgeWidthText;
+ wxTextCtrl* m_CopperWidthValue;
+
+ wxRadioBox* m_OrientEdgesOpt;
+ wxRadioBox* m_OutlineAppearanceCtrl;
+ wxRadioBox* m_ArcApproximationOpt;
+ wxCheckBox* m_ShowFilledAreasInSketchOpt;
+ wxStaticText* m_ClearanceValueTitle;
+ wxTextCtrl* m_ZoneClearanceCtrl;
+ wxButton* m_ExportSetupButton;
+
+ wxButton* m_OkButton;
+ wxButton* m_ButtonCancel;
+
+ wxRadioBox* m_NetSortingOption;
+ wxStaticText* m_staticText5;
+ wxTextCtrl* m_NetNameFilter;
+ wxStaticText* m_staticText2;
+ wxListBox* m_ListNetNameSelection;
+ wxStaticText* m_staticText3;
+ wxListBox* m_LayerSelectionCtrl;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnInitDialog( wxInitDialogEvent& event ){ event.Skip(); }
+ virtual void OnPadsInZoneClick( wxCommandEvent& event ){ event.Skip(); }
+ virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ){ event.Skip(); }
+ virtual void OnButtonOkClick( wxCommandEvent& event ){ event.Skip(); }
+ virtual void OnButtonCancelClick( wxCommandEvent& event ){ event.Skip(); }
+ virtual void OnNetSortingOptionSelected( wxCommandEvent& event ){ event.Skip(); }
+
+
+ public:
+ dialog_copper_zone_base( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Fill Zones Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 545,493 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~dialog_copper_zone_base();
+
+};
+
+#endif //__dialog_copper_zones_base__
diff --git a/pcbnew/dialog_non_copper_zones_properties_base.cpp b/pcbnew/dialog_non_copper_zones_properties_base.cpp
index b6f4b5ffce..faad72c93b 100644
--- a/pcbnew/dialog_non_copper_zones_properties_base.cpp
+++ b/pcbnew/dialog_non_copper_zones_properties_base.cpp
@@ -1,69 +1,69 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Apr 16 2008)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#include "dialog_non_copper_zones_properties_base.h"
-
-///////////////////////////////////////////////////////////////////////////
-
-BEGIN_EVENT_TABLE( DialogNonCopperZonesPropertiesBase, wxDialog )
- EVT_INIT_DIALOG( DialogNonCopperZonesPropertiesBase::_wxFB_InitDialog )
- EVT_BUTTON( wxID_OK, DialogNonCopperZonesPropertiesBase::_wxFB_OnOkClick )
- EVT_BUTTON( wxID_CANCEL, DialogNonCopperZonesPropertiesBase::_wxFB_OnCancelClick )
-END_EVENT_TABLE()
-
-DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* m_MainSizer;
- m_MainSizer = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* m_UpperSizer;
- m_UpperSizer = new wxBoxSizer( wxHORIZONTAL );
-
- wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched Outline"), _("Full Hatched") };
- int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
- m_OutlineAppearanceCtrl = new wxRadioBox( this, wxID_ANY, _("Outlines Appearence"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS );
- m_OutlineAppearanceCtrl->SetSelection( 1 );
- m_UpperSizer->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- wxString m_OrientEdgesOptChoices[] = { _("Any"), _("H, V and 45 deg") };
- int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
- m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone Edges Orient"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS );
- m_OrientEdgesOpt->SetSelection( 0 );
- m_UpperSizer->Add( m_OrientEdgesOpt, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBoxSizer* m_ButtonsSizer;
- m_ButtonsSizer = new wxBoxSizer( wxVERTICAL );
-
- m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
- m_buttonOk->SetDefault();
- m_ButtonsSizer->Add( m_buttonOk, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
- m_ButtonsSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_UpperSizer->Add( m_ButtonsSizer, 1, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
-
- m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Layer selection:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextLayerSelection->Wrap( -1 );
- m_MainSizer->Add( m_staticTextLayerSelection, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_LayerSelectionCtrl = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
- m_MainSizer->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- this->SetSizer( m_MainSizer );
- this->Layout();
-
- this->Centre( wxBOTH );
-}
-
-DialogNonCopperZonesPropertiesBase::~DialogNonCopperZonesPropertiesBase()
-{
-}
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Apr 16 2008)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_non_copper_zones_properties_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+BEGIN_EVENT_TABLE( DialogNonCopperZonesPropertiesBase, wxDialog )
+ EVT_INIT_DIALOG( DialogNonCopperZonesPropertiesBase::_wxFB_InitDialog )
+ EVT_BUTTON( wxID_OK, DialogNonCopperZonesPropertiesBase::_wxFB_OnOkClick )
+ EVT_BUTTON( wxID_CANCEL, DialogNonCopperZonesPropertiesBase::_wxFB_OnCancelClick )
+END_EVENT_TABLE()
+
+DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* m_MainSizer;
+ m_MainSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* m_UpperSizer;
+ m_UpperSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched Outline"), _("Full Hatched") };
+ int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
+ m_OutlineAppearanceCtrl = new wxRadioBox( this, wxID_ANY, _("Outlines Appearence"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS );
+ m_OutlineAppearanceCtrl->SetSelection( 1 );
+ m_UpperSizer->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxString m_OrientEdgesOptChoices[] = { _("Any"), _("H, V and 45 deg") };
+ int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
+ m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone Edges Orient"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS );
+ m_OrientEdgesOpt->SetSelection( 0 );
+ m_UpperSizer->Add( m_OrientEdgesOpt, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ wxBoxSizer* m_ButtonsSizer;
+ m_ButtonsSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_buttonOk->SetDefault();
+ m_ButtonsSizer->Add( m_buttonOk, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ButtonsSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_UpperSizer->Add( m_ButtonsSizer, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
+
+ m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Layer selection:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextLayerSelection->Wrap( -1 );
+ m_MainSizer->Add( m_staticTextLayerSelection, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_LayerSelectionCtrl = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ m_MainSizer->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ this->SetSizer( m_MainSizer );
+ this->Layout();
+
+ this->Centre( wxBOTH );
+}
+
+DialogNonCopperZonesPropertiesBase::~DialogNonCopperZonesPropertiesBase()
+{
+}
diff --git a/pcbnew/dialog_non_copper_zones_properties_base.fbp b/pcbnew/dialog_non_copper_zones_properties_base.fbp
index 730503ba64..9d9d02bfef 100644
--- a/pcbnew/dialog_non_copper_zones_properties_base.fbp
+++ b/pcbnew/dialog_non_copper_zones_properties_base.fbp
@@ -1,418 +1,418 @@
-
-
-
-
-
- C++
- 1
- UTF-8
- table
- dialog_non_copper_zones_properties_base
- 1000
- none
- 1
- dialog_non_copper_zones_properties_base
-
- .
-
- 1
- 1
- 0
-
-
- wxBOTH
-
- 1
-
-
-
- 0
- wxID_ANY
-
-
- DialogNonCopperZonesPropertiesBase
-
- 366,221
- wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
-
- Non Copper Zones Properties
-
-
-
- wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER
-
-
-
-
-
-
-
-
-
- InitDialog
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- m_MainSizer
- wxVERTICAL
- none
-
- 5
- wxEXPAND|wxALIGN_CENTER_HORIZONTAL
- 1
-
-
- m_UpperSizer
- wxHORIZONTAL
- none
-
- 5
- wxALL|wxALIGN_CENTER_VERTICAL
- 0
-
-
- "Line" "Hatched Outline" "Full Hatched"
-
- 1
-
-
- 0
- wxID_ANY
- Outlines Appearence
- 1
-
-
- m_OutlineAppearanceCtrl
- protected
-
- 1
-
- wxRA_SPECIFY_COLS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5
- wxALL|wxALIGN_CENTER_VERTICAL
- 0
-
-
- "Any" "H, V and 45 deg"
-
- 1
-
-
- 0
- wxID_ANY
- Zone Edges Orient
- 1
-
-
- m_OrientEdgesOpt
- protected
-
- 0
-
- wxRA_SPECIFY_COLS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL
- 1
-
-
- m_ButtonsSizer
- wxVERTICAL
- none
-
- 5
- wxALL|wxALIGN_CENTER_HORIZONTAL
- 0
-
-
-
- 1
- 1
-
-
- 0
- wxID_OK
- OK
-
-
- m_buttonOk
- protected
-
-
-
-
-
-
-
-
- OnOkClick
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5
- wxALL|wxALIGN_CENTER_HORIZONTAL
- 0
-
-
-
- 0
- 1
-
-
- 0
- wxID_CANCEL
- Cancel
-
-
- m_buttonCancel
- protected
-
-
-
-
-
-
-
-
- OnCancelClick
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5
- wxTOP|wxRIGHT|wxLEFT
- 0
-
-
-
- 1
-
-
- 0
- wxID_ANY
- Layer selection:
-
-
- m_staticTextLayerSelection
- protected
-
-
-
-
-
-
-
-
- -1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5
- wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
- 0
-
-
-
-
- 1
-
-
- 0
- wxID_ANY
-
-
- m_LayerSelectionCtrl
- protected
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ C++
+ 1
+ UTF-8
+ table
+ dialog_non_copper_zones_properties_base
+ 1000
+ none
+ 1
+ dialog_non_copper_zones_properties_base
+
+ .
+
+ 1
+ 1
+ 0
+
+
+ wxBOTH
+
+ 1
+
+
+
+ 0
+ wxID_ANY
+
+
+ DialogNonCopperZonesPropertiesBase
+
+ 366,221
+ wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
+
+ Non Copper Zones Properties
+
+
+
+ wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER
+
+
+
+
+
+
+
+
+
+ InitDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ m_MainSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_HORIZONTAL
+ 1
+
+
+ m_UpperSizer
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALL|wxALIGN_CENTER_VERTICAL
+ 0
+
+
+ "Line" "Hatched Outline" "Full Hatched"
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Outlines Appearence
+ 1
+
+
+ m_OutlineAppearanceCtrl
+ protected
+
+ 1
+
+ wxRA_SPECIFY_COLS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_VERTICAL
+ 0
+
+
+ "Any" "H, V and 45 deg"
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Zone Edges Orient
+ 1
+
+
+ m_OrientEdgesOpt
+ protected
+
+ 0
+
+ wxRA_SPECIFY_COLS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 1
+
+
+ m_ButtonsSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL
+ 0
+
+
+
+ 1
+ 1
+
+
+ 0
+ wxID_OK
+ OK
+
+
+ m_buttonOk
+ protected
+
+
+
+
+
+
+
+
+ OnOkClick
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL
+ 0
+
+
+
+ 0
+ 1
+
+
+ 0
+ wxID_CANCEL
+ Cancel
+
+
+ m_buttonCancel
+ protected
+
+
+
+
+
+
+
+
+ OnCancelClick
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+ Layer selection:
+
+
+ m_staticTextLayerSelection
+ protected
+
+
+
+
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+
+
+
+ 1
+
+
+ 0
+ wxID_ANY
+
+
+ m_LayerSelectionCtrl
+ protected
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pcbnew/dialog_non_copper_zones_properties_base.h b/pcbnew/dialog_non_copper_zones_properties_base.h
index 4e5d5012c2..0bf36f0c1a 100644
--- a/pcbnew/dialog_non_copper_zones_properties_base.h
+++ b/pcbnew/dialog_non_copper_zones_properties_base.h
@@ -1,61 +1,61 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Apr 16 2008)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#ifndef __dialog_non_copper_zones_properties_base__
-#define __dialog_non_copper_zones_properties_base__
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-///////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class DialogNonCopperZonesPropertiesBase
-///////////////////////////////////////////////////////////////////////////////
-class DialogNonCopperZonesPropertiesBase : public wxDialog
-{
- DECLARE_EVENT_TABLE()
- private:
-
- // Private event handlers
- void _wxFB_InitDialog( wxInitDialogEvent& event ){ InitDialog( event ); }
- void _wxFB_OnOkClick( wxCommandEvent& event ){ OnOkClick( event ); }
- void _wxFB_OnCancelClick( wxCommandEvent& event ){ OnCancelClick( event ); }
-
-
- protected:
- wxRadioBox* m_OutlineAppearanceCtrl;
- wxRadioBox* m_OrientEdgesOpt;
- wxButton* m_buttonOk;
- wxButton* m_buttonCancel;
- wxStaticText* m_staticTextLayerSelection;
- wxListBox* m_LayerSelectionCtrl;
-
- // Virtual event handlers, overide them in your derived class
- virtual void InitDialog( wxInitDialogEvent& event ){ event.Skip(); }
- virtual void OnOkClick( wxCommandEvent& event ){ event.Skip(); }
- virtual void OnCancelClick( wxCommandEvent& event ){ event.Skip(); }
-
-
- public:
- DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 366,221 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER );
- ~DialogNonCopperZonesPropertiesBase();
-
-};
-
-#endif //__dialog_non_copper_zones_properties_base__
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Apr 16 2008)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __dialog_non_copper_zones_properties_base__
+#define __dialog_non_copper_zones_properties_base__
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DialogNonCopperZonesPropertiesBase
+///////////////////////////////////////////////////////////////////////////////
+class DialogNonCopperZonesPropertiesBase : public wxDialog
+{
+ DECLARE_EVENT_TABLE()
+ private:
+
+ // Private event handlers
+ void _wxFB_InitDialog( wxInitDialogEvent& event ){ InitDialog( event ); }
+ void _wxFB_OnOkClick( wxCommandEvent& event ){ OnOkClick( event ); }
+ void _wxFB_OnCancelClick( wxCommandEvent& event ){ OnCancelClick( event ); }
+
+
+ protected:
+ wxRadioBox* m_OutlineAppearanceCtrl;
+ wxRadioBox* m_OrientEdgesOpt;
+ wxButton* m_buttonOk;
+ wxButton* m_buttonCancel;
+ wxStaticText* m_staticTextLayerSelection;
+ wxListBox* m_LayerSelectionCtrl;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void InitDialog( wxInitDialogEvent& event ){ event.Skip(); }
+ virtual void OnOkClick( wxCommandEvent& event ){ event.Skip(); }
+ virtual void OnCancelClick( wxCommandEvent& event ){ event.Skip(); }
+
+
+ public:
+ DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 366,221 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER );
+ ~DialogNonCopperZonesPropertiesBase();
+
+};
+
+#endif //__dialog_non_copper_zones_properties_base__
diff --git a/pcbnew/zones_polygons_insulated_copper_islands.cpp b/pcbnew/zones_polygons_insulated_copper_islands.cpp
index bbb1ad25c6..40154981a6 100644
--- a/pcbnew/zones_polygons_insulated_copper_islands.cpp
+++ b/pcbnew/zones_polygons_insulated_copper_islands.cpp
@@ -1,153 +1,153 @@
-/////////////////////////////////////////////////////////////////////////////
-
-// Name: zones_polygons_insulated_copper_islands.cpp
-// Licence: GPL License
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef WX_PRECOMP
-#include "wx/wx.h"
-#endif
-
-
-// For compilers that support precompilation, includes "wx/wx.h".
-#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
-using namespace std;
-
-#include "fctsys.h"
-#include "gr_basic.h"
-
-#include "common.h"
-#include "pcbnew.h"
-#include "PolyLine.h"
-
-#include "zones.h"
-
-
-static void CalculateSubAreaBoundaryBox( EDA_Rect& aBbox,
- std::vector aPolysList,
- int aIndexStart,
- int aIndexEnd );
-
-/* Local variables */
-std::vector s_ListPoints; // list of coordinates of pads and vias on this layer and on this net.
-
-
-/***************************************************************************************/
-void ZONE_CONTAINER::Test_For_Copper_Island_And_Remove_Insulated_Islands( BOARD* aPcb )
-/***************************************************************************************/
-
-/**
- * Function Test_For_Copper_Island_And_Remove__Insulated_Islands
- * Remove insulated copper islands found in m_FilledPolysList.
- * @param aPcb = the board to analyse
- */
-{
- if( m_FilledPolysList.size() == 0 )
- return;
-
- // Build the list:
- s_ListPoints.clear();
- for( MODULE* module = aPcb->m_Modules; module; module = module->Next() )
- {
- for( D_PAD* pad = module->m_Pads; pad != NULL; pad = pad->Next() )
- {
- if( !pad->IsOnLayer( GetLayer() ) )
- continue;
-
- if( pad->GetNet() != GetNet() )
- continue;
-
- s_ListPoints.push_back( pad->m_Pos );
- }
- }
-
- for( TRACK* track = aPcb->m_Track; track; track = track->Next() )
- {
- if( !track->IsOnLayer( GetLayer() ) )
- continue;
- if( track->GetNet() != GetNet() )
- continue;
- s_ListPoints.push_back( track->m_Start );
- if( track->Type() != TYPEVIA )
- s_ListPoints.push_back( track->m_End );
- }
-
- // test if a point is inside
- unsigned indexstart = 0, indexend;
- bool connected = false;
- for( indexend = 0; indexend < m_FilledPolysList.size(); indexend++ )
- {
- if( m_FilledPolysList[indexend].end_contour ) // end of area found
- {
- EDA_Rect bbox;
- CalculateSubAreaBoundaryBox( bbox, m_FilledPolysList, indexstart, indexend );
- for( unsigned ic = 0; ic < s_ListPoints.size(); ic++ )
- {
- wxPoint pos = s_ListPoints[ic];
- if( !bbox.Inside( pos ) )
- continue;
- if( TestPointInsidePolygon( m_FilledPolysList, indexstart, indexend, pos.x, pos.y ) )
- {
- connected = true;
- break;
- }
- }
-
- if( connected ) // this polygon is connected: analyse next polygon
- {
- indexstart = indexend + 1; // indexstart points the first point of the next polygon
- connected = false;
- }
- else // Not connected: remove this polygon
- {
- m_FilledPolysList.erase(
- m_FilledPolysList.begin() + indexstart,
- m_FilledPolysList.begin() + indexend + 1 );
- indexend = indexstart; /* indexstart points the first point of the next polygon
- * because the current poly is removed */
- }
- }
- }
-}
-
-
-/******************************************************************/
-void CalculateSubAreaBoundaryBox( EDA_Rect& aBbox,
- std::vector aPolysList,
- int aIndexStart,
- int aIndexEnd )
-/******************************************************************/
-
-/** function CalculateSubAreaBoundaryBox
- * Calculates the bounding box of a polygon stored in a vector
- * @param aBbox = EDA_Rect to init as bounding box
- * @param aPolysList = set of CPolyPt that are the corners of one or more polygons
- * @param aIndexStart = index of the first corner of a polygon in aPolysList
- * @param aIndexEnd = index of the last corner of a polygon in aPolysList
- */
-{
- CPolyPt start_point, end_point;
-
- start_point = aPolysList[aIndexStart];
- end_point = start_point;
- for( int ii = aIndexStart; ii <= aIndexEnd; ii++ )
- {
- CPolyPt ptst = aPolysList[ii];
- if( start_point.x > ptst.x )
- start_point.x = ptst.x;
- if( start_point.y > ptst.y )
- start_point.y = ptst.y;
- if( end_point.x < ptst.x )
- end_point.x = ptst.x;
- if( end_point.y < ptst.y )
- end_point.y = ptst.y;
- }
-
- aBbox.SetOrigin( start_point.x, start_point.y );
- aBbox.SetEnd( wxPoint( end_point.x, end_point.y ) );
-}
+/////////////////////////////////////////////////////////////////////////////
+
+// Name: zones_polygons_insulated_copper_islands.cpp
+// Licence: GPL License
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef WX_PRECOMP
+#include "wx/wx.h"
+#endif
+
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+using namespace std;
+
+#include "fctsys.h"
+#include "gr_basic.h"
+
+#include "common.h"
+#include "pcbnew.h"
+#include "PolyLine.h"
+
+#include "zones.h"
+
+
+static void CalculateSubAreaBoundaryBox( EDA_Rect& aBbox,
+ std::vector aPolysList,
+ int aIndexStart,
+ int aIndexEnd );
+
+/* Local variables */
+std::vector s_ListPoints; // list of coordinates of pads and vias on this layer and on this net.
+
+
+/***************************************************************************************/
+void ZONE_CONTAINER::Test_For_Copper_Island_And_Remove_Insulated_Islands( BOARD* aPcb )
+/***************************************************************************************/
+
+/**
+ * Function Test_For_Copper_Island_And_Remove__Insulated_Islands
+ * Remove insulated copper islands found in m_FilledPolysList.
+ * @param aPcb = the board to analyse
+ */
+{
+ if( m_FilledPolysList.size() == 0 )
+ return;
+
+ // Build the list:
+ s_ListPoints.clear();
+ for( MODULE* module = aPcb->m_Modules; module; module = module->Next() )
+ {
+ for( D_PAD* pad = module->m_Pads; pad != NULL; pad = pad->Next() )
+ {
+ if( !pad->IsOnLayer( GetLayer() ) )
+ continue;
+
+ if( pad->GetNet() != GetNet() )
+ continue;
+
+ s_ListPoints.push_back( pad->m_Pos );
+ }
+ }
+
+ for( TRACK* track = aPcb->m_Track; track; track = track->Next() )
+ {
+ if( !track->IsOnLayer( GetLayer() ) )
+ continue;
+ if( track->GetNet() != GetNet() )
+ continue;
+ s_ListPoints.push_back( track->m_Start );
+ if( track->Type() != TYPEVIA )
+ s_ListPoints.push_back( track->m_End );
+ }
+
+ // test if a point is inside
+ unsigned indexstart = 0, indexend;
+ bool connected = false;
+ for( indexend = 0; indexend < m_FilledPolysList.size(); indexend++ )
+ {
+ if( m_FilledPolysList[indexend].end_contour ) // end of area found
+ {
+ EDA_Rect bbox;
+ CalculateSubAreaBoundaryBox( bbox, m_FilledPolysList, indexstart, indexend );
+ for( unsigned ic = 0; ic < s_ListPoints.size(); ic++ )
+ {
+ wxPoint pos = s_ListPoints[ic];
+ if( !bbox.Inside( pos ) )
+ continue;
+ if( TestPointInsidePolygon( m_FilledPolysList, indexstart, indexend, pos.x, pos.y ) )
+ {
+ connected = true;
+ break;
+ }
+ }
+
+ if( connected ) // this polygon is connected: analyse next polygon
+ {
+ indexstart = indexend + 1; // indexstart points the first point of the next polygon
+ connected = false;
+ }
+ else // Not connected: remove this polygon
+ {
+ m_FilledPolysList.erase(
+ m_FilledPolysList.begin() + indexstart,
+ m_FilledPolysList.begin() + indexend + 1 );
+ indexend = indexstart; /* indexstart points the first point of the next polygon
+ * because the current poly is removed */
+ }
+ }
+ }
+}
+
+
+/******************************************************************/
+void CalculateSubAreaBoundaryBox( EDA_Rect& aBbox,
+ std::vector aPolysList,
+ int aIndexStart,
+ int aIndexEnd )
+/******************************************************************/
+
+/** function CalculateSubAreaBoundaryBox
+ * Calculates the bounding box of a polygon stored in a vector
+ * @param aBbox = EDA_Rect to init as bounding box
+ * @param aPolysList = set of CPolyPt that are the corners of one or more polygons
+ * @param aIndexStart = index of the first corner of a polygon in aPolysList
+ * @param aIndexEnd = index of the last corner of a polygon in aPolysList
+ */
+{
+ CPolyPt start_point, end_point;
+
+ start_point = aPolysList[aIndexStart];
+ end_point = start_point;
+ for( int ii = aIndexStart; ii <= aIndexEnd; ii++ )
+ {
+ CPolyPt ptst = aPolysList[ii];
+ if( start_point.x > ptst.x )
+ start_point.x = ptst.x;
+ if( start_point.y > ptst.y )
+ start_point.y = ptst.y;
+ if( end_point.x < ptst.x )
+ end_point.x = ptst.x;
+ if( end_point.y < ptst.y )
+ end_point.y = ptst.y;
+ }
+
+ aBbox.SetOrigin( start_point.x, start_point.y );
+ aBbox.SetEnd( wxPoint( end_point.x, end_point.y ) );
+}
diff --git a/polygon/kbool/include/kbool/statusb.h b/polygon/kbool/include/kbool/statusb.h
index 6eea40d337..ea845df495 100644
--- a/polygon/kbool/include/kbool/statusb.h
+++ b/polygon/kbool/include/kbool/statusb.h
@@ -1,54 +1,54 @@
-/*! \file kbool/include/kbool/statusb.h
- \author Probably Klaas Holwerda
-
- Copyright: 2001-2004 (C) Probably Klaas Holwerda
-
- Licence: wxWidgets Licence
-
- RCS-ID: $Id: statusb.h,v 1.2 2006/12/15 21:00:06 titato Exp $
-*/
-
-/* @@(#) $Source: /cvsroot/wxart2d/wxArt2D/thirdparty/kbool/include/kbool/statusb.h,v $ $Revision: 1.2 $ $Date: 2006/12/15 21:00:06 $ */
-
-/*
-Program STATUSB.H
-Purpose Controls the statusbar of the application (header)
- This statusbar is a typical Windows statusbar
- For porting to another platform there must be a StatusBar class
- derived from this.
- User interface element (See documentation for more details
- about the functions needed in this class)
-*/
-
-#ifndef STATUSB_H
-#define STATUSB_H
-#include
-
-// abstract base class for own statusbar inherite from it
-class A2DKBOOLDLLEXP StatusBar
-{
-public:
- // constructor & destructor
- StatusBar(){};
- ~StatusBar(){};
-
- virtual void SetXY( double = 0.0, double = 0.0 ) = 0;
- virtual void ResetCoord() = 0;
- virtual void SetFile( char* = 0 ) = 0;
- virtual void SetProcess( char* = 0 ) = 0;
- virtual void SetTime( time_t seconds = 0 ) = 0;
- virtual void SetRecording( int status = 0 ) = 0;
- virtual void SetZoom( float factor = 1 ) = 0;
- virtual void Reset() = 0;
- void StartDTimer();
- void EndDTimer();
- int GetDTimerOn();
- time_t GetDTimer();
-
-protected:
- int timer;
- time_t oldtime;
- time_t curtime;
-};
-
-#endif
+/*! \file kbool/include/kbool/statusb.h
+ \author Probably Klaas Holwerda
+
+ Copyright: 2001-2004 (C) Probably Klaas Holwerda
+
+ Licence: wxWidgets Licence
+
+ RCS-ID: $Id: statusb.h,v 1.2 2006/12/15 21:00:06 titato Exp $
+*/
+
+/* @@(#) $Source: /cvsroot/wxart2d/wxArt2D/thirdparty/kbool/include/kbool/statusb.h,v $ $Revision: 1.2 $ $Date: 2006/12/15 21:00:06 $ */
+
+/*
+Program STATUSB.H
+Purpose Controls the statusbar of the application (header)
+ This statusbar is a typical Windows statusbar
+ For porting to another platform there must be a StatusBar class
+ derived from this.
+ User interface element (See documentation for more details
+ about the functions needed in this class)
+*/
+
+#ifndef STATUSB_H
+#define STATUSB_H
+#include
+
+// abstract base class for own statusbar inherite from it
+class A2DKBOOLDLLEXP StatusBar
+{
+public:
+ // constructor & destructor
+ StatusBar(){};
+ ~StatusBar(){};
+
+ virtual void SetXY( double = 0.0, double = 0.0 ) = 0;
+ virtual void ResetCoord() = 0;
+ virtual void SetFile( char* = 0 ) = 0;
+ virtual void SetProcess( char* = 0 ) = 0;
+ virtual void SetTime( time_t seconds = 0 ) = 0;
+ virtual void SetRecording( int status = 0 ) = 0;
+ virtual void SetZoom( float factor = 1 ) = 0;
+ virtual void Reset() = 0;
+ void StartDTimer();
+ void EndDTimer();
+ int GetDTimerOn();
+ time_t GetDTimer();
+
+protected:
+ int timer;
+ time_t oldtime;
+ time_t curtime;
+};
+
+#endif
diff --git a/polygon/polygon_test_point_inside.cpp b/polygon/polygon_test_point_inside.cpp
index c5f4354261..2bf9b5eab7 100644
--- a/polygon/polygon_test_point_inside.cpp
+++ b/polygon/polygon_test_point_inside.cpp
@@ -1,355 +1,355 @@
-/////////////////////////////////////////////////////////////////////////////
-
-// Name: polygon_test_point_inside.cpp
-/////////////////////////////////////////////////////////////////////////////
-
-#include
-#include
-#include "PolyLine.h"
-
-using namespace std;
-
-/* this algo uses the the Jordan curve theorem to find if a point is inside or outside a polygon:
- * It run a semi-infinite line horizontally (increasing x, fixed y)
- * out from the test point, and count how many edges it crosses.
- * At each crossing, the ray switches between inside and outside.
- * If odd count, the test point is inside the polygon
- * This is called the Jordan curve theorem, or sometimes referred to as the "even-odd" test.
- */
-
-/* 2 versions are given.
- * the second version is GPL (currently used)
- * the first version is for explanations and tests (used to test the second version)
- * both use the same algorithm.
- */
-#if 0
-
-/* This text and the algorithm come from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
- *
- * PNPOLY - Point Inclusion in Polygon Test
- * W. Randolph Franklin (WRF)
- *
- * Table of Contents
- *
- * 1. The C Code <#The C Code>
- * 2. The Method <#The Method>
- * 3. Originality <#Originality>
- * 4. The Inequality Tests are Tricky <#The Inequality Tests are Tricky>
- * 5. C Semantics <#C Semantics>
- * 6. Point on a (Boundary) Edge <#Point on an Edge>
- * 7. Multiple Components and Holes <#Listing the Vertices>
- * 8. Testing Which One of Many Polygons Contains the Point <#Testing a
- * Point Against Many Polygons>
- * 9. Explanation of /"for (i = 0, j = nvert-1; i < nvert; j = i++)"/
- * <#Explanation>
- * 10. Fortran Code for the Point in Polygon Test <#Fortran Code for the
- * Point in Polygon Test>
- * 11. Converting the Code to All Integers <#Converting the Code to All
- * Integers>
- * 12. License to Use <#License to Use>
- *
- * The C Code
- *
- * Here is the code, for reference. Excluding lines with only braces, there
- * are only /7 lines/ of code.
- *
- * int pnpoly(int nvert, float *vertx, float *verty, float ref_pointX, float ref_pointY)
- * {
- * int i, j, c = 0;
- * for (i = 0, j = nvert-1; i < nvert; j = i++) {
- * if ( ((verty[i]>ref_pointY) != (verty[j]>ref_pointY)) &&
- * (ref_pointX < (vertx[j]-vertx[i]) * (ref_pointY-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
- * c = !c;
- * }
- * return c;
- * }
- *
- * Argument Meaning
- * nvert Number of vertices in the polygon. Whether to repeat the first
- * vertex at the end is discussed below.
- * vertx, verty Arrays containing the x- and y-coordinates of the
- * polygon's vertices.
- * ref_pointX, ref_pointY X- and y-coordinate of the test point.
- *
- *
- * The Method
- *
- * I run a semi-infinite ray horizontally (increasing x, fixed y) out from
- * the test point, and count how many edges it crosses. At each crossing,
- * the ray switches between inside and outside. This is called the /Jordan
- * curve theorem/.
- *
- * The case of the ray going thru a vertex is handled correctly via a
- * careful selection of inequalities. Don't mess with this code unless
- * you're familiar with the idea of /Simulation of Simplicity/. This
- * pretends to shift the ray infinitesimally to one side so that it either
- * clearly intersects, or clearly doesn't touch. Since this is merely a
- * conceptual, infinitesimal, shift, it never creates an intersection that
- * didn't exist before, and never destroys an intersection that clearly
- * existed before.
- *
- * The ray is tested against each edge thus:
- *
- * 1. Is the point in the half-plane below the extended edge? and
- * 2. Is the point's X coordinate within the edge's X-range?
- *
- * Handling endpoints here is tricky.
- *
- *
- * Originality
- *
- * I make no claim to having invented the idea. However in 1970, I did
- * produce the Fortran code given below on my own, and include it in a
- * package of cartographic SW publicly-distributed by David Douglas, Dept
- * of Geography, Simon Fraser U and U of Ottawa.
- *
- * Earlier implementations of point-in-polygon testing presumably exist,
- * tho the code might never have been released. Pointers to prior art,
- * especially publicly available code, are welcome. One early publication,
- * which doesn't handle the point on an edge, and has a typo, is this:
- *
- * M Shimrat, "Algorithm 112, Position of Point Relative to Polygon",
- * /Comm. ACM/ 5(8), Aug 1962, p 434.
- *
- * A well-written recent summary is this:
- *
- * E Haines, /Point in Polygon Strategies/,
- * http://www.acm.org/pubs/tog/editors/erich/ptinpoly/, 1994.
- *
- *
- * The Inequality Tests are Tricky
- *
- * If translating the program to another language, be sure to get the
- * inequalities in the conditional correct. They were carefully chosen to
- * make the program work correctly when the point is vertically below a vertex.
- *
- * Several people have thought that my program was wrong, when really
- * /they/ had gotten the inequalities wrong.
- *
- *
- * C Semantics
- *
- * My code uses the fact that, in the C language, when executing the code
- |a&&b|, if |a| is false, then |b| must not be evaluated. If your
- * compiler doesn't do this, then it's not implementing C, and you will get
- * a divide-by-zero, i.a., when the test point is vertically in line with a
- * vertical edge. When translating this code to another language with
- * different semantics, then you must implement this test explicitly.
- *
- *
- * Point on a (Boundary) Edge
- *
- * PNPOLY partitions the plane into points inside the polygon and points
- * outside the polygon. Points that are on the boundary are classified as
- * either inside or outside.
- *
- * 1.
- *
- * Any particular point is always classified consistently the same
- * way. In the following figure, consider what PNPOLY would say when
- * the red point, /P/, is tested against the two triangles, /T_L /
- * and /T_R /. Depending on internal roundoff errors, PNPOLY may say
- * that /P/ is in /T_L / or in /T_R /. However it will always give
- * the same answer when /P/ is tested against those triangles. That
- * is, if PNPOLY finds that /P/ is in /T_L /, then it will find that
- * /P/ is not /T_R /. If PNPOLY finds that /P/ is not in /T_L /, then
- * it will find that /P/ is in /T_R /.
- *
- * 2. If you want to know when a point is exactly on the boundary, you
- * need another program. This is only one of many functions that
- * PNPOLY lacks; it also doesn't predict tomorrow's weather. You are
- * free to extend PNPOLY's source code.
- *
- * 3. The first reason for this is the numerical analysis position that
- * you should not be testing exact equality unless your input is
- * exact. Even then, computational roundoff error would often make
- * the result wrong.
- *
- * 4. The second reason is that, if you partition a region of the plane
- * into polygons, i.e., form a planar graph, then PNPOLY will locate
- * each point into exactly one polygon. In other words, PNPOLY
- * considers each polygon to be topologically a semi-open set. This
- * makes things simpler, i.e., causes fewer special cases, if you use
- * PNPOLY as part of a larger system. Examples of this include
- * locating a point in a planar graph, and intersecting two planar
- * graphs.
- *
- *
- * Explanation of /"for (i = 0, j = nvert-1; i < nvert; j = i++)"/
- *
- * The intention is to execute the loop for each i from 0 to nvert-1. For
- * each iteration, j is i-1. However that wraps, so if i=0 then j=nvert-1.
- * Therefore the current edge runs between verts j and i, and the loop is
- * done once per edge. In detail:
- *
- * 1. Start by setting i and j:
- * i = 0
- * j = nvert-1
- * 2. If i You may use my material for non-profit research
- * and education, provided that you credit me, and link back to my home page.
- * http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html,
- * 05/20/2008 20:36:42
- */
-
-bool TestPointInsidePolygon( std::vector aPolysList,
- int istart,
- int iend,
- int refx,
- int refy )
-
-/** Function TestPointInsidePolygon
- * test if a point is inside or outside a polygon.
- * @param aPolysList: the list of polygons
- * @param istart: the starting point of a given polygon in m_FilledPolysList.
- * @param iend: the ending point of the polygon in m_FilledPolysList.
- * @param refx, refy: the point coordinate to test
- * @return true if the point is inside, false for outside
- */
-{
- double ref_pointX = refx;
- double ref_pointY = refy;
-
- bool inside = false;
-
- for( int ii = istart, jj = iend; ii <= iend; jj = ii++ )
- {
- double seg_startX, seg_startY; // starting point for the segment to test
- seg_startX = aPolysList[ii].x;
- seg_startY = aPolysList[ii].y;
- double seg_endX, seg_endY; // ending point for the segment to test
- seg_endX = aPolysList[jj].x;
- seg_endY = aPolysList[jj].y;
- if( ( ( seg_startY > ref_pointY ) != (seg_endY > ref_pointY ) )
- && (ref_pointX <
- (seg_endX -
- seg_startX) * (ref_pointY - seg_startY) / (seg_endY - seg_startY) + seg_startX) )
- inside = not inside;
- }
-
- return inside;
-}
-
-
-#else
-
-bool TestPointInsidePolygon( std::vector aPolysList,
- int istart,
- int iend,
- int refx,
- int refy )
-
-/** Function TestPointInsidePolygon
- * test if a point is inside or outside a polygon.
- * if a point is on a outline segment, it is considered outside the polygon
- * the polygon must have only lines (not arcs) for outlines.
- * Use TestPointInside or TestPointInsideContour for more complex polygons
- * @param aPolysList: the list of polygons
- * @param istart: the starting point of a given polygon in m_FilledPolysList.
- * @param iend: the ending point of the polygon in m_FilledPolysList.
- * @param refx,refy: the point coordinate to test
- * @return true if the point is inside, false for outside
- */
-{
- #define OUTSIDE_IF_ON_SIDE 0 // = 1 if we consider point on a side outside the polygon
- // define line passing through (x,y), with slope = 0 (horizontal line)
- // get intersection points
- // count intersection points to right of (x,y), if odd (x,y) is inside polyline
- int xx, yy;
- double slope = 0; // Using an horizontal line.
- double a = refy - slope * refx;
- int ics, ice;
- bool inside = false;
-
- // find all intersection points of line with polyline sides
- for( ics = istart, ice = iend; ics <= iend; ice = ics++ )
- {
- double intersectx1, intersecty1, intersectx2, intersecty2;
- int ok;
- ok = FindLineSegmentIntersection( a, slope,
- aPolysList[ics].x, aPolysList[ics].y,
- aPolysList[ice].x, aPolysList[ice].y,
- CPolyLine::STRAIGHT,
- &intersectx1, &intersecty1,
- &intersectx2, &intersecty2 );
-
- /* FindLineSegmentIntersection() returns 0, 1 or 2 coordinates (ok = 0, 1, 2)
- * for straight line segments, only 0 or 1 are possible
- * (2 intersections points are possible only with arcs
- */
- if( ok ) // Intersection found
- {
- xx = (int) intersectx1;
- yy = (int) intersecty1;
-
- /* if the intersection point is on the start point of the current segment,
- * do not count it,
- * because it was already counted, as ending point of the previous segment
- */
- if( xx == aPolysList[ics].x && yy == aPolysList[ics].y )
- continue;
-#if OUTSIDE_IF_ON_SIDE
- if( xx == refx && yy == refy )
- return false; // (x,y) is on a side, call it outside
- else
-#endif
- if( xx > refx )
- inside = not inside;
- }
- }
-
- return inside;
-}
-
-
-#endif
+/////////////////////////////////////////////////////////////////////////////
+
+// Name: polygon_test_point_inside.cpp
+/////////////////////////////////////////////////////////////////////////////
+
+#include
+#include
+#include "PolyLine.h"
+
+using namespace std;
+
+/* this algo uses the the Jordan curve theorem to find if a point is inside or outside a polygon:
+ * It run a semi-infinite line horizontally (increasing x, fixed y)
+ * out from the test point, and count how many edges it crosses.
+ * At each crossing, the ray switches between inside and outside.
+ * If odd count, the test point is inside the polygon
+ * This is called the Jordan curve theorem, or sometimes referred to as the "even-odd" test.
+ */
+
+/* 2 versions are given.
+ * the second version is GPL (currently used)
+ * the first version is for explanations and tests (used to test the second version)
+ * both use the same algorithm.
+ */
+#if 0
+
+/* This text and the algorithm come from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
+ *
+ * PNPOLY - Point Inclusion in Polygon Test
+ * W. Randolph Franklin (WRF)
+ *
+ * Table of Contents
+ *
+ * 1. The C Code <#The C Code>
+ * 2. The Method <#The Method>
+ * 3. Originality <#Originality>
+ * 4. The Inequality Tests are Tricky <#The Inequality Tests are Tricky>
+ * 5. C Semantics <#C Semantics>
+ * 6. Point on a (Boundary) Edge <#Point on an Edge>
+ * 7. Multiple Components and Holes <#Listing the Vertices>
+ * 8. Testing Which One of Many Polygons Contains the Point <#Testing a
+ * Point Against Many Polygons>
+ * 9. Explanation of /"for (i = 0, j = nvert-1; i < nvert; j = i++)"/
+ * <#Explanation>
+ * 10. Fortran Code for the Point in Polygon Test <#Fortran Code for the
+ * Point in Polygon Test>
+ * 11. Converting the Code to All Integers <#Converting the Code to All
+ * Integers>
+ * 12. License to Use <#License to Use>
+ *
+ * The C Code
+ *
+ * Here is the code, for reference. Excluding lines with only braces, there
+ * are only /7 lines/ of code.
+ *
+ * int pnpoly(int nvert, float *vertx, float *verty, float ref_pointX, float ref_pointY)
+ * {
+ * int i, j, c = 0;
+ * for (i = 0, j = nvert-1; i < nvert; j = i++) {
+ * if ( ((verty[i]>ref_pointY) != (verty[j]>ref_pointY)) &&
+ * (ref_pointX < (vertx[j]-vertx[i]) * (ref_pointY-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
+ * c = !c;
+ * }
+ * return c;
+ * }
+ *
+ * Argument Meaning
+ * nvert Number of vertices in the polygon. Whether to repeat the first
+ * vertex at the end is discussed below.
+ * vertx, verty Arrays containing the x- and y-coordinates of the
+ * polygon's vertices.
+ * ref_pointX, ref_pointY X- and y-coordinate of the test point.
+ *
+ *
+ * The Method
+ *
+ * I run a semi-infinite ray horizontally (increasing x, fixed y) out from
+ * the test point, and count how many edges it crosses. At each crossing,
+ * the ray switches between inside and outside. This is called the /Jordan
+ * curve theorem/.
+ *
+ * The case of the ray going thru a vertex is handled correctly via a
+ * careful selection of inequalities. Don't mess with this code unless
+ * you're familiar with the idea of /Simulation of Simplicity/. This
+ * pretends to shift the ray infinitesimally to one side so that it either
+ * clearly intersects, or clearly doesn't touch. Since this is merely a
+ * conceptual, infinitesimal, shift, it never creates an intersection that
+ * didn't exist before, and never destroys an intersection that clearly
+ * existed before.
+ *
+ * The ray is tested against each edge thus:
+ *
+ * 1. Is the point in the half-plane below the extended edge? and
+ * 2. Is the point's X coordinate within the edge's X-range?
+ *
+ * Handling endpoints here is tricky.
+ *
+ *
+ * Originality
+ *
+ * I make no claim to having invented the idea. However in 1970, I did
+ * produce the Fortran code given below on my own, and include it in a
+ * package of cartographic SW publicly-distributed by David Douglas, Dept
+ * of Geography, Simon Fraser U and U of Ottawa.
+ *
+ * Earlier implementations of point-in-polygon testing presumably exist,
+ * tho the code might never have been released. Pointers to prior art,
+ * especially publicly available code, are welcome. One early publication,
+ * which doesn't handle the point on an edge, and has a typo, is this:
+ *
+ * M Shimrat, "Algorithm 112, Position of Point Relative to Polygon",
+ * /Comm. ACM/ 5(8), Aug 1962, p 434.
+ *
+ * A well-written recent summary is this:
+ *
+ * E Haines, /Point in Polygon Strategies/,
+ * http://www.acm.org/pubs/tog/editors/erich/ptinpoly/, 1994.
+ *
+ *
+ * The Inequality Tests are Tricky
+ *
+ * If translating the program to another language, be sure to get the
+ * inequalities in the conditional correct. They were carefully chosen to
+ * make the program work correctly when the point is vertically below a vertex.
+ *
+ * Several people have thought that my program was wrong, when really
+ * /they/ had gotten the inequalities wrong.
+ *
+ *
+ * C Semantics
+ *
+ * My code uses the fact that, in the C language, when executing the code
+ |a&&b|, if |a| is false, then |b| must not be evaluated. If your
+ * compiler doesn't do this, then it's not implementing C, and you will get
+ * a divide-by-zero, i.a., when the test point is vertically in line with a
+ * vertical edge. When translating this code to another language with
+ * different semantics, then you must implement this test explicitly.
+ *
+ *
+ * Point on a (Boundary) Edge
+ *
+ * PNPOLY partitions the plane into points inside the polygon and points
+ * outside the polygon. Points that are on the boundary are classified as
+ * either inside or outside.
+ *
+ * 1.
+ *
+ * Any particular point is always classified consistently the same
+ * way. In the following figure, consider what PNPOLY would say when
+ * the red point, /P/, is tested against the two triangles, /T_L /
+ * and /T_R /. Depending on internal roundoff errors, PNPOLY may say
+ * that /P/ is in /T_L / or in /T_R /. However it will always give
+ * the same answer when /P/ is tested against those triangles. That
+ * is, if PNPOLY finds that /P/ is in /T_L /, then it will find that
+ * /P/ is not /T_R /. If PNPOLY finds that /P/ is not in /T_L /, then
+ * it will find that /P/ is in /T_R /.
+ *
+ * 2. If you want to know when a point is exactly on the boundary, you
+ * need another program. This is only one of many functions that
+ * PNPOLY lacks; it also doesn't predict tomorrow's weather. You are
+ * free to extend PNPOLY's source code.
+ *
+ * 3. The first reason for this is the numerical analysis position that
+ * you should not be testing exact equality unless your input is
+ * exact. Even then, computational roundoff error would often make
+ * the result wrong.
+ *
+ * 4. The second reason is that, if you partition a region of the plane
+ * into polygons, i.e., form a planar graph, then PNPOLY will locate
+ * each point into exactly one polygon. In other words, PNPOLY
+ * considers each polygon to be topologically a semi-open set. This
+ * makes things simpler, i.e., causes fewer special cases, if you use
+ * PNPOLY as part of a larger system. Examples of this include
+ * locating a point in a planar graph, and intersecting two planar
+ * graphs.
+ *
+ *
+ * Explanation of /"for (i = 0, j = nvert-1; i < nvert; j = i++)"/
+ *
+ * The intention is to execute the loop for each i from 0 to nvert-1. For
+ * each iteration, j is i-1. However that wraps, so if i=0 then j=nvert-1.
+ * Therefore the current edge runs between verts j and i, and the loop is
+ * done once per edge. In detail:
+ *
+ * 1. Start by setting i and j:
+ * i = 0
+ * j = nvert-1
+ * 2. If i You may use my material for non-profit research
+ * and education, provided that you credit me, and link back to my home page.
+ * http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html,
+ * 05/20/2008 20:36:42
+ */
+
+bool TestPointInsidePolygon( std::vector aPolysList,
+ int istart,
+ int iend,
+ int refx,
+ int refy )
+
+/** Function TestPointInsidePolygon
+ * test if a point is inside or outside a polygon.
+ * @param aPolysList: the list of polygons
+ * @param istart: the starting point of a given polygon in m_FilledPolysList.
+ * @param iend: the ending point of the polygon in m_FilledPolysList.
+ * @param refx, refy: the point coordinate to test
+ * @return true if the point is inside, false for outside
+ */
+{
+ double ref_pointX = refx;
+ double ref_pointY = refy;
+
+ bool inside = false;
+
+ for( int ii = istart, jj = iend; ii <= iend; jj = ii++ )
+ {
+ double seg_startX, seg_startY; // starting point for the segment to test
+ seg_startX = aPolysList[ii].x;
+ seg_startY = aPolysList[ii].y;
+ double seg_endX, seg_endY; // ending point for the segment to test
+ seg_endX = aPolysList[jj].x;
+ seg_endY = aPolysList[jj].y;
+ if( ( ( seg_startY > ref_pointY ) != (seg_endY > ref_pointY ) )
+ && (ref_pointX <
+ (seg_endX -
+ seg_startX) * (ref_pointY - seg_startY) / (seg_endY - seg_startY) + seg_startX) )
+ inside = not inside;
+ }
+
+ return inside;
+}
+
+
+#else
+
+bool TestPointInsidePolygon( std::vector aPolysList,
+ int istart,
+ int iend,
+ int refx,
+ int refy )
+
+/** Function TestPointInsidePolygon
+ * test if a point is inside or outside a polygon.
+ * if a point is on a outline segment, it is considered outside the polygon
+ * the polygon must have only lines (not arcs) for outlines.
+ * Use TestPointInside or TestPointInsideContour for more complex polygons
+ * @param aPolysList: the list of polygons
+ * @param istart: the starting point of a given polygon in m_FilledPolysList.
+ * @param iend: the ending point of the polygon in m_FilledPolysList.
+ * @param refx,refy: the point coordinate to test
+ * @return true if the point is inside, false for outside
+ */
+{
+ #define OUTSIDE_IF_ON_SIDE 0 // = 1 if we consider point on a side outside the polygon
+ // define line passing through (x,y), with slope = 0 (horizontal line)
+ // get intersection points
+ // count intersection points to right of (x,y), if odd (x,y) is inside polyline
+ int xx, yy;
+ double slope = 0; // Using an horizontal line.
+ double a = refy - slope * refx;
+ int ics, ice;
+ bool inside = false;
+
+ // find all intersection points of line with polyline sides
+ for( ics = istart, ice = iend; ics <= iend; ice = ics++ )
+ {
+ double intersectx1, intersecty1, intersectx2, intersecty2;
+ int ok;
+ ok = FindLineSegmentIntersection( a, slope,
+ aPolysList[ics].x, aPolysList[ics].y,
+ aPolysList[ice].x, aPolysList[ice].y,
+ CPolyLine::STRAIGHT,
+ &intersectx1, &intersecty1,
+ &intersectx2, &intersecty2 );
+
+ /* FindLineSegmentIntersection() returns 0, 1 or 2 coordinates (ok = 0, 1, 2)
+ * for straight line segments, only 0 or 1 are possible
+ * (2 intersections points are possible only with arcs
+ */
+ if( ok ) // Intersection found
+ {
+ xx = (int) intersectx1;
+ yy = (int) intersecty1;
+
+ /* if the intersection point is on the start point of the current segment,
+ * do not count it,
+ * because it was already counted, as ending point of the previous segment
+ */
+ if( xx == aPolysList[ics].x && yy == aPolysList[ics].y )
+ continue;
+#if OUTSIDE_IF_ON_SIDE
+ if( xx == refx && yy == refy )
+ return false; // (x,y) is on a side, call it outside
+ else
+#endif
+ if( xx > refx )
+ inside = not inside;
+ }
+ }
+
+ return inside;
+}
+
+
+#endif
diff --git a/polygon/polygon_test_point_inside.h b/polygon/polygon_test_point_inside.h
index 89d22da25c..924423951a 100644
--- a/polygon/polygon_test_point_inside.h
+++ b/polygon/polygon_test_point_inside.h
@@ -1,19 +1,19 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name: polygon_test_point_inside.h
-/////////////////////////////////////////////////////////////////////////////
-
-using namespace std;
-
-/** Function TestPointInsidePolygon
- * test if a point is inside or outside a polygon.
- * @param aPolysList: the list of polygons
- * @param istart: the starting point of a given polygon in m_FilledPolysList.
- * @param iend: the ending point of the polygon in m_FilledPolysList.
- * @param refx, refy: the point coordinate to test
- * @return true if the point is inside, false for outside
- */
-bool TestPointInsidePolygon( std::vector aPolysList,
- int istart,
- int iend,
- int refx,
- int refy);
+/////////////////////////////////////////////////////////////////////////////
+// Name: polygon_test_point_inside.h
+/////////////////////////////////////////////////////////////////////////////
+
+using namespace std;
+
+/** Function TestPointInsidePolygon
+ * test if a point is inside or outside a polygon.
+ * @param aPolysList: the list of polygons
+ * @param istart: the starting point of a given polygon in m_FilledPolysList.
+ * @param iend: the ending point of the polygon in m_FilledPolysList.
+ * @param refx, refy: the point coordinate to test
+ * @return true if the point is inside, false for outside
+ */
+bool TestPointInsidePolygon( std::vector aPolysList,
+ int istart,
+ int iend,
+ int refx,
+ int refy);