← Back to team overview

kicad-developers team mailing list archive

Re: [RFC] Experimental grid pattern in zone fill

 

Le 13/03/2018 à 14:05, Jon Evans a écrit :
> Nice work!  It may just be experimental, but it seems pretty close to a feature for 6.0 to me :-)
> I gave it a try on various boards I have worked on recently and it seems to work as advertised and
> is not noticeably slower than a solid fill on my computer.
> 
> Assuming we work out any issues related to this, I thought of two features we might want to add
> after this:
> 1) Allow 45-degree grids instead of just 90
> 2) Add a DRC check for stitching vias that would have connected to a solid fill but are off-grid and
> thus disconnected in grid fill?
> 
> -Jon

Attached the experimental grid pattern in zone fill patch, with 45 degree grid option.

> 
> On Tue, Mar 13, 2018 at 4:10 AM, jp charras <jp.charras@xxxxxxxxxx <mailto:jp.charras@xxxxxxxxxx>>
> wrote:
> 
>     I wrote a purely experimental option to fill zones (copper and not copper) with a grid patter.
>     It is only an experimental feature made mainly to know what issues can be created by this feature.
> 
>     The main issue is the fact polygons have much more corners, thus creating a longer calculation time.
>     (However, grid pattern is expected to be used in specific cases)
> 
>     It should be compatible with the current DRC.
> 
>     Regards
> 
>     --
>     Jean-Pierre CHARRAS
> 
>     _______________________________________________
>     Mailing list: https://launchpad.net/~kicad-developers <https://launchpad.net/%7Ekicad-developers>
>     Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>     Unsubscribe : https://launchpad.net/~kicad-developers <https://launchpad.net/%7Ekicad-developers>
>     More help   : https://help.launchpad.net/ListHelp <https://help.launchpad.net/ListHelp>
> 
> 


-- 
Jean-Pierre CHARRAS
From d46fc941c82b73714647292753b321593c847653 Mon Sep 17 00:00:00 2001
From: jean-pierre charras <jp.charras@xxxxxxxxxx>
Date: Sun, 18 Feb 2018 10:09:13 +0100
Subject: [PATCH] allow grid pattern in filled zones

---
 common/pcb.keywords                                |   4 +
 pcbnew/class_zone.cpp                              |   6 +-
 pcbnew/class_zone.h                                |  14 +-
 pcbnew/dialogs/dialog_copper_zones.cpp             |  73 ++-
 pcbnew/dialogs/dialog_copper_zones_base.cpp        | 105 ++--
 pcbnew/dialogs/dialog_copper_zones_base.fbp        | 420 ++++++++++++++--
 pcbnew/dialogs/dialog_copper_zones_base.h          |  67 ++-
 .../dialogs/dialog_non_copper_zones_properties.cpp |  49 +-
 .../dialog_non_copper_zones_properties_base.cpp    |  42 +-
 .../dialog_non_copper_zones_properties_base.fbp    | 534 ++++++++++++++++++++-
 .../dialog_non_copper_zones_properties_base.h      |  18 +-
 pcbnew/kicad_plugin.cpp                            |  17 +-
 pcbnew/pcb_parser.cpp                              |  29 +-
 pcbnew/zone_filler.cpp                             |  92 +++-
 pcbnew/zone_filler.h                               |  11 +
 pcbnew/zone_settings.cpp                           |   6 +
 pcbnew/zone_settings.h                             |   9 +-
 pcbnew/zones_by_polygon.cpp                        |   3 +-
 18 files changed, 1348 insertions(+), 151 deletions(-)

diff --git a/common/pcb.keywords b/common/pcb.keywords
index 1998f9a..5f7c9e1 100644
--- a/common/pcb.keywords
+++ b/common/pcb.keywords
@@ -85,6 +85,8 @@ fp_text
 full
 general
 grid_origin
+grid_pattern
+grid_pattern_45
 gr_arc
 gr_circle
 gr_curve
@@ -134,6 +136,8 @@ pad_to_paste_clearance
 pad_to_paste_clearance_ratio
 page
 path
+pattern_thickness
+pattern_gap
 pcb_text_size
 pcb_text_width
 pcbplotparams
diff --git a/pcbnew/class_zone.cpp b/pcbnew/class_zone.cpp
index 13b01e5..1647d2d 100644
--- a/pcbnew/class_zone.cpp
+++ b/pcbnew/class_zone.cpp
@@ -55,6 +55,8 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD* aBoard ) :
     m_CornerSelection = nullptr;                // no corner is selected
     m_IsFilled = false;                         // fill status : true when the zone is filled
     m_FillMode = ZFM_POLYGONS;
+    m_ZoneGridPatternThickness = 0;
+    m_ZoneGridPatternGap = 0;
     m_priority = 0;
     m_cornerSmoothingType = ZONE_SETTINGS::SMOOTHING_NONE;
     SetIsKeepout( false );
@@ -488,12 +490,12 @@ void ZONE_CONTAINER::DrawFilledArea( EDA_DRAW_PANEL* panel,
         }
 
         // Draw areas:
-        if( m_FillMode == ZFM_POLYGONS && !outline_mode )
+        if( m_FillMode != ZFM_SEGMENTS && !outline_mode )
             GRPoly( panel->GetClipBox(), DC, CornersBuffer.size(), &CornersBuffer[0],
                     true, 0, color, color );
     }
 
-    if( m_FillMode == 1  && !outline_mode )     // filled with segments
+    if( m_FillMode == ZFM_SEGMENTS && !outline_mode )     // filled with segments
     {
         for( unsigned ic = 0; ic < m_FillSegmList.size(); ic++ )
         {
diff --git a/pcbnew/class_zone.h b/pcbnew/class_zone.h
index b950245..505993a 100644
--- a/pcbnew/class_zone.h
+++ b/pcbnew/class_zone.h
@@ -198,6 +198,12 @@ public:
     int GetMinThickness() const { return m_ZoneMinThickness; }
     void SetMinThickness( int aMinThickness ) { m_ZoneMinThickness = aMinThickness; }
 
+    int GetGridPatternThickness() const { return m_ZoneGridPatternThickness; }
+    void SetGridPatternThickness( int aThickness ) { m_ZoneGridPatternThickness = aThickness; }
+
+    int GetGridPatternGap() const { return m_ZoneGridPatternGap; }
+    void SetGridPatternGap( int aStep ) { m_ZoneGridPatternGap = aStep; }
+
     int GetSelectedCorner() const
     {
         // Transform relative indices to global index
@@ -711,9 +717,15 @@ private:
     int                   m_ThermalReliefCopperBridge;
 
 
-    /// How to fill areas: ZFM_POLYGONS => use filled polygons, ZFM_SEGMENTS => fill with segments.
+    /// How to fill areas: ZFM_POLYGONS => use solid polygons, ZFM_SEGMENTS => fill by segments.
     ZONE_FILL_MODE        m_FillMode;
 
+    /// Grid style shape: thickness of lines (if 0 -> solid shape)
+    int m_ZoneGridPatternThickness;
+
+    /// Grid style shape: dist between center of lines (grid size) (0 -> solid shape)
+    int m_ZoneGridPatternGap;
+
     /// The index of the corner being moved or nullptr if no corner is selected.
     SHAPE_POLY_SET::VERTEX_INDEX* m_CornerSelection;
 
diff --git a/pcbnew/dialogs/dialog_copper_zones.cpp b/pcbnew/dialogs/dialog_copper_zones.cpp
index db10961..095e3c7 100644
--- a/pcbnew/dialogs/dialog_copper_zones.cpp
+++ b/pcbnew/dialogs/dialog_copper_zones.cpp
@@ -5,9 +5,9 @@
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
- * Copyright (C) 2017 Jean-Pierre Charras, jean-pierre.charras@xxxxxxxxxxxxxxx
+ * Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
  * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@xxxxxxxxxxx>
- * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -103,6 +103,7 @@ private:
     void ExportSetupToOtherCopperZones( wxCommandEvent& event ) override;
     void OnPadsInZoneClick( wxCommandEvent& event ) override;
     void OnRunFiltersButtonClick( wxCommandEvent& event ) override;
+	void OnStyleSelection( wxCommandEvent& event ) override;
 
     void buildAvailableListOfNets();
 
@@ -177,7 +178,20 @@ void DIALOG_COPPER_ZONE::initDialog()
     if( m_settings.m_Zone_45_Only )
         m_OrientEdgesOpt->SetSelection( 1 );
 
-    m_FillModeCtrl->SetSelection( m_settings.m_FillMode == ZFM_SEGMENTS ? 1 : 0 );
+    switch( m_settings.m_FillMode )
+    {
+    case ZFM_GRID_PATTERN_HV:
+        m_GridStyleCtrl->SetSelection( 1 ); break;
+    case ZFM_GRID_PATTERN_45:
+        m_GridStyleCtrl->SetSelection( 2 ); break;
+    default:
+        m_GridStyleCtrl->SetSelection( 3 ); break;
+    }
+
+    msg = StringFromValue( g_UserUnit, m_settings.m_ZoneGridPatternThickness );
+    m_tcGridStyleThickness->SetValue( msg );
+    msg = StringFromValue( g_UserUnit, m_settings.m_ZoneGridPatternGap );
+    m_tcGridStyleSize->SetValue( msg );
 
     AddUnitSymbol( *m_ClearanceValueTitle, g_UserUnit );
     msg = StringFromValue( g_UserUnit, m_settings.m_ZoneClearance );
@@ -302,8 +316,10 @@ void DIALOG_COPPER_ZONE::initDialog()
     m_DoNotShowNetNameFilter->SetValue( netNameDoNotShowFilter );
     buildAvailableListOfNets();
 
+    // Enable/Disable some widgets
     wxCommandEvent event;
     OnCornerSmoothingModeChoice( event );
+    OnStyleSelection( event );
 }
 
 
@@ -317,6 +333,7 @@ void DIALOG_COPPER_ZONE::OnButtonCancelClick( wxCommandEvent& event )
     Close( true );
 }
 
+
 void DIALOG_COPPER_ZONE::OnButtonOkClick( wxCommandEvent& event )
 {
     m_netNameShowFilter = m_ShowNetNameFilter->GetValue();
@@ -339,8 +356,18 @@ void DIALOG_COPPER_ZONE::OnClose( wxCloseEvent& event )
 }
 
 
+void DIALOG_COPPER_ZONE::OnStyleSelection( wxCommandEvent& event )
+{
+    bool enable = m_GridStyleCtrl->GetSelection() >= 1;
+    m_tcGridStyleThickness->Enable( enable );
+    m_tcGridStyleSize->Enable( enable );
+}
+
+
 bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportableSetupOnly )
 {
+    wxString msg;
+
     switch( m_PadInZoneOpt->GetSelection() )
     {
     case 3:
@@ -392,18 +419,32 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportab
     }
 
     m_netNameShowFilter = m_ShowNetNameFilter->GetValue();
-    m_settings.m_FillMode = (m_FillModeCtrl->GetSelection() == 0) ? ZFM_POLYGONS : ZFM_SEGMENTS;
+
+    switch( m_GridStyleCtrl->GetSelection() )
+    {
+    case 0:
+        m_settings.m_FillMode = ZFM_POLYGONS; break;
+    case 1:
+        m_settings.m_FillMode = ZFM_GRID_PATTERN_HV; break;
+    case 2:
+        m_settings.m_FillMode = ZFM_GRID_PATTERN_45; break;
+    }
 
     wxString txtvalue = m_ZoneClearanceCtrl->GetValue();
     m_settings.m_ZoneClearance = ValueFromString( g_UserUnit, txtvalue );
 
+    txtvalue = m_tcGridStyleThickness->GetValue();
+    m_settings.m_ZoneGridPatternThickness = ValueFromString( g_UserUnit, txtvalue );
+
+    txtvalue = m_tcGridStyleSize->GetValue();
+    m_settings.m_ZoneGridPatternGap = ValueFromString( g_UserUnit, txtvalue );
+
     // Test if this is a reasonable value for this parameter
     // A too large value can hang Pcbnew
     #define CLEARANCE_MAX_VALUE ZONE_CLEARANCE_MAX_VALUE_MIL*IU_PER_MILS
 
     if( m_settings.m_ZoneClearance > CLEARANCE_MAX_VALUE )
     {
-        wxString msg;
         msg.Printf( _( "Clearance must be smaller than %f\" / %f mm." ),
             ZONE_CLEARANCE_MAX_VALUE_MIL / 1000.0, ZONE_CLEARANCE_MAX_VALUE_MIL * 0.0254 );
         DisplayError( this, msg );
@@ -415,13 +456,33 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportab
 
     if( m_settings.m_ZoneMinThickness < (ZONE_THICKNESS_MIN_VALUE_MIL*IU_PER_MILS) )
     {
-        wxString msg;
         msg.Printf( _( "Minimum width must be larger than %f\" / %f mm." ),
             ZONE_THICKNESS_MIN_VALUE_MIL / 1000.0, ZONE_THICKNESS_MIN_VALUE_MIL * 0.0254 );
         DisplayError( this, msg );
         return false;
     }
 
+    // For grid pattern fill option, ensure grid pattern parameters are valid
+    if( m_settings.m_FillMode == ZFM_GRID_PATTERN_HV || m_settings.m_FillMode == ZFM_GRID_PATTERN_45 )
+    {
+        if( m_settings.m_ZoneGridPatternThickness <= m_settings.m_ZoneMinThickness )
+        {
+            DisplayError( this, _( "Pattern thickness must be > zone min thickness" ) );
+            return false;
+        }
+
+        // perhaps not mandatory, but this is a reasonable constraint
+        if( m_settings.m_ZoneGridPatternGap <= m_settings.m_ZoneMinThickness )
+        {
+            DisplayError( this, _( "Pattern gap must be > zone min thickness" ) );
+            return false;
+        }
+    }
+
+    txtvalue = m_tcGridStyleSize->GetValue();
+    m_settings.m_ZoneGridPatternGap = ValueFromString( g_UserUnit, txtvalue );
+
+
     m_settings.SetCornerSmoothingType( m_cornerSmoothingChoice->GetSelection() );
     txtvalue = m_cornerSmoothingCtrl->GetValue();
     m_settings.SetCornerRadius( ValueFromString( g_UserUnit, txtvalue ) );
diff --git a/pcbnew/dialogs/dialog_copper_zones_base.cpp b/pcbnew/dialogs/dialog_copper_zones_base.cpp
index 6bb48b0..a1435fe 100644
--- a/pcbnew/dialogs/dialog_copper_zones_base.cpp
+++ b/pcbnew/dialogs/dialog_copper_zones_base.cpp
@@ -1,8 +1,8 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Dec 30 2017)
+// C++ code generated with wxFormBuilder (version Aug  4 2017)
 // http://www.wxformbuilder.org/
 //
-// PLEASE DO *NOT* EDIT THIS FILE!
+// PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
 #include "widgets/text_ctrl_eval.h"
@@ -11,20 +11,6 @@
 
 ///////////////////////////////////////////////////////////////////////////
 
-BEGIN_EVENT_TABLE( DIALOG_COPPER_ZONE_BASE, DIALOG_SHIM )
-	EVT_CLOSE( DIALOG_COPPER_ZONE_BASE::_wxFB_OnClose )
-	EVT_UPDATE_UI( ID_NETNAME_SELECTION, DIALOG_COPPER_ZONE_BASE::_wxFB_OnUpdateUI )
-	EVT_CHOICE( ID_M_NETDISPLAYOPTION, DIALOG_COPPER_ZONE_BASE::_wxFB_OnNetSortingOptionSelected )
-	EVT_TEXT_ENTER( ID_TEXTCTRL_NETNAMES_FILTER, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
-	EVT_TEXT_ENTER( ID_TEXTCTRL_NETNAMES_FILTER, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
-	EVT_BUTTON( wxID_APPLY_FILTERS, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
-	EVT_CHOICE( ID_CORNER_SMOOTHING, DIALOG_COPPER_ZONE_BASE::_wxFB_OnCornerSmoothingModeChoice )
-	EVT_CHOICE( ID_M_PADINZONEOPT, DIALOG_COPPER_ZONE_BASE::_wxFB_OnPadsInZoneClick )
-	EVT_BUTTON( wxID_BUTTON_EXPORT, DIALOG_COPPER_ZONE_BASE::_wxFB_ExportSetupToOtherCopperZones )
-	EVT_BUTTON( wxID_CANCEL, DIALOG_COPPER_ZONE_BASE::_wxFB_OnButtonCancelClick )
-	EVT_BUTTON( wxID_OK, DIALOG_COPPER_ZONE_BASE::_wxFB_OnButtonOkClick )
-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 ) : DIALOG_SHIM( parent, id, title, pos, size, style )
 {
 	this->SetSizeHints( wxDefaultSize, wxDefaultSize );
@@ -196,16 +182,6 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
 	m_PriorityLevelCtrl = new wxSpinCtrl( m_ExportableSetupSizer->GetStaticBox(), ID_M_PRIORITYLEVELCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 0 );
 	m_MiddleBox->Add( m_PriorityLevelCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
 	
-	m_staticTextFillMode = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("Fill mode:"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_staticTextFillMode->Wrap( -1 );
-	m_MiddleBox->Add( m_staticTextFillMode, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
-	
-	wxString m_FillModeCtrlChoices[] = { _("Polygon"), _("Segment") };
-	int m_FillModeCtrlNChoices = sizeof( m_FillModeCtrlChoices ) / sizeof( wxString );
-	m_FillModeCtrl = new wxChoice( m_ExportableSetupSizer->GetStaticBox(), ID_M_FILLMODECTRL, wxDefaultPosition, wxDefaultSize, m_FillModeCtrlNChoices, m_FillModeCtrlChoices, 0 );
-	m_FillModeCtrl->SetSelection( 0 );
-	m_MiddleBox->Add( m_FillModeCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
-	
 	m_staticTextSegmCnt = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("Segments / 360 deg:"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_staticTextSegmCnt->Wrap( -1 );
 	m_MiddleBox->Add( m_staticTextSegmCnt, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
@@ -216,43 +192,67 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
 	m_ArcApproximationOpt->SetSelection( 0 );
 	m_MiddleBox->Add( m_ArcApproximationOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
 	
-	
-	m_ExportableSetupSizer->Add( m_MiddleBox, 0, wxEXPAND, 5 );
-	
-	wxBoxSizer* bSizerLowerRight;
-	bSizerLowerRight = new wxBoxSizer( wxVERTICAL );
-	
 	m_staticTextSlope = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("Outline slope:"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_staticTextSlope->Wrap( -1 );
-	bSizerLowerRight->Add( m_staticTextSlope, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
+	m_MiddleBox->Add( m_staticTextSlope, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
 	
 	wxString m_OrientEdgesOptChoices[] = { _("Arbitrary"), _("H, V, and 45 deg only") };
 	int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
 	m_OrientEdgesOpt = new wxChoice( m_ExportableSetupSizer->GetStaticBox(), ID_M_ORIENTEDGESOPT, wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 0 );
 	m_OrientEdgesOpt->SetSelection( 0 );
-	bSizerLowerRight->Add( m_OrientEdgesOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
+	m_MiddleBox->Add( m_OrientEdgesOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
 	
 	m_staticTextStyle = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("Outline style:"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_staticTextStyle->Wrap( -1 );
-	bSizerLowerRight->Add( m_staticTextStyle, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
+	m_MiddleBox->Add( m_staticTextStyle, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
 	
 	wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
 	int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
 	m_OutlineAppearanceCtrl = new wxChoice( m_ExportableSetupSizer->GetStaticBox(), ID_M_OUTLINEAPPEARANCECTRL, wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 0 );
 	m_OutlineAppearanceCtrl->SetSelection( 0 );
-	bSizerLowerRight->Add( m_OutlineAppearanceCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
+	m_MiddleBox->Add( m_OutlineAppearanceCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
+	
+	
+	m_ExportableSetupSizer->Add( m_MiddleBox, 0, wxEXPAND, 5 );
+	
+	wxBoxSizer* bSizerLowerRight;
+	bSizerLowerRight = new wxBoxSizer( wxVERTICAL );
+	
+	m_staticTextGridStyle = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("Fill style:"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticTextGridStyle->Wrap( -1 );
+	bSizerLowerRight->Add( m_staticTextGridStyle, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
+	
+	wxString m_GridStyleCtrlChoices[] = { _("Solid shape"), _("Grid pattern HV"), _("Grid pattern 45") };
+	int m_GridStyleCtrlNChoices = sizeof( m_GridStyleCtrlChoices ) / sizeof( wxString );
+	m_GridStyleCtrl = new wxChoice( m_ExportableSetupSizer->GetStaticBox(), ID_M_FILLMODECTRL, wxDefaultPosition, wxDefaultSize, m_GridStyleCtrlNChoices, m_GridStyleCtrlChoices, 0 );
+	m_GridStyleCtrl->SetSelection( 0 );
+	bSizerLowerRight->Add( m_GridStyleCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
+	
+	m_staticTextGrindThickness = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("Grid style: thickness"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticTextGrindThickness->Wrap( -1 );
+	bSizerLowerRight->Add( m_staticTextGrindThickness, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_tcGridStyleThickness = new wxTextCtrl( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+	bSizerLowerRight->Add( m_tcGridStyleThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+	
+	m_staticTextStyleSize = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("Grid style: grid size"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticTextStyleSize->Wrap( -1 );
+	bSizerLowerRight->Add( m_staticTextStyleSize, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_tcGridStyleSize = new wxTextCtrl( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+	bSizerLowerRight->Add( m_tcGridStyleSize, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
 	
 	m_bNoNetWarning = new wxBoxSizer( wxHORIZONTAL );
 	
 	m_bitmapNoNetWarning = new wxStaticBitmap( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
-	m_bNoNetWarning->Add( m_bitmapNoNetWarning, 0, wxTOP|wxBOTTOM|wxLEFT, 8 );
+	m_bNoNetWarning->Add( m_bitmapNoNetWarning, 0, wxTOP, 5 );
 	
 	m_staticText18 = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("No net will result\nin an unconnected \ncopper island."), wxDefaultPosition, wxDefaultSize, 0 );
 	m_staticText18->Wrap( -1 );
 	m_bNoNetWarning->Add( m_staticText18, 0, wxALL, 5 );
 	
 	
-	bSizerLowerRight->Add( m_bNoNetWarning, 1, wxEXPAND|wxTOP, 25 );
+	bSizerLowerRight->Add( m_bNoNetWarning, 1, wxEXPAND, 5 );
 	
 	
 	m_ExportableSetupSizer->Add( bSizerLowerRight, 0, wxEXPAND, 5 );
@@ -283,9 +283,36 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
 	
 	this->SetSizer( m_MainBoxSizer );
 	this->Layout();
-	m_MainBoxSizer->Fit( this );
+	
+	// Connect Events
+	this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_COPPER_ZONE_BASE::OnClose ) );
+	m_ListNetNameSelection->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_COPPER_ZONE_BASE::OnUpdateUI ), NULL, this );
+	m_NetDisplayOption->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnNetSortingOptionSelected ), NULL, this );
+	m_DoNotShowNetNameFilter->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnRunFiltersButtonClick ), NULL, this );
+	m_ShowNetNameFilter->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnRunFiltersButtonClick ), NULL, this );
+	m_buttonRunFilter->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnRunFiltersButtonClick ), NULL, this );
+	m_cornerSmoothingChoice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnCornerSmoothingModeChoice ), NULL, this );
+	m_PadInZoneOpt->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnPadsInZoneClick ), NULL, this );
+	m_GridStyleCtrl->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnStyleSelection ), NULL, this );
+	m_ExportSetupButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::ExportSetupToOtherCopperZones ), NULL, this );
+	m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnButtonCancelClick ), NULL, this );
+	m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnButtonOkClick ), NULL, this );
 }
 
 DIALOG_COPPER_ZONE_BASE::~DIALOG_COPPER_ZONE_BASE()
 {
+	// Disconnect Events
+	this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_COPPER_ZONE_BASE::OnClose ) );
+	m_ListNetNameSelection->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_COPPER_ZONE_BASE::OnUpdateUI ), NULL, this );
+	m_NetDisplayOption->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnNetSortingOptionSelected ), NULL, this );
+	m_DoNotShowNetNameFilter->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnRunFiltersButtonClick ), NULL, this );
+	m_ShowNetNameFilter->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnRunFiltersButtonClick ), NULL, this );
+	m_buttonRunFilter->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnRunFiltersButtonClick ), NULL, this );
+	m_cornerSmoothingChoice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnCornerSmoothingModeChoice ), NULL, this );
+	m_PadInZoneOpt->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnPadsInZoneClick ), NULL, this );
+	m_GridStyleCtrl->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnStyleSelection ), NULL, this );
+	m_ExportSetupButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::ExportSetupToOtherCopperZones ), NULL, this );
+	m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnButtonCancelClick ), NULL, this );
+	m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_ZONE_BASE::OnButtonOkClick ), NULL, this );
+	
 }
diff --git a/pcbnew/dialogs/dialog_copper_zones_base.fbp b/pcbnew/dialogs/dialog_copper_zones_base.fbp
index 3871abd..98b6b10 100644
--- a/pcbnew/dialogs/dialog_copper_zones_base.fbp
+++ b/pcbnew/dialogs/dialog_copper_zones_base.fbp
@@ -10,7 +10,7 @@
         <property name="disconnect_python_events">0</property>
         <property name="embedded_files_path">res</property>
         <property name="encoding">UTF-8</property>
-        <property name="event_generation">table</property>
+        <property name="event_generation">connect</property>
         <property name="file">dialog_copper_zones_base</property>
         <property name="first_id">1000</property>
         <property name="help_provider">none</property>
@@ -24,7 +24,7 @@
         <property name="skip_php_events">1</property>
         <property name="skip_python_events">1</property>
         <property name="ui_table">UI</property>
-        <property name="use_enum">1</property>
+        <property name="use_enum">0</property>
         <property name="use_microsoft_bom">0</property>
         <object class="Dialog" expanded="1">
             <property name="aui_managed">0</property>
@@ -44,7 +44,7 @@
             <property name="minimum_size"></property>
             <property name="name">DIALOG_COPPER_ZONE_BASE</property>
             <property name="pos"></property>
-            <property name="size">-1,-1</property>
+            <property name="size">572,479</property>
             <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
             <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
             <property name="title">Copper Zone Properties</property>
@@ -2581,7 +2581,7 @@
                                         <property name="gripper">0</property>
                                         <property name="hidden">0</property>
                                         <property name="id">wxID_ANY</property>
-                                        <property name="label">Fill mode:</property>
+                                        <property name="label">Segments / 360 deg:</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -2589,7 +2589,7 @@
                                         <property name="minimize_button">0</property>
                                         <property name="minimum_size"></property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_staticTextFillMode</property>
+                                        <property name="name">m_staticTextSegmCnt</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -2650,7 +2650,7 @@
                                         <property name="caption"></property>
                                         <property name="caption_visible">1</property>
                                         <property name="center_pane">0</property>
-                                        <property name="choices">&quot;Polygon&quot; &quot;Segment&quot;</property>
+                                        <property name="choices">&quot;16&quot; &quot;32&quot;</property>
                                         <property name="close_button">1</property>
                                         <property name="context_help"></property>
                                         <property name="context_menu">1</property>
@@ -2664,7 +2664,7 @@
                                         <property name="font"></property>
                                         <property name="gripper">0</property>
                                         <property name="hidden">0</property>
-                                        <property name="id">ID_M_FILLMODECTRL</property>
+                                        <property name="id">ID_M_ARCAPPROXIMATIONOPT</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -2672,7 +2672,7 @@
                                         <property name="minimize_button">0</property>
                                         <property name="minimum_size"></property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_FillModeCtrl</property>
+                                        <property name="name">m_ArcApproximationOpt</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -2752,7 +2752,7 @@
                                         <property name="gripper">0</property>
                                         <property name="hidden">0</property>
                                         <property name="id">wxID_ANY</property>
-                                        <property name="label">Segments / 360 deg:</property>
+                                        <property name="label">Outline slope:</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -2760,7 +2760,7 @@
                                         <property name="minimize_button">0</property>
                                         <property name="minimum_size"></property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_staticTextSegmCnt</property>
+                                        <property name="name">m_staticTextSlope</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -2821,7 +2821,7 @@
                                         <property name="caption"></property>
                                         <property name="caption_visible">1</property>
                                         <property name="center_pane">0</property>
-                                        <property name="choices">&quot;16&quot; &quot;32&quot;</property>
+                                        <property name="choices">&quot;Arbitrary&quot; &quot;H, V, and 45 deg only&quot;</property>
                                         <property name="close_button">1</property>
                                         <property name="context_help"></property>
                                         <property name="context_menu">1</property>
@@ -2835,7 +2835,7 @@
                                         <property name="font"></property>
                                         <property name="gripper">0</property>
                                         <property name="hidden">0</property>
-                                        <property name="id">ID_M_ARCAPPROXIMATIONOPT</property>
+                                        <property name="id">ID_M_ORIENTEDGESOPT</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -2843,7 +2843,178 @@
                                         <property name="minimize_button">0</property>
                                         <property name="minimum_size"></property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_ArcApproximationOpt</property>
+                                        <property name="name">m_OrientEdgesOpt</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="selection">0</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnChoice"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Outline style:</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticTextStyle</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxChoice" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="choices">&quot;Line&quot; &quot;Hatched&quot; &quot;Fully hatched&quot;</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">ID_M_OUTLINEAPPEARANCECTRL</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_OutlineAppearanceCtrl</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -2934,7 +3105,7 @@
                                         <property name="gripper">0</property>
                                         <property name="hidden">0</property>
                                         <property name="id">wxID_ANY</property>
-                                        <property name="label">Outline slope:</property>
+                                        <property name="label">Fill style:</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -2942,7 +3113,7 @@
                                         <property name="minimize_button">0</property>
                                         <property name="minimum_size"></property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_staticTextSlope</property>
+                                        <property name="name">m_staticTextGridStyle</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -3003,7 +3174,7 @@
                                         <property name="caption"></property>
                                         <property name="caption_visible">1</property>
                                         <property name="center_pane">0</property>
-                                        <property name="choices">&quot;Arbitrary&quot; &quot;H, V, and 45 deg only&quot;</property>
+                                        <property name="choices">&quot;Solid shape&quot; &quot;Grid pattern HV&quot; &quot;Grid pattern 45&quot;</property>
                                         <property name="close_button">1</property>
                                         <property name="context_help"></property>
                                         <property name="context_menu">1</property>
@@ -3017,7 +3188,7 @@
                                         <property name="font"></property>
                                         <property name="gripper">0</property>
                                         <property name="hidden">0</property>
-                                        <property name="id">ID_M_ORIENTEDGESOPT</property>
+                                        <property name="id">ID_M_FILLMODECTRL</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -3025,7 +3196,7 @@
                                         <property name="minimize_button">0</property>
                                         <property name="minimum_size"></property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_OrientEdgesOpt</property>
+                                        <property name="name">m_GridStyleCtrl</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -3048,7 +3219,7 @@
                                         <property name="window_name"></property>
                                         <property name="window_style"></property>
                                         <event name="OnChar"></event>
-                                        <event name="OnChoice"></event>
+                                        <event name="OnChoice">OnStyleSelection</event>
                                         <event name="OnEnterWindow"></event>
                                         <event name="OnEraseBackground"></event>
                                         <event name="OnKeyDown"></event>
@@ -3073,11 +3244,11 @@
                                         <event name="OnUpdateUI"></event>
                                     </object>
                                 </object>
-                                <object class="sizeritem" expanded="0">
+                                <object class="sizeritem" expanded="1">
                                     <property name="border">5</property>
-                                    <property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
+                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
                                     <property name="proportion">0</property>
-                                    <object class="wxStaticText" expanded="0">
+                                    <object class="wxStaticText" expanded="1">
                                         <property name="BottomDockable">1</property>
                                         <property name="LeftDockable">1</property>
                                         <property name="RightDockable">1</property>
@@ -3105,7 +3276,7 @@
                                         <property name="gripper">0</property>
                                         <property name="hidden">0</property>
                                         <property name="id">wxID_ANY</property>
-                                        <property name="label">Outline style:</property>
+                                        <property name="label">Grid style: thickness</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
@@ -3113,7 +3284,7 @@
                                         <property name="minimize_button">0</property>
                                         <property name="minimum_size"></property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_staticTextStyle</property>
+                                        <property name="name">m_staticTextGrindThickness</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -3156,11 +3327,11 @@
                                         <event name="OnUpdateUI"></event>
                                     </object>
                                 </object>
-                                <object class="sizeritem" expanded="0">
+                                <object class="sizeritem" expanded="1">
                                     <property name="border">5</property>
-                                    <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
+                                    <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
                                     <property name="proportion">0</property>
-                                    <object class="wxChoice" expanded="0">
+                                    <object class="wxTextCtrl" expanded="1">
                                         <property name="BottomDockable">1</property>
                                         <property name="LeftDockable">1</property>
                                         <property name="RightDockable">1</property>
@@ -3174,7 +3345,6 @@
                                         <property name="caption"></property>
                                         <property name="caption_visible">1</property>
                                         <property name="center_pane">0</property>
-                                        <property name="choices">&quot;Line&quot; &quot;Hatched&quot; &quot;Fully hatched&quot;</property>
                                         <property name="close_button">1</property>
                                         <property name="context_help"></property>
                                         <property name="context_menu">1</property>
@@ -3188,15 +3358,16 @@
                                         <property name="font"></property>
                                         <property name="gripper">0</property>
                                         <property name="hidden">0</property>
-                                        <property name="id">ID_M_OUTLINEAPPEARANCECTRL</property>
+                                        <property name="id">wxID_ANY</property>
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
+                                        <property name="maxlength"></property>
                                         <property name="min_size"></property>
                                         <property name="minimize_button">0</property>
                                         <property name="minimum_size"></property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_OutlineAppearanceCtrl</property>
+                                        <property name="name">m_tcGridStyleThickness</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -3204,7 +3375,6 @@
                                         <property name="pin_button">1</property>
                                         <property name="pos"></property>
                                         <property name="resize">Resizable</property>
-                                        <property name="selection">0</property>
                                         <property name="show">1</property>
                                         <property name="size"></property>
                                         <property name="style"></property>
@@ -3215,11 +3385,185 @@
                                         <property name="validator_style">wxFILTER_NONE</property>
                                         <property name="validator_type">wxDefaultValidator</property>
                                         <property name="validator_variable"></property>
+                                        <property name="value"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnText"></event>
+                                        <event name="OnTextEnter"></event>
+                                        <event name="OnTextMaxLen"></event>
+                                        <event name="OnTextURL"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="1">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="1">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Grid style: grid size</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticTextStyleSize</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="1">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxTextCtrl" expanded="1">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="maxlength"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_tcGridStyleSize</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="value"></property>
                                         <property name="window_extra_style"></property>
                                         <property name="window_name"></property>
                                         <property name="window_style"></property>
                                         <event name="OnChar"></event>
-                                        <event name="OnChoice"></event>
                                         <event name="OnEnterWindow"></event>
                                         <event name="OnEraseBackground"></event>
                                         <event name="OnKeyDown"></event>
@@ -3241,12 +3585,16 @@
                                         <event name="OnRightUp"></event>
                                         <event name="OnSetFocus"></event>
                                         <event name="OnSize"></event>
+                                        <event name="OnText"></event>
+                                        <event name="OnTextEnter"></event>
+                                        <event name="OnTextMaxLen"></event>
+                                        <event name="OnTextURL"></event>
                                         <event name="OnUpdateUI"></event>
                                     </object>
                                 </object>
                                 <object class="sizeritem" expanded="1">
-                                    <property name="border">25</property>
-                                    <property name="flag">wxEXPAND|wxTOP</property>
+                                    <property name="border">5</property>
+                                    <property name="flag">wxEXPAND</property>
                                     <property name="proportion">1</property>
                                     <object class="wxBoxSizer" expanded="1">
                                         <property name="minimum_size"></property>
@@ -3254,8 +3602,8 @@
                                         <property name="orient">wxHORIZONTAL</property>
                                         <property name="permission">protected</property>
                                         <object class="sizeritem" expanded="1">
-                                            <property name="border">8</property>
-                                            <property name="flag">wxTOP|wxBOTTOM|wxLEFT</property>
+                                            <property name="border">5</property>
+                                            <property name="flag">wxTOP</property>
                                             <property name="proportion">0</property>
                                             <object class="wxStaticBitmap" expanded="1">
                                                 <property name="BottomDockable">1</property>
diff --git a/pcbnew/dialogs/dialog_copper_zones_base.h b/pcbnew/dialogs/dialog_copper_zones_base.h
index ed761d7..cf18b87 100644
--- a/pcbnew/dialogs/dialog_copper_zones_base.h
+++ b/pcbnew/dialogs/dialog_copper_zones_base.h
@@ -1,8 +1,8 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Dec 30 2017)
+// C++ code generated with wxFormBuilder (version Aug  4 2017)
 // http://www.wxformbuilder.org/
 //
-// PLEASE DO *NOT* EDIT THIS FILE!
+// PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
 #ifndef __DIALOG_COPPER_ZONES_BASE_H__
@@ -11,7 +11,9 @@
 #include <wx/artprov.h>
 #include <wx/xrc/xmlres.h>
 #include <wx/intl.h>
+class DIALOG_SHIM;
 class TEXT_CTRL_EVAL;
+class wxListView;
 
 #include "dialog_shim.h"
 #include <wx/string.h>
@@ -36,47 +38,31 @@ class TEXT_CTRL_EVAL;
 
 ///////////////////////////////////////////////////////////////////////////
 
+#define ID_DIALOG_COPPER_ZONE_BASE 1000
+#define ID_NETNAME_SELECTION 1001
+#define ID_M_NETDISPLAYOPTION 1002
+#define ID_TEXTCTRL_NETNAMES_FILTER 1003
+#define wxID_APPLY_FILTERS 1004
+#define ID_CORNER_SMOOTHING 1005
+#define ID_M_CORNERSMOOTHINGCTRL 1006
+#define ID_M_PADINZONEOPT 1007
+#define wxID_ANTIPAD_SIZE 1008
+#define wxID_COPPER_BRIDGE_VALUE 1009
+#define ID_M_PRIORITYLEVELCTRL 1010
+#define ID_M_ARCAPPROXIMATIONOPT 1011
+#define ID_M_ORIENTEDGESOPT 1012
+#define ID_M_OUTLINEAPPEARANCECTRL 1013
+#define ID_M_FILLMODECTRL 1014
+#define wxID_BUTTON_EXPORT 1015
+
 ///////////////////////////////////////////////////////////////////////////////
 /// Class DIALOG_COPPER_ZONE_BASE
 ///////////////////////////////////////////////////////////////////////////////
 class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
 {
-	DECLARE_EVENT_TABLE()
 	private:
-		
-		// Private event handlers
-		void _wxFB_OnClose( wxCloseEvent& event ){ OnClose( event ); }
-		void _wxFB_OnUpdateUI( wxUpdateUIEvent& event ){ OnUpdateUI( event ); }
-		void _wxFB_OnNetSortingOptionSelected( wxCommandEvent& event ){ OnNetSortingOptionSelected( event ); }
-		void _wxFB_OnRunFiltersButtonClick( wxCommandEvent& event ){ OnRunFiltersButtonClick( event ); }
-		void _wxFB_OnCornerSmoothingModeChoice( wxCommandEvent& event ){ OnCornerSmoothingModeChoice( event ); }
-		void _wxFB_OnPadsInZoneClick( wxCommandEvent& event ){ OnPadsInZoneClick( event ); }
-		void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); }
-		void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); }
-		void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); }
-		
 	
 	protected:
-		enum
-		{
-			ID_DIALOG_COPPER_ZONE_BASE = 1000,
-			ID_NETNAME_SELECTION,
-			ID_M_NETDISPLAYOPTION,
-			ID_TEXTCTRL_NETNAMES_FILTER,
-			wxID_APPLY_FILTERS,
-			ID_CORNER_SMOOTHING,
-			ID_M_CORNERSMOOTHINGCTRL,
-			ID_M_PADINZONEOPT,
-			wxID_ANTIPAD_SIZE,
-			wxID_COPPER_BRIDGE_VALUE,
-			ID_M_PRIORITYLEVELCTRL,
-			ID_M_FILLMODECTRL,
-			ID_M_ARCAPPROXIMATIONOPT,
-			ID_M_ORIENTEDGESOPT,
-			ID_M_OUTLINEAPPEARANCECTRL,
-			wxID_BUTTON_EXPORT
-		};
-		
 		wxBoxSizer* m_MainBoxSizer;
 		wxStaticText* m_staticTextLayers;
 		wxListView* m_LayerSelectionCtrl;
@@ -105,14 +91,18 @@ class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
 		TEXT_CTRL_EVAL* m_CopperWidthValue;
 		wxStaticText* m_staticTextPriorityLevel;
 		wxSpinCtrl* m_PriorityLevelCtrl;
-		wxStaticText* m_staticTextFillMode;
-		wxChoice* m_FillModeCtrl;
 		wxStaticText* m_staticTextSegmCnt;
 		wxChoice* m_ArcApproximationOpt;
 		wxStaticText* m_staticTextSlope;
 		wxChoice* m_OrientEdgesOpt;
 		wxStaticText* m_staticTextStyle;
 		wxChoice* m_OutlineAppearanceCtrl;
+		wxStaticText* m_staticTextGridStyle;
+		wxChoice* m_GridStyleCtrl;
+		wxStaticText* m_staticTextGrindThickness;
+		wxTextCtrl* m_tcGridStyleThickness;
+		wxStaticText* m_staticTextStyleSize;
+		wxTextCtrl* m_tcGridStyleSize;
 		wxBoxSizer* m_bNoNetWarning;
 		wxStaticBitmap* m_bitmapNoNetWarning;
 		wxStaticText* m_staticText18;
@@ -128,6 +118,7 @@ class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
 		virtual void OnRunFiltersButtonClick( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnCornerSmoothingModeChoice( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnPadsInZoneClick( wxCommandEvent& event ) { event.Skip(); }
+		virtual void OnStyleSelection( wxCommandEvent& event ) { event.Skip(); }
 		virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnButtonCancelClick( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnButtonOkClick( wxCommandEvent& event ) { event.Skip(); }
@@ -135,7 +126,7 @@ class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
 	
 	public:
 		
-		DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID id = ID_DIALOG_COPPER_ZONE_BASE, const wxString& title = _("Copper Zone Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); 
+		DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID id = ID_DIALOG_COPPER_ZONE_BASE, const wxString& title = _("Copper Zone Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 572,479 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); 
 		~DIALOG_COPPER_ZONE_BASE();
 	
 };
diff --git a/pcbnew/dialogs/dialog_non_copper_zones_properties.cpp b/pcbnew/dialogs/dialog_non_copper_zones_properties.cpp
index 2f28693..02cbd35 100644
--- a/pcbnew/dialogs/dialog_non_copper_zones_properties.cpp
+++ b/pcbnew/dialogs/dialog_non_copper_zones_properties.cpp
@@ -4,9 +4,9 @@
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
- * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
+ * Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
  * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@xxxxxxxxxxx>
- * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -59,6 +59,7 @@ private:
     ZONE_SETTINGS*  m_ptr;
     ZONE_SETTINGS   m_settings;     // working copy of zone settings
 
+    void OnStyleSelection( wxCommandEvent& event ) override;
     void OnOkClick( wxCommandEvent& event ) override;
     void OnCancelClick( wxCommandEvent& event ) override;
     void Init();
@@ -81,7 +82,6 @@ ZONE_EDIT_T InvokeNonCopperZonesEditor( PCB_BASE_FRAME* aParent,
                                         ZONE_CONTAINER* aZone, ZONE_SETTINGS* aSettings )
 {
     DIALOG_NON_COPPER_ZONES_EDITOR  dlg( aParent, aZone, aSettings );
-
     ZONE_EDIT_T result = ZONE_EDIT_T( dlg.ShowModal() );
 
     return result;
@@ -119,6 +119,21 @@ void DIALOG_NON_COPPER_ZONES_EDITOR::Init()
     if( m_settings.m_Zone_45_Only )
         m_OrientEdgesOpt->SetSelection( 1 );
 
+    switch( m_settings.m_FillMode )
+    {
+    case ZFM_GRID_PATTERN_HV:
+        m_GridStyleCtrl->SetSelection( 1 ); break;
+    case ZFM_GRID_PATTERN_45:
+        m_GridStyleCtrl->SetSelection( 2 ); break;
+    default:
+        m_GridStyleCtrl->SetSelection( 3 ); break;
+    }
+
+    msg = StringFromValue( g_UserUnit, m_settings.m_ZoneGridPatternThickness );
+    m_tcGridStyleThickness->SetValue( msg );
+    msg = StringFromValue( g_UserUnit, m_settings.m_ZoneGridPatternGap );
+    m_tcGridStyleSize->SetValue( msg );
+
     switch( m_settings.m_Zone_HatchingStyle )
     {
     case ZONE_CONTAINER::NO_HATCH:
@@ -172,6 +187,10 @@ void DIALOG_NON_COPPER_ZONES_EDITOR::Init()
         ctrlWidth = std::max( ctrlWidth, tsize.x );
     }
 
+    // Enable/Disable some widgets
+    wxCommandEvent event;
+    OnStyleSelection( event );
+
     // The most easy way to ensure the right size is to use wxLIST_AUTOSIZE
     // unfortunately this option does not work well both on
     // wxWidgets 2.8 ( column witdth too small), and
@@ -185,6 +204,14 @@ void DIALOG_NON_COPPER_ZONES_EDITOR::Init()
 }
 
 
+void DIALOG_NON_COPPER_ZONES_EDITOR::OnStyleSelection( wxCommandEvent& event )
+{
+    bool enable = m_GridStyleCtrl->GetSelection() >= 1;
+    m_tcGridStyleThickness->Enable( enable );
+    m_tcGridStyleSize->Enable( enable );
+}
+
+
 void DIALOG_NON_COPPER_ZONES_EDITOR::OnOkClick( wxCommandEvent& event )
 {
     wxString txtvalue = m_ZoneMinThicknessCtrl->GetValue();
@@ -198,7 +225,21 @@ void DIALOG_NON_COPPER_ZONES_EDITOR::OnOkClick( wxCommandEvent& event )
         return;
     }
 
-    m_settings.m_FillMode = ZFM_POLYGONS;  // Use always polygon fill mode
+    switch( m_GridStyleCtrl->GetSelection() )
+    {
+    case 0:
+        m_settings.m_FillMode = ZFM_POLYGONS; break;
+    case 1:
+        m_settings.m_FillMode = ZFM_GRID_PATTERN_HV; break;
+    case 2:
+        m_settings.m_FillMode = ZFM_GRID_PATTERN_45; break;
+    }
+
+    txtvalue = m_tcGridStyleThickness->GetValue();
+    m_settings.m_ZoneGridPatternThickness = ValueFromString( g_UserUnit, txtvalue );
+
+    txtvalue = m_tcGridStyleSize->GetValue();
+    m_settings.m_ZoneGridPatternGap = ValueFromString( g_UserUnit, txtvalue );
 
     switch( m_OutlineAppearanceCtrl->GetSelection() )
     {
diff --git a/pcbnew/dialogs/dialog_non_copper_zones_properties_base.cpp b/pcbnew/dialogs/dialog_non_copper_zones_properties_base.cpp
index e73b760..336ed5a 100644
--- a/pcbnew/dialogs/dialog_non_copper_zones_properties_base.cpp
+++ b/pcbnew/dialogs/dialog_non_copper_zones_properties_base.cpp
@@ -1,8 +1,8 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Oct 30 2017)
+// C++ code generated with wxFormBuilder (version Aug  4 2017)
 // http://www.wxformbuilder.org/
 //
-// PLEASE DO *NOT* EDIT THIS FILE!
+// PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
 #include "dialog_non_copper_zones_properties_base.h"
@@ -10,6 +10,7 @@
 ///////////////////////////////////////////////////////////////////////////
 
 BEGIN_EVENT_TABLE( DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE, DIALOG_SHIM )
+	EVT_CHOICE( wxID_ANY, DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE::_wxFB_OnStyleSelection )
 	EVT_BUTTON( wxID_CANCEL, DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE::_wxFB_OnCancelClick )
 	EVT_BUTTON( wxID_OK, DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE::_wxFB_OnOkClick )
 END_EVENT_TABLE()
@@ -37,8 +38,8 @@ DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE::DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE(
 	
 	m_UpperSizer->Add( bSizerLeft, 1, wxEXPAND, 5 );
 	
-	wxBoxSizer* bSizerRight;
-	bSizerRight = new wxBoxSizer( wxVERTICAL );
+	wxBoxSizer* bSizerMiddle;
+	bSizerMiddle = new wxBoxSizer( wxVERTICAL );
 	
 	wxStaticBoxSizer* m_OutilinesBoxOpt;
 	m_OutilinesBoxOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Outlines Options") ), wxVERTICAL );
@@ -56,7 +57,37 @@ DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE::DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE(
 	m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxEXPAND, 5 );
 	
 	
-	bSizerRight->Add( m_OutilinesBoxOpt, 0, wxEXPAND|wxALL, 5 );
+	bSizerMiddle->Add( m_OutilinesBoxOpt, 0, wxEXPAND|wxALL, 5 );
+	
+	
+	m_UpperSizer->Add( bSizerMiddle, 0, wxEXPAND, 5 );
+	
+	wxBoxSizer* bSizerRight;
+	bSizerRight = new wxBoxSizer( wxVERTICAL );
+	
+	m_staticTextGridStyle = new wxStaticText( this, wxID_ANY, _("Fill style:"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticTextGridStyle->Wrap( -1 );
+	bSizerRight->Add( m_staticTextGridStyle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	wxString m_GridStyleCtrlChoices[] = { _("Solid shape"), _("Grid pattern HV"), _("Grid pattern 45") };
+	int m_GridStyleCtrlNChoices = sizeof( m_GridStyleCtrlChoices ) / sizeof( wxString );
+	m_GridStyleCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_GridStyleCtrlNChoices, m_GridStyleCtrlChoices, 0 );
+	m_GridStyleCtrl->SetSelection( 0 );
+	bSizerRight->Add( m_GridStyleCtrl, 0, wxALL|wxEXPAND, 5 );
+	
+	m_staticTextGrindThickness = new wxStaticText( this, wxID_ANY, _("Grid style: thickness"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticTextGrindThickness->Wrap( -1 );
+	bSizerRight->Add( m_staticTextGrindThickness, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_tcGridStyleThickness = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+	bSizerRight->Add( m_tcGridStyleThickness, 0, wxALL|wxEXPAND, 5 );
+	
+	m_staticTextStyleSize = new wxStaticText( this, wxID_ANY, _("Grid style: grid size"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticTextStyleSize->Wrap( -1 );
+	bSizerRight->Add( m_staticTextStyleSize, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_tcGridStyleSize = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+	bSizerRight->Add( m_tcGridStyleSize, 0, wxALL|wxEXPAND, 5 );
 	
 	m_MinThicknessValueTitle = new wxStaticText( this, wxID_ANY, _("Zone min thickness value:"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_MinThicknessValueTitle->Wrap( -1 );
@@ -86,7 +117,6 @@ DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE::DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE(
 	
 	this->SetSizer( m_MainSizer );
 	this->Layout();
-	m_MainSizer->Fit( this );
 	
 	this->Centre( wxBOTH );
 }
diff --git a/pcbnew/dialogs/dialog_non_copper_zones_properties_base.fbp b/pcbnew/dialogs/dialog_non_copper_zones_properties_base.fbp
index 3532707..734924b 100644
--- a/pcbnew/dialogs/dialog_non_copper_zones_properties_base.fbp
+++ b/pcbnew/dialogs/dialog_non_copper_zones_properties_base.fbp
@@ -44,7 +44,7 @@
             <property name="minimum_size"></property>
             <property name="name">DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE</property>
             <property name="pos"></property>
-            <property name="size">-1,-1</property>
+            <property name="size">571,299</property>
             <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
             <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
             <property name="title">Non Copper Zones Properties</property>
@@ -307,7 +307,7 @@
                             <property name="proportion">0</property>
                             <object class="wxBoxSizer" expanded="1">
                                 <property name="minimum_size"></property>
-                                <property name="name">bSizerRight</property>
+                                <property name="name">bSizerMiddle</property>
                                 <property name="orient">wxVERTICAL</property>
                                 <property name="permission">none</property>
                                 <object class="sizeritem" expanded="1">
@@ -505,6 +505,536 @@
                                         </object>
                                     </object>
                                 </object>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="1">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">0</property>
+                            <object class="wxBoxSizer" expanded="1">
+                                <property name="minimum_size"></property>
+                                <property name="name">bSizerRight</property>
+                                <property name="orient">wxVERTICAL</property>
+                                <property name="permission">none</property>
+                                <object class="sizeritem" expanded="1">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="1">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Fill style:</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticTextGridStyle</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="1">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALL|wxEXPAND</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxChoice" expanded="1">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="choices">&quot;Solid shape&quot; &quot;Grid pattern HV&quot; &quot;Grid pattern 45&quot;</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_GridStyleCtrl</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="selection">0</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnChoice">OnStyleSelection</event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="1">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="1">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Grid style: thickness</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticTextGrindThickness</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="1">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALL|wxEXPAND</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxTextCtrl" expanded="1">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="maxlength"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_tcGridStyleThickness</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="value"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnText"></event>
+                                        <event name="OnTextEnter"></event>
+                                        <event name="OnTextMaxLen"></event>
+                                        <event name="OnTextURL"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="1">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="1">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Grid style: grid size</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticTextStyleSize</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="1">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALL|wxEXPAND</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxTextCtrl" expanded="1">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="maxlength"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_tcGridStyleSize</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="value"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnText"></event>
+                                        <event name="OnTextEnter"></event>
+                                        <event name="OnTextMaxLen"></event>
+                                        <event name="OnTextURL"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
                                 <object class="sizeritem" expanded="1">
                                     <property name="border">5</property>
                                     <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
diff --git a/pcbnew/dialogs/dialog_non_copper_zones_properties_base.h b/pcbnew/dialogs/dialog_non_copper_zones_properties_base.h
index dd42509..85b30d8 100644
--- a/pcbnew/dialogs/dialog_non_copper_zones_properties_base.h
+++ b/pcbnew/dialogs/dialog_non_copper_zones_properties_base.h
@@ -1,8 +1,8 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Oct 30 2017)
+// C++ code generated with wxFormBuilder (version Aug  4 2017)
 // http://www.wxformbuilder.org/
 //
-// PLEASE DO *NOT* EDIT THIS FILE!
+// PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
 #ifndef __DIALOG_NON_COPPER_ZONES_PROPERTIES_BASE_H__
@@ -11,6 +11,9 @@
 #include <wx/artprov.h>
 #include <wx/xrc/xmlres.h>
 #include <wx/intl.h>
+class DIALOG_SHIM;
+class wxListView;
+
 #include "dialog_shim.h"
 #include <wx/string.h>
 #include <wx/stattext.h>
@@ -22,6 +25,7 @@
 #include <wx/sizer.h>
 #include <wx/radiobox.h>
 #include <wx/statbox.h>
+#include <wx/choice.h>
 #include <wx/textctrl.h>
 #include <wx/statline.h>
 #include <wx/button.h>
@@ -38,6 +42,7 @@ class DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE : public DIALOG_SHIM
 	private:
 		
 		// Private event handlers
+		void _wxFB_OnStyleSelection( wxCommandEvent& event ){ OnStyleSelection( event ); }
 		void _wxFB_OnCancelClick( wxCommandEvent& event ){ OnCancelClick( event ); }
 		void _wxFB_OnOkClick( wxCommandEvent& event ){ OnOkClick( event ); }
 		
@@ -47,6 +52,12 @@ class DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE : public DIALOG_SHIM
 		wxListView* m_LayerSelectionCtrl;
 		wxRadioBox* m_OrientEdgesOpt;
 		wxRadioBox* m_OutlineAppearanceCtrl;
+		wxStaticText* m_staticTextGridStyle;
+		wxChoice* m_GridStyleCtrl;
+		wxStaticText* m_staticTextGrindThickness;
+		wxTextCtrl* m_tcGridStyleThickness;
+		wxStaticText* m_staticTextStyleSize;
+		wxTextCtrl* m_tcGridStyleSize;
 		wxStaticText* m_MinThicknessValueTitle;
 		wxTextCtrl* m_ZoneMinThicknessCtrl;
 		wxStaticLine* m_staticline1;
@@ -55,13 +66,14 @@ class DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE : public DIALOG_SHIM
 		wxButton* m_sdbSizerButtonsCancel;
 		
 		// Virtual event handlers, overide them in your derived class
+		virtual void OnStyleSelection( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
 		
 	
 	public:
 		
-		DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER ); 
+		DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 571,299 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER ); 
 		~DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE();
 	
 };
diff --git a/pcbnew/kicad_plugin.cpp b/pcbnew/kicad_plugin.cpp
index eef47d7..cb363f3 100644
--- a/pcbnew/kicad_plugin.cpp
+++ b/pcbnew/kicad_plugin.cpp
@@ -1692,9 +1692,18 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
     m_out->Print( 0, " (clearance %s))\n",
                   FMT_IU( aZone->GetZoneClearance() ).c_str() );
 
-    m_out->Print( aNestLevel+1, "(min_thickness %s)\n",
+    m_out->Print( aNestLevel+1, "(min_thickness %s)",
                   FMT_IU( aZone->GetMinThickness() ).c_str() );
 
+    if( aZone->GetFillMode() == ZFM_GRID_PATTERN_HV || aZone->GetFillMode() == ZFM_GRID_PATTERN_45 )
+    {
+        m_out->Print( 0, " (pattern_thickness %s) (pattern_gap %s)",
+                         FMT_IU( aZone->GetGridPatternThickness() ).c_str(),
+                         FMT_IU( aZone->GetGridPatternGap() ).c_str() );
+    }
+
+    m_out->Print( 0, "\n" );
+
     if( aZone->GetIsKeepout() )
     {
         m_out->Print( aNestLevel+1, "(keepout (tracks %s) (vias %s) (copperpour %s))\n",
@@ -1710,8 +1719,12 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
         m_out->Print( 0, " yes" );
 
     // Default is polygon filled.
-    if( aZone->GetFillMode() )
+    if( aZone->GetFillMode() == ZFM_SEGMENTS )
         m_out->Print( 0, " (mode segment)" );
+    else if( aZone->GetFillMode() == ZFM_GRID_PATTERN_HV )
+        m_out->Print( 0, " (mode grid_pattern)" );
+    else if( aZone->GetFillMode() == ZFM_GRID_PATTERN_45 )
+        m_out->Print( 0, " (mode grid_pattern_45)" );
 
     m_out->Print( 0, " (arc_segments %d) (thermal_gap %s) (thermal_bridge_width %s)",
                   aZone->GetArcSegmentCount(),
diff --git a/pcbnew/pcb_parser.cpp b/pcbnew/pcb_parser.cpp
index 1de9777..0a8a707 100644
--- a/pcbnew/pcb_parser.cpp
+++ b/pcbnew/pcb_parser.cpp
@@ -2944,6 +2944,16 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER()
             NeedRIGHT();
             break;
 
+        case T_pattern_thickness:
+            zone->SetGridPatternThickness( parseBoardUnits( T_min_thickness ) );
+            NeedRIGHT();
+            break;
+
+        case T_pattern_gap:
+            zone->SetGridPatternGap( parseBoardUnits( T_min_thickness ) );
+            NeedRIGHT();
+            break;
+
         case T_fill:
             for( token = NextTok();  token != T_RIGHT;  token = NextTok() )
             {
@@ -2959,11 +2969,18 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER()
                 case T_mode:
                     token = NextTok();
 
-                    if( token != T_segment && token != T_polygon )
-                        Expecting( "segment or polygon" );
-
-                    // @todo Create an enum for fill modes.
-                    zone->SetFillMode( token == T_polygon ? ZFM_POLYGONS : ZFM_SEGMENTS );
+                    if( token != T_segment && token != T_grid_pattern &&
+                        token != T_grid_pattern_45 && token != T_polygon )
+                        Expecting( "segment, grid_pattern, grid_pattern_45 or polygon" );
+
+                    if( token == T_segment )    // deprecated
+                        zone->SetFillMode( ZFM_SEGMENTS );
+                    else if( token == T_grid_pattern )
+                        zone->SetFillMode( ZFM_GRID_PATTERN_HV );
+                    else if( token == T_grid_pattern_45 )
+                        zone->SetFillMode( ZFM_GRID_PATTERN_45 );
+                    else
+                        zone->SetFillMode( ZFM_POLYGONS );
                     NeedRIGHT();
                     break;
 
@@ -3138,7 +3155,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER()
     {
         if( !zone->IsOnCopperLayer() )
         {
-            zone->SetFillMode( ZFM_POLYGONS );
+            //zone->SetFillMode( ZFM_POLYGONS );
             zone->SetNetCode( NETINFO_LIST::UNCONNECTED );
         }
 
diff --git a/pcbnew/zone_filler.cpp b/pcbnew/zone_filler.cpp
index 32a98fd..40953fb 100644
--- a/pcbnew/zone_filler.cpp
+++ b/pcbnew/zone_filler.cpp
@@ -61,7 +61,7 @@ extern void CreateThermalReliefPadPolygon( SHAPE_POLY_SET& aCornerBuffer,
         double aCorrectionFactor,
         double aThermalRot );
 
-static double s_thermalRot = 450;    // angle of stubs in thermal reliefs for round pads
+static double s_thermalRot = 450;   // angle of stubs in thermal reliefs for round pads
 static const bool s_DumpZonesWhenFilling = false;
 
 ZONE_FILLER::ZONE_FILLER(  BOARD* aBoard, COMMIT* aCommit ) :
@@ -717,6 +717,11 @@ void ZONE_FILLER::computeRawFilledAreas( const ZONE_CONTAINER* aZone,
     // needed by Gerber files and Fracture()
     solidAreas.BooleanSubtract( holes, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
 
+    if( aZone->GetFillMode() == ZFM_GRID_PATTERN_HV )
+        addGridPatternOnZone( aZone, solidAreas, ZFM_GRID_PATTERN_HV );
+    else if( aZone->GetFillMode() == ZFM_GRID_PATTERN_45 )
+        addGridPatternOnZone( aZone, solidAreas, ZFM_GRID_PATTERN_45 );
+
     if( s_DumpZonesWhenFilling )
         dumper->Write( &solidAreas, "solid-areas-minus-holes" );
 
@@ -728,6 +733,16 @@ void ZONE_FILLER::computeRawFilledAreas( const ZONE_CONTAINER* aZone,
 
     aFinalPolys = areas_fractured;
 
+    if( !aZone->IsOnCopperLayer() )
+    {
+        aRawPolys = aFinalPolys;
+
+        if( s_DumpZonesWhenFilling )
+            dumper->EndGroup();
+
+        return;
+    }
+
     SHAPE_POLY_SET thermalHoles;
 
     // Test thermal stubs connections and add polygons to remove unconnected stubs.
@@ -783,6 +798,7 @@ bool ZONE_FILLER::fillSingleZone( const ZONE_CONTAINER* aZone, SHAPE_POLY_SET& a
     if ( !aZone->BuildSmoothedPoly( smoothedPoly ) )
         return false;
 
+#if 0
     if( aZone->IsOnCopperLayer() )
     {
         computeRawFilledAreas( aZone, smoothedPoly, aRawPolys, aFinalPolys );
@@ -794,7 +810,9 @@ bool ZONE_FILLER::fillSingleZone( const ZONE_CONTAINER* aZone, SHAPE_POLY_SET& a
         aFinalPolys.Inflate( -aZone->GetMinThickness() / 2, 16 );
         aFinalPolys.Fracture( SHAPE_POLY_SET::PM_FAST );
     }
-
+#else
+    computeRawFilledAreas( aZone, smoothedPoly, aRawPolys, aFinalPolys );
+#endif
     return true;
 }
 
@@ -1134,3 +1152,73 @@ void ZONE_FILLER::buildUnconnectedThermalStubsPolygonList( SHAPE_POLY_SET& aCorn
         }
     }
 }
+
+
+void ZONE_FILLER::addGridPatternOnZone( const ZONE_CONTAINER* aZone, SHAPE_POLY_SET& aRawPolys,
+                                        ZONE_FILL_MODE aPatternType ) const
+{
+    // Build grid:
+
+    // obvously line thickness must be > zone min thickness. However, it should be
+    // the case because the zone dialog setup ensure that. However, it can happens
+    // if a board file was edited by hand by a python script
+    int thickness = std::max( aZone->GetGridPatternThickness(), aZone->GetMinThickness()+2 );
+    int linethickness = thickness - aZone->GetMinThickness();
+    int gridsize = thickness + aZone->GetGridPatternGap();
+
+    SHAPE_POLY_SET filledPolys = aRawPolys;
+    // if aPatternType == ZFM_GRID_PATTERN_45, use a area that contains the 45 deg rotated bbox,
+    // and after rotate the result 45 deg.
+    // This is not optimal in calculation time, but easy to calculate
+    if( aPatternType == ZFM_GRID_PATTERN_45 )
+    {
+        filledPolys.Rotate( -M_PI/4, VECTOR2I( 0,0 ) );
+    }
+
+    BOX2I bbox = filledPolys.BBox( 0 );
+
+
+    // Build holes
+    SHAPE_POLY_SET holes;
+
+    for( int xx = 0; ; xx++ )
+    {
+        int xpos = xx * gridsize;
+
+        if( xpos > bbox.GetWidth() )
+            break;
+
+        for( int yy = 0; ; yy++ )
+        {
+            int ypos = yy * gridsize;
+
+            if( ypos > bbox.GetHeight() )
+                break;
+
+            // Generate hole
+            holes.NewOutline();
+            VECTOR2I corner( xpos, ypos );;
+            holes.Append( corner );
+            corner.x += gridsize - linethickness;
+            holes.Append( corner );
+            corner.y += gridsize - linethickness;
+            holes.Append( corner );
+            corner.x = xpos;
+            holes.Append( corner );
+        }
+    }
+
+    holes.Move( bbox.GetPosition() );
+
+    // Clamp holes to the area of filled zones with a outline thickness
+    // > aZone->GetMinThickness() to be sure the thermal pads can be built
+    int outline_margin = std::max( (aZone->GetMinThickness()*10)/9, linethickness/2 );
+    filledPolys.Inflate( -outline_margin, 16 );
+    holes.BooleanIntersection( filledPolys, SHAPE_POLY_SET::PM_FAST );
+
+    if( aPatternType == ZFM_GRID_PATTERN_45 )
+        holes.Rotate( M_PI/4, VECTOR2I( 0,0 ) );
+
+    // create grid
+    aRawPolys.BooleanSubtract( aRawPolys, holes, SHAPE_POLY_SET::PM_FAST );
+}
diff --git a/pcbnew/zone_filler.h b/pcbnew/zone_filler.h
index 2bd4b5d..47002c4 100644
--- a/pcbnew/zone_filler.h
+++ b/pcbnew/zone_filler.h
@@ -116,6 +116,17 @@ private:
             SHAPE_POLY_SET& aRawPolys,
             SHAPE_POLY_SET& aFinalPolys ) const;
 
+    /**
+     * for zones having the ZONE_FILL_MODE::ZFM_GRID_PATTERN, create a grid pattern
+     * in filled areas of aZone, giving to the filled polygons a fill style like a grid
+     * @param aZone is the zone to modify
+     * @param aRawPolys: A reference to a SHAPE_POLY_SET buffer containing the initial
+     * filled areas, and after adding the grid pattern, the modified filled areas with holes
+     * @param aPatternType gives the grid shape (ZFM_GRID_PATTERN_HV or ZFM_GRID_PATTERN_45 deg)
+     */
+    void addGridPatternOnZone( const ZONE_CONTAINER* aZone, SHAPE_POLY_SET& aRawPolys,
+                               ZONE_FILL_MODE aPatternType ) const;
+
     BOARD* m_board;
     COMMIT* m_commit;
     PROGRESS_REPORTER* m_progressReporter;
diff --git a/pcbnew/zone_settings.cpp b/pcbnew/zone_settings.cpp
index 3f2db00..f8986c5 100644
--- a/pcbnew/zone_settings.cpp
+++ b/pcbnew/zone_settings.cpp
@@ -43,6 +43,8 @@ ZONE_SETTINGS::ZONE_SETTINGS()
     m_ZoneClearance      = Mils2iu( ZONE_CLEARANCE_MIL );
     // Min thickness value in filled areas (this is the minimum width of copper to fill solid areas) :
     m_ZoneMinThickness   = Mils2iu( ZONE_THICKNESS_MIL );
+    m_ZoneGridPatternThickness = 0;   // good value if m_FillMode = ZFM_POLYGONS
+    m_ZoneGridPatternGap = 0;           // good value if m_FillMode = ZFM_POLYGONS
     m_NetcodeSelection   = 0;                                   // Net code selection for the current zone
     m_CurrentZone_Layer  = F_Cu;                                // Layer used to create the current zone
     m_Zone_HatchingStyle = ZONE_CONTAINER::DIAGONAL_EDGE;       // Option to show the zone area (outlines only, short hatches or full hatches
@@ -76,6 +78,8 @@ ZONE_SETTINGS& ZONE_SETTINGS::operator << ( const ZONE_CONTAINER& aSource )
     m_FillMode           = aSource.GetFillMode();
     m_ZoneClearance      = aSource.GetZoneClearance();
     m_ZoneMinThickness   = aSource.GetMinThickness();
+    m_ZoneGridPatternThickness = aSource.GetGridPatternThickness();
+    m_ZoneGridPatternGap  = aSource.GetGridPatternGap();
     m_NetcodeSelection   = aSource.GetNetCode();
     m_Zone_HatchingStyle = aSource.GetHatchStyle();
     m_ArcToSegmentsCount = aSource.GetArcSegmentCount();
@@ -102,6 +106,8 @@ void ZONE_SETTINGS::ExportSetting( ZONE_CONTAINER& aTarget, bool aFullExport ) c
     aTarget.SetFillMode( m_FillMode );
     aTarget.SetZoneClearance( m_ZoneClearance );
     aTarget.SetMinThickness( m_ZoneMinThickness );
+    aTarget.SetGridPatternThickness( m_ZoneGridPatternThickness );
+    aTarget.SetGridPatternGap( m_ZoneGridPatternGap );
     aTarget.SetArcSegmentCount( m_ArcToSegmentsCount );
     aTarget.SetThermalReliefGap( m_ThermalReliefGap );
     aTarget.SetThermalReliefCopperBridge( m_ThermalReliefCopperBridge );
diff --git a/pcbnew/zone_settings.h b/pcbnew/zone_settings.h
index 4fbe985..81e4394 100644
--- a/pcbnew/zone_settings.h
+++ b/pcbnew/zone_settings.h
@@ -36,8 +36,10 @@
 
 enum ZONE_FILL_MODE
 {
-    ZFM_POLYGONS = 0, // fill zone with polygons
-    ZFM_SEGMENTS = 1  // fill zone with segments (legacy)
+    ZFM_POLYGONS = 0,       // fill zone with polygons
+    ZFM_SEGMENTS = 1,       // fill zone with segments (legacy)
+    ZFM_GRID_PATTERN_HV = 2,   // fill zone using a grid pattern, H and V line dir
+    ZFM_GRID_PATTERN_45 = 3,   // fill zone using a grid pattern, 45 deg line dir
 };
 
 /**
@@ -62,6 +64,9 @@ public:
 
     int  m_ZoneClearance;               ///< Clearance value
     int  m_ZoneMinThickness;            ///< Min thickness value in filled areas
+    int  m_ZoneGridPatternThickness;    ///< Grid style shape: thickness of lines (if 0 -> solid shape)
+    int  m_ZoneGridPatternGap;         ///< Grid style shape: clearance between lines (0 -> solid shape)
+
     int  m_NetcodeSelection;            ///< Net code selection for the current zone
 
     LSET m_Layers;
diff --git a/pcbnew/zones_by_polygon.cpp b/pcbnew/zones_by_polygon.cpp
index 6ee19f6..af3f3ad 100644
--- a/pcbnew/zones_by_polygon.cpp
+++ b/pcbnew/zones_by_polygon.cpp
@@ -894,13 +894,12 @@ void PCB_EDIT_FRAME::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* aZone )
     else if( IsCopperLayer( aZone->GetLayer() ) )
     {
         // edit a zone on a copper layer
-
         zoneInfo << *aZone;
-
         edited = InvokeCopperZonesEditor( this, &zoneInfo );
     }
     else
     {
+        zoneInfo << *aZone;
         edited = InvokeNonCopperZonesEditor( this, aZone, &zoneInfo );
     }
 
-- 
1.9.5.msysgit.1


Follow ups

References