← Back to team overview

kicad-developers team mailing list archive

Re: [Patch] Add an option to select a reference point and an anchor in pcbnew move exactly dialog

 

Wayne,


I finally came around to updating the patch.


I have not found a better term than "user origin" so I added a tooltip. I'm very much open to suggestions for better a term from anyone with a good idea. In any case, I intend to contribute a description of the new functionality and the different origins to the pcbnew documentation so that users can at least look up what is meant if it is unclear.


As always, happy to incorporate anyones feedback if this can be improved.


Kind regards,


Robbert


________________________________
From: Wayne Stambaugh <stambaughw@xxxxxxxxx>
Sent: Wednesday, March 22, 2017 4:59 PM
To: Robbert Lagerweij; KiCad Developers
Subject: Re: [Kicad-developers] [Patch] Add an option to select a reference point and an anchor in pcbnew move exactly dialog

Robbert,

To make life easier for both of us, I'm going to commit this patch as is
as long as you are willing to create another patch with the following
changes:

Rename "User origin" to something more descriptive or add a tool tip to
prevent confusion.

Add a fifth option to move relative the to drill/place file origin.  I
would actually find this option the most useful in my workflow.

I don't think greying out the user origin when it is not set is that
important but I'll accept that change as well.  Let me know and I'll
push your patch asap.

Thanks,

Wayne

On 3/22/2017 11:49 AM, Robbert Lagerweij wrote:
> Thanks for the feedback Wayne.
>
> In your test, did you explicitly set the user origin by pressing the
> space bar? The user origin is set to ( 0,0 ) by default, so if you
> haven't explicitly set the user origin to something else, it actually is
> "correct" behavior to move relative to the sheet origin.
>
> But now that you point it out, correct is not necessarily expected
> behavior. I can add a check to see if the user origin is actually set
> and disable the choice if it isn't.
>
> Would that be a useful addition?
>
> Robbert
>
> Sent with Outlook for Android
>
>
> ------------------------------------------------------------------------
> *From:* Kicad-developers
> <kicad-developers-bounces+rlagerweij=hotmail.com@xxxxxxxxxxxxxxxxxxx> on
> behalf of Wayne Stambaugh <stambaughw@xxxxxxxxx>
> *Sent:* Tuesday, March 21, 2017 4:51:36 PM
> *To:* kicad-developers@xxxxxxxxxxxxxxxxxxx
> *Subject:* Re: [Kicad-developers] [Patch] Add an option to select a
> reference point and an anchor in pcbnew move exactly dialog
>
> I did some quick testing on this and the move relative the user origin
> always moves relative to the page origin.  Everything else appears to
> work as expected.
>
> On 3/20/2017 4:31 PM, Robbert Lagerweij wrote:
>> Just a gentle bump on this patch. I have rebased it on master today.
>>
>> As said, I'm more than happy to rip out the legacy canvas stuff if this is the preference. Also happy to take on board any other comments or suggestions for changes.
>>
>> Kind regards,
>>
>> Robbert
>>
>>
>> From: Robbert Lagerweij <rlagerweij@xxxxxxxxxxx>
>> Sent: Tuesday, March 7, 2017 11:16 PM
>> To: John Beard
>> Cc: Tomasz Wlostowski; KiCad Developers
>> Subject: Re: [Kicad-developers] [Patch] Add an option to select a reference point and an anchor in pcbnew move exactly dialog
>>
>> Well, I finally had some time to look at improving this patch.
>>
>> This version has the coding style policy issue fixed ( and uncrustified ). Inspired by Thomas' comment I removed some duplication in the selection_tool code.
>> Given that I haven't received any further comments other than those of John, I've left the duplication between GAL and Legacy in.
>>
>> Please let me know if anyone has any further suggestions to improve this.
>>
>> Robbert
>>
>> From: John Beard <john.j.beard@xxxxxxxxx>
>> Sent: Tuesday, February 28, 2017 2:08 PM
>> To: Robbert Lagerweij
>> Cc: Tomasz Wlostowski; KiCad Developers
>> Subject: Re: [Kicad-developers] [Patch] Add an option to select a reference point and an anchor in pcbnew move exactly dialog
>>
>> On Tue, Feb 28, 2017 at 9:00 PM, Robbert Lagerweij
>> <rlagerweij@xxxxxxxxxxx> wrote:
>>> Hi Thomas,
>>>
>>> Thank you for your feedback. The duplication of code is indeed not how I
>>> would usually approach this but I thought it the lesser of two evils given
>>> the fact that the legacy stuff will most likely be deprecated immediately
>>> after the 5.0 release. This means that long term maintainability is not
>>> really affected since there will be limited chance of structural changes
>>> needed to that part of the code (presumably only 5.x bug fixes) .
>>
>> Since the work is done already in Legacy, I'd vote to leave it in.
>> Duplicating code is paradoxically probably the cleanest way, as when
>> legacy gets the chop, the GAL code will be unaffected. Combining the
>> code is probably more likely to need tidying up in future that isn't
>> just deleting one of the call sites.
>>
>>> If we go the GAL only route, since legacy and GAL use the same dialog, I
>>> could either create a new dialog which we only use in GAL or add additional
>>> logic to disable/hide the functionality in legacy.
>>
>> I think a new dialog is overkill and not worth the effort since the
>> legacy work is done. At most, a constructor parameter to hide relevant
>> UI controls would suffice, and be easy to rip out later.
>>
>> Cheers,
>>
>> John
>>
>>
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~kicad-developers
KiCad Developers in Launchpad<https://launchpad.net/~kicad-developers>
launchpad.net
This is the team working on development of the KiCad EDA application suite. This team has its own mailing list, which is used to discuss ideas and plan progress: http ...


>> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~kicad-developers
KiCad Developers in Launchpad<https://launchpad.net/~kicad-developers>
launchpad.net
This is the team working on development of the KiCad EDA application suite. This team has its own mailing list, which is used to discuss ideas and plan progress: http ...


>> More help   : https://help.launchpad.net/ListHelp
ListHelp - Launchpad Help<https://help.launchpad.net/ListHelp>
help.launchpad.net
Launchpad allows a team to set up a discussion mailing list which is open to all members of the team. For the technically minded, Launchpad mailing lists are managed ...


>>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
KiCad Developers in Launchpad<https://launchpad.net/~kicad-developers>
launchpad.net
This is the team working on development of the KiCad EDA application suite. This team has its own mailing list, which is used to discuss ideas and plan progress: http ...


> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
KiCad Developers in Launchpad<https://launchpad.net/~kicad-developers>
launchpad.net
This is the team working on development of the KiCad EDA application suite. This team has its own mailing list, which is used to discuss ideas and plan progress: http ...


> More help   : https://help.launchpad.net/ListHelp
ListHelp - Launchpad Help<https://help.launchpad.net/ListHelp>
help.launchpad.net
Launchpad allows a team to set up a discussion mailing list which is open to all members of the team. For the technically minded, Launchpad mailing lists are managed ...


From a6e4065771f643c548fc67f755f596c2f5f7a7de Mon Sep 17 00:00:00 2001
From: Robbert Lagerweij <rlagerweij@xxxxxxxxxxx>
Date: Sat, 22 Apr 2017 22:07:29 +0200
Subject: [PATCH] Pcbnew: add option to select origin & anchor in move exactly
 tool

This patch adds a radiobox to allow the user to select a reference point for
the move. The additional options are: User Origin (set with <space>),
Grid Origin and Sheet Origin (effectively making it an absolute coordinate).

A checkbox is added (where it makes sense) to allow overriding which point
within the component is put on top of the designated coordinate.

Fixes: lp:1460460
* https://bugs.launchpad.net/kicad/+bug/1460460
---
 include/class_eda_rect.h                  |    2 +
 include/tool/selection.h                  |    7 +
 pcbnew/block_module_editor.cpp            |   43 +-
 pcbnew/class_module.cpp                   |   20 +
 pcbnew/class_module.h                     |    3 +
 pcbnew/dialogs/dialog_move_exact.cpp      |  120 +-
 pcbnew/dialogs/dialog_move_exact.fbp      | 1894 +++++++++++++++++------------
 pcbnew/dialogs/dialog_move_exact.h        |   67 +-
 pcbnew/dialogs/dialog_move_exact_base.cpp |   70 +-
 pcbnew/dialogs/dialog_move_exact_base.h   |   13 +-
 pcbnew/edit.cpp                           |   68 +-
 pcbnew/modedit.cpp                        |   52 +-
 pcbnew/tools/edit_tool.cpp                |  102 +-
 pcbnew/tools/selection_tool.cpp           |   70 +-
 pcbnew/tools/selection_tool.h             |    1 +
 15 files changed, 1650 insertions(+), 882 deletions(-)

diff --git a/include/class_eda_rect.h b/include/class_eda_rect.h
index 8d74d87..8849942 100644
--- a/include/class_eda_rect.h
+++ b/include/class_eda_rect.h
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
  * Copyright (C) 2004-2014 KiCad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -109,6 +110,7 @@ public:
     const wxPoint& GetOrigin() const { return m_Pos; }
     const wxPoint& GetPosition() const { return m_Pos; }
     const wxPoint GetEnd() const { return wxPoint( m_Pos.x + m_Size.x, m_Pos.y + m_Size.y ); }
+    const wxPoint GetCenter() const { return wxPoint( m_Pos.x + ( m_Size.x / 2 ), m_Pos.y + ( m_Size.y / 2 ) ); }
 
     int GetWidth() const { return m_Size.x; }
     int GetHeight() const { return m_Size.y; }
diff --git a/include/tool/selection.h b/include/tool/selection.h
index 0fe0c84..7e4f488 100644
--- a/include/tool/selection.h
+++ b/include/tool/selection.h
@@ -124,6 +124,13 @@ public:
 
     const BOX2I ViewBBox() const override;
 
+    /// Returns the top left point of the selection area bounding box.
+    VECTOR2I GetPosition() const;
+
+    EDA_RECT    GetBoundingBox() const;
+    EDA_ITEM*   GetTopLeftItem( bool onlyModules = false ) const;
+    EDA_ITEM*   GetTopLeftModule() const;
+
     EDA_ITEM* operator[]( const int index ) const
     {
         if( index < 0 || (unsigned int) index >= m_items.size() )
diff --git a/pcbnew/block_module_editor.cpp b/pcbnew/block_module_editor.cpp
index a34eb58..b37eb8c 100644
--- a/pcbnew/block_module_editor.cpp
+++ b/pcbnew/block_module_editor.cpp
@@ -5,6 +5,7 @@
  * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@xxxxxxxxxxx>
  * Copyright (C) 2012 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
  * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -188,17 +189,49 @@ bool FOOTPRINT_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
 
         if( itemsCount )
         {
-            wxPoint translation;
-            double rotation = 0;
+            MOVE_PARAMETERS params;
+            params.allowOverride = false;
+
+            DIALOG_MOVE_EXACT dialog( this, params );
 
-            DIALOG_MOVE_EXACT dialog( this, translation, rotation  );
             int ret = dialog.ShowModal();
 
             if( ret == wxID_OK )
             {
                 SaveCopyInUndoList( currentModule, UR_CHANGED );
-                const wxPoint blockCentre = GetScreen()->m_BlockLocate.Centre();
-                MoveMarkedItemsExactly( currentModule, blockCentre, translation, rotation );
+                wxPoint blockCentre = GetScreen()->m_BlockLocate.Centre();
+
+                wxPoint origin;
+
+                switch( params.origin )
+                {
+                case RELATIVE_TO_USER_ORIGIN:
+                    origin = GetScreen()->m_O_Curseur;
+                    break;
+
+                case RELATIVE_TO_GRID_ORIGIN:
+                    origin = GetGridOrigin();
+                    break;
+
+                case RELATIVE_TO_DRILL_PLACE_ORIGIN:
+                    origin = GetAuxOrigin();
+                    break;
+
+                case RELATIVE_TO_SHEET_ORIGIN:
+                    origin = wxPoint( 0, 0 );
+                    break;
+
+                case RELATIVE_TO_CURRENT_POSITION:
+                    // relative movement means that only the translation values should be used:
+                    // -> set origin and blockCentre to zero
+                    origin = wxPoint( 0, 0 );
+                    blockCentre = wxPoint( 0, 0 );
+                    break;
+                }
+
+                wxPoint finalMoveVector = params.translation + origin - blockCentre;
+
+                MoveMarkedItemsExactly( currentModule, blockCentre, finalMoveVector, params.rotation );
             }
         }
         break;
diff --git a/pcbnew/class_module.cpp b/pcbnew/class_module.cpp
index acc07b6..ecfcd9a 100644
--- a/pcbnew/class_module.cpp
+++ b/pcbnew/class_module.cpp
@@ -653,6 +653,26 @@ D_PAD* MODULE::GetPad( const wxPoint& aPosition, LSET aLayerMask )
 }
 
 
+D_PAD* MODULE::GetTopLeftPad()
+{
+    D_PAD* topLeftPad = m_Pads;
+
+    for( D_PAD* p = m_Pads->Next(); p; p =  p->Next() )
+    {
+        wxPoint pnt = p->GetPosition(); // GetPosition() returns the center of the pad
+
+        if( ( pnt.x < topLeftPad->GetPosition().x ) ||
+            ( ( topLeftPad->GetPosition().x == pnt.x ) &&
+              ( pnt.y < topLeftPad->GetPosition().y ) ) )
+        {
+            topLeftPad = p;
+        }
+    }
+
+    return topLeftPad;
+}
+
+
 unsigned MODULE::GetPadCount( INCLUDE_NPTH_T aIncludeNPTH ) const
 {
     if( aIncludeNPTH )
diff --git a/pcbnew/class_module.h b/pcbnew/class_module.h
index 3fe661d..4718255 100644
--- a/pcbnew/class_module.h
+++ b/pcbnew/class_module.h
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
  * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -478,6 +479,8 @@ public:
      */
     D_PAD* GetPad( const wxPoint& aPosition, LSET aLayerMask = LSET::AllLayersMask() );
 
+    D_PAD* GetTopLeftPad();
+
     /**
      * GetPadCount
      * returns the number of pads.
diff --git a/pcbnew/dialogs/dialog_move_exact.cpp b/pcbnew/dialogs/dialog_move_exact.cpp
index d1e186d..1736086 100644
--- a/pcbnew/dialogs/dialog_move_exact.cpp
+++ b/pcbnew/dialogs/dialog_move_exact.cpp
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2014 John Beard, john.j.beard@xxxxxxxxx
  * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -34,11 +35,14 @@
 DIALOG_MOVE_EXACT::MOVE_EXACT_OPTIONS DIALOG_MOVE_EXACT::m_options;
 
 
-DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT( PCB_BASE_FRAME* aParent,
-                                      wxPoint& translation, double& rotation ):
+DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT(PCB_BASE_FRAME *aParent, MOVE_PARAMETERS &aParams ) :
     DIALOG_MOVE_EXACT_BASE( aParent ),
-    m_translation( translation ),
-    m_rotation( rotation )
+    m_translation( aParams.translation ),
+    m_rotation( aParams.rotation ),
+    m_origin( aParams.origin ),
+    m_anchor( aParams.anchor ),
+    m_allowOverride( aParams.allowOverride ),
+    m_editingFootprint( aParams.editingFootprint )
 {
     // set the unit labels
     m_xUnit->SetLabelText( GetAbbreviatedUnitsLabel( g_UserUnit ) );
@@ -53,6 +57,69 @@ DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT( PCB_BASE_FRAME* aParent,
     m_xEntry->SetValue( wxString::FromDouble( m_options.entry1 ) );
     m_yEntry->SetValue( wxString::FromDouble( m_options.entry2 ) );
     m_rotEntry->SetValue( wxString::FromDouble( m_options.entryRotation ) );
+    m_originChooser->SetSelection( m_options.origin );
+
+    if( m_allowOverride )
+    {
+        m_cbOverride->SetValue( m_options.overrideAnchor );
+        m_anchorChoice->Enable( m_options.overrideAnchor );
+
+        // ME_ANCHOR_FROM_LIBRARY is not in the wxChoice options so show the first choice instead
+        if( m_options.anchor == ANCHOR_FROM_LIBRARY )
+        {
+            m_anchorChoice->SetSelection( ANCHOR_TOP_LEFT_PAD );
+        }
+        else
+        {
+            m_anchorChoice->SetSelection( m_options.anchor );
+        }
+
+        if( m_options.origin == RELATIVE_TO_CURRENT_POSITION )
+        {
+            // no footprint override necessary in this mode
+            m_cbOverride->Disable();
+            m_anchorChoice->Disable();
+        }
+
+        if( m_editingFootprint )
+        {
+            // there is no point in showing the center footprint option when editing footprints
+            m_anchorChoice->Delete( ANCHOR_CENTER_FOOTPRINT );
+        }
+    }
+    else
+    {
+        // hide the checkbox and choice control if overides are not allowed
+        bMainSizer->Hide( bAnchorSizer, true );
+    }
+
+    if( wxPoint( 0, 0 ) == aParent->GetScreen()->m_O_Curseur )
+    {
+        // disble the user origin option when the user oigin is not set
+        m_originChooser->Enable( RELATIVE_TO_USER_ORIGIN, false );
+        m_originChooser->SetItemToolTip( RELATIVE_TO_USER_ORIGIN,
+                                         wxString( "The user origin is currently not set\n"
+                                                   "Set it by using the <space> hotkey" ) );
+    }
+
+    if( wxPoint( 0, 0 ) == aParent->GetGridOrigin() )
+    {
+        // disble the grid origin option when the user oigin is not set
+        m_originChooser->Enable( RELATIVE_TO_GRID_ORIGIN, false );
+        m_originChooser->SetItemToolTip( RELATIVE_TO_GRID_ORIGIN,
+                                         wxString( "The grid origin is currently not set\n"
+                                                   "Set it by using the tool in the <place> menu" ) );
+    }
+
+    if( wxPoint( 0, 0 ) == aParent->GetAuxOrigin() )
+    {
+        // disble the grid origin option when the drill/place oigin is not set
+        m_originChooser->Enable( RELATIVE_TO_DRILL_PLACE_ORIGIN, false );
+        m_originChooser->SetItemToolTip( RELATIVE_TO_DRILL_PLACE_ORIGIN,
+                                         wxString( "The drill/place origin is currently not set\n"
+                                                   "Set it by using the tool in the <place> menu" ) );
+    }
+
     updateDlgTexts( m_polarCoords->IsChecked() );
 
     m_stdButtonsOK->SetDefault();
@@ -129,6 +196,37 @@ void DIALOG_MOVE_EXACT::OnPolarChanged( wxCommandEvent& event )
 }
 
 
+void DIALOG_MOVE_EXACT::OnOriginChanged( wxCommandEvent& event )
+{
+    if( m_originChooser->GetSelection() == RELATIVE_TO_CURRENT_POSITION )
+    {
+        //no need to override the achor in this mode since the reference in the current position
+        m_cbOverride->Disable();
+        m_anchorChoice->Disable();
+    }
+    else if( m_allowOverride )
+    {
+        m_cbOverride->Enable();
+
+        if( m_cbOverride->IsChecked() )
+            m_anchorChoice->Enable();
+    }
+}
+
+
+void DIALOG_MOVE_EXACT::OnOverrideChanged( wxCommandEvent& event )
+{
+    if( m_cbOverride->IsChecked() )
+    {
+        m_anchorChoice->Enable();
+    }
+    else
+    {
+        m_anchorChoice->Disable();
+    }
+}
+
+
 void DIALOG_MOVE_EXACT::updateDlgTexts( bool aPolar )
 {
     if( aPolar )
@@ -174,6 +272,16 @@ void DIALOG_MOVE_EXACT::OnClear( wxCommandEvent& event )
 void DIALOG_MOVE_EXACT::OnOkClick( wxCommandEvent& event )
 {
     m_rotation = DoubleValueFromString( DEGREES, m_rotEntry->GetValue() );
+    m_origin = static_cast<MOVE_EXACT_ORIGIN>( m_originChooser->GetSelection() );
+
+    if( m_cbOverride->IsChecked() && m_allowOverride )
+    {
+        m_anchor = static_cast<MOVE_EXACT_ANCHOR>( m_anchorChoice->GetSelection() );
+    }
+    else
+    {
+        m_anchor = ANCHOR_FROM_LIBRARY;
+    }
 
     // for the output, we only deliver a Cartesian vector
     bool ok = GetTranslationInIU( m_translation, m_polarCoords->IsChecked() );
@@ -185,7 +293,9 @@ void DIALOG_MOVE_EXACT::OnOkClick( wxCommandEvent& event )
         m_options.entry1 = DoubleValueFromString( UNSCALED_UNITS, m_xEntry->GetValue() );
         m_options.entry2 = DoubleValueFromString( UNSCALED_UNITS, m_yEntry->GetValue() );
         m_options.entryRotation = DoubleValueFromString( UNSCALED_UNITS, m_rotEntry->GetValue() );
-
+        m_options.origin = m_origin;
+        m_options.anchor = static_cast<MOVE_EXACT_ANCHOR>( m_anchorChoice->GetSelection() );
+        m_options.overrideAnchor = m_cbOverride->IsChecked();
         event.Skip();
     }
 }
diff --git a/pcbnew/dialogs/dialog_move_exact.fbp b/pcbnew/dialogs/dialog_move_exact.fbp
index f26f053..0cd1571 100644
--- a/pcbnew/dialogs/dialog_move_exact.fbp
+++ b/pcbnew/dialogs/dialog_move_exact.fbp
@@ -44,7 +44,7 @@
             <property name="minimum_size">-1,-1</property>
             <property name="name">DIALOG_MOVE_EXACT_BASE</property>
             <property name="pos"></property>
-            <property name="size">-1,-1</property>
+            <property name="size">509,277</property>
             <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
             <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
             <property name="title">Move Item</property>
@@ -92,7 +92,7 @@
                 <property name="minimum_size"></property>
                 <property name="name">bMainSizer</property>
                 <property name="orient">wxVERTICAL</property>
-                <property name="permission">none</property>
+                <property name="permission">protected</property>
                 <object class="sizeritem" expanded="0">
                     <property name="border">5</property>
                     <property name="flag">wxALL|wxEXPAND</property>
@@ -183,627 +183,1071 @@
                 </object>
                 <object class="sizeritem" expanded="1">
                     <property name="border">5</property>
-                    <property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
+                    <property name="flag">wxEXPAND</property>
                     <property name="proportion">1</property>
-                    <object class="wxFlexGridSizer" expanded="1">
-                        <property name="cols">4</property>
-                        <property name="flexible_direction">wxBOTH</property>
-                        <property name="growablecols">1</property>
-                        <property name="growablerows"></property>
-                        <property name="hgap">0</property>
+                    <object class="wxBoxSizer" expanded="1">
                         <property name="minimum_size"></property>
-                        <property name="name">fgSizer2</property>
-                        <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                        <property name="name">bMiddleSizer</property>
+                        <property name="orient">wxHORIZONTAL</property>
                         <property name="permission">none</property>
-                        <property name="rows">0</property>
-                        <property name="vgap">0</property>
                         <object class="sizeritem" expanded="1">
                             <property name="border">5</property>
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</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">x:</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_xLabel</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">-1,-1</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="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="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_xEntry</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">0</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">OnTextFocusLost</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">wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL</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">mm</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_xUnit</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">wxALIGN_CENTER_VERTICAL|wxALL</property>
-                            <property name="proportion">0</property>
-                            <object class="wxButton" 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">0</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">Reset</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_clearX</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">wxBU_EXACTFIT</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="OnButtonClick">OnClear</event>
-                                <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">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</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">y:</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_yLabel</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="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="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_yEntry</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">0</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">OnTextFocusLost</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">wxALIGN_CENTER_VERTICAL|wxALL</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">mm</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="flag">wxALL|wxBOTTOM|wxEXPAND|wxTOP</property>
+                            <property name="proportion">1</property>
+                            <object class="wxFlexGridSizer" expanded="0">
+                                <property name="cols">4</property>
+                                <property name="flexible_direction">wxBOTH</property>
+                                <property name="growablecols">1</property>
+                                <property name="growablerows"></property>
+                                <property name="hgap">0</property>
                                 <property name="minimum_size"></property>
-                                <property name="moveable">1</property>
-                                <property name="name">m_yUnit</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>
+                                <property name="name">fgInputSizer</property>
+                                <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                                <property name="permission">none</property>
+                                <property name="rows">0</property>
+                                <property name="vgap">0</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</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">x:</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_xLabel</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">-1,-1</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">wxALL|wxEXPAND</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxTextCtrl" 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="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_xEntry</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">0</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">OnTextFocusLost</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="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL</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">mm</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_xUnit</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">wxALIGN_CENTER_VERTICAL|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxButton" 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">0</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">Reset</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_clearX</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">wxBU_EXACTFIT</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="OnButtonClick">OnClear</event>
+                                        <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">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</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">y:</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_yLabel</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">wxALL|wxEXPAND</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxTextCtrl" 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="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_yEntry</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">0</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">OnTextFocusLost</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="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</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">mm</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_yUnit</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">wxALIGN_CENTER_VERTICAL|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxButton" 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">0</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">Reset</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_clearY</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">wxBU_EXACTFIT</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="OnButtonClick">OnClear</event>
+                                        <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">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</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">Item rotation:</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_rotLabel</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">wxALL|wxEXPAND</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxTextCtrl" 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="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_rotEntry</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">0</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">OnTextFocusLost</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="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</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">deg</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_rotUnit</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">wxALIGN_CENTER_VERTICAL|wxALL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxButton" 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">0</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">Reset</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_clearRot</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">wxBU_EXACTFIT</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="OnButtonClick">OnClear</event>
+                                        <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>
                         </object>
-                        <object class="sizeritem" expanded="1">
+                        <object class="sizeritem" expanded="0">
                             <property name="border">5</property>
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
+                            <property name="flag">wxALL</property>
                             <property name="proportion">0</property>
-                            <object class="wxButton" expanded="1">
+                            <object class="wxRadioBox" expanded="0">
                                 <property name="BottomDockable">1</property>
                                 <property name="LeftDockable">1</property>
                                 <property name="RightDockable">1</property>
@@ -817,10 +1261,10 @@
                                 <property name="caption"></property>
                                 <property name="caption_visible">1</property>
                                 <property name="center_pane">0</property>
+                                <property name="choices">&quot;Current Position&quot; &quot;User Origin&quot; &quot;Grid Origin&quot; &quot;Drill/Place Origin&quot; &quot;Sheet Origin&quot;</property>
                                 <property name="close_button">1</property>
                                 <property name="context_help"></property>
                                 <property name="context_menu">1</property>
-                                <property name="default">0</property>
                                 <property name="default_pane">0</property>
                                 <property name="dock">Dock</property>
                                 <property name="dock_fixed">0</property>
@@ -832,7 +1276,8 @@
                                 <property name="gripper">0</property>
                                 <property name="hidden">0</property>
                                 <property name="id">wxID_ANY</property>
-                                <property name="label">Reset</property>
+                                <property name="label">Move relative to:</property>
+                                <property name="majorDimension">1</property>
                                 <property name="max_size"></property>
                                 <property name="maximize_button">0</property>
                                 <property name="maximum_size"></property>
@@ -840,7 +1285,7 @@
                                 <property name="minimize_button">0</property>
                                 <property name="minimum_size"></property>
                                 <property name="moveable">1</property>
-                                <property name="name">m_clearY</property>
+                                <property name="name">m_originChooser</property>
                                 <property name="pane_border">1</property>
                                 <property name="pane_position"></property>
                                 <property name="pane_size"></property>
@@ -848,9 +1293,10 @@
                                 <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">wxBU_EXACTFIT</property>
+                                <property name="style">wxRA_SPECIFY_COLS</property>
                                 <property name="subclass"></property>
                                 <property name="toolbar_pane">0</property>
                                 <property name="tooltip"></property>
@@ -861,90 +1307,6 @@
                                 <property name="window_extra_style"></property>
                                 <property name="window_name"></property>
                                 <property name="window_style"></property>
-                                <event name="OnButtonClick">OnClear</event>
-                                <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">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL</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">Item rotation:</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_rotLabel</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>
@@ -962,6 +1324,7 @@
                                 <event name="OnMouseEvents"></event>
                                 <event name="OnMouseWheel"></event>
                                 <event name="OnPaint"></event>
+                                <event name="OnRadioBox">OnOriginChanged</event>
                                 <event name="OnRightDClick"></event>
                                 <event name="OnRightDown"></event>
                                 <event name="OnRightUp"></event>
@@ -970,11 +1333,22 @@
                                 <event name="OnUpdateUI"></event>
                             </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">bAnchorSizer</property>
+                        <property name="orient">wxHORIZONTAL</property>
+                        <property name="permission">protected</property>
                         <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="0">
+                            <property name="flag">wxALL</property>
+                            <property name="proportion">1</property>
+                            <object class="wxCheckBox" expanded="1">
                                 <property name="BottomDockable">1</property>
                                 <property name="LeftDockable">1</property>
                                 <property name="RightDockable">1</property>
@@ -988,6 +1362,7 @@
                                 <property name="caption"></property>
                                 <property name="caption_visible">1</property>
                                 <property name="center_pane">0</property>
+                                <property name="checked">0</property>
                                 <property name="close_button">1</property>
                                 <property name="context_help"></property>
                                 <property name="context_menu">1</property>
@@ -1002,15 +1377,15 @@
                                 <property name="gripper">0</property>
                                 <property name="hidden">0</property>
                                 <property name="id">wxID_ANY</property>
+                                <property name="label">Override default component anchor with:</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_rotEntry</property>
+                                <property name="name">m_cbOverride</property>
                                 <property name="pane_border">1</property>
                                 <property name="pane_position"></property>
                                 <property name="pane_size"></property>
@@ -1028,98 +1403,11 @@
                                 <property name="validator_style">wxFILTER_NONE</property>
                                 <property name="validator_type">wxDefaultValidator</property>
                                 <property name="validator_variable"></property>
-                                <property name="value">0</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">OnTextFocusLost</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">wxALIGN_CENTER_VERTICAL|wxALL</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">deg</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_rotUnit</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="OnCheckBox">OnOverrideChanged</event>
                                 <event name="OnEnterWindow"></event>
                                 <event name="OnEraseBackground"></event>
                                 <event name="OnKeyDown"></event>
@@ -1146,9 +1434,9 @@
                         </object>
                         <object class="sizeritem" expanded="1">
                             <property name="border">5</property>
-                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
+                            <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property>
                             <property name="proportion">0</property>
-                            <object class="wxButton" expanded="1">
+                            <object class="wxChoice" expanded="1">
                                 <property name="BottomDockable">1</property>
                                 <property name="LeftDockable">1</property>
                                 <property name="RightDockable">1</property>
@@ -1162,10 +1450,10 @@
                                 <property name="caption"></property>
                                 <property name="caption_visible">1</property>
                                 <property name="center_pane">0</property>
+                                <property name="choices">&quot;top left pad&quot; &quot;footprint center&quot;</property>
                                 <property name="close_button">1</property>
                                 <property name="context_help"></property>
                                 <property name="context_menu">1</property>
-                                <property name="default">0</property>
                                 <property name="default_pane">0</property>
                                 <property name="dock">Dock</property>
                                 <property name="dock_fixed">0</property>
@@ -1177,7 +1465,6 @@
                                 <property name="gripper">0</property>
                                 <property name="hidden">0</property>
                                 <property name="id">wxID_ANY</property>
-                                <property name="label">Reset</property>
                                 <property name="max_size"></property>
                                 <property name="maximize_button">0</property>
                                 <property name="maximum_size"></property>
@@ -1185,7 +1472,7 @@
                                 <property name="minimize_button">0</property>
                                 <property name="minimum_size"></property>
                                 <property name="moveable">1</property>
-                                <property name="name">m_clearRot</property>
+                                <property name="name">m_anchorChoice</property>
                                 <property name="pane_border">1</property>
                                 <property name="pane_position"></property>
                                 <property name="pane_size"></property>
@@ -1193,9 +1480,10 @@
                                 <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">wxBU_EXACTFIT</property>
+                                <property name="style"></property>
                                 <property name="subclass"></property>
                                 <property name="toolbar_pane">0</property>
                                 <property name="tooltip"></property>
@@ -1206,8 +1494,8 @@
                                 <property name="window_extra_style"></property>
                                 <property name="window_name"></property>
                                 <property name="window_style"></property>
-                                <event name="OnButtonClick">OnClear</event>
                                 <event name="OnChar"></event>
+                                <event name="OnChoice"></event>
                                 <event name="OnEnterWindow"></event>
                                 <event name="OnEraseBackground"></event>
                                 <event name="OnKeyDown"></event>
@@ -1234,11 +1522,11 @@
                         </object>
                     </object>
                 </object>
-                <object class="sizeritem" expanded="1">
+                <object class="sizeritem" expanded="0">
                     <property name="border">5</property>
                     <property name="flag">wxEXPAND | wxALL</property>
                     <property name="proportion">0</property>
-                    <object class="wxStaticLine" expanded="1">
+                    <object class="wxStaticLine" expanded="0">
                         <property name="BottomDockable">1</property>
                         <property name="LeftDockable">1</property>
                         <property name="RightDockable">1</property>
diff --git a/pcbnew/dialogs/dialog_move_exact.h b/pcbnew/dialogs/dialog_move_exact.h
index eea605b..f851b2d 100644
--- a/pcbnew/dialogs/dialog_move_exact.h
+++ b/pcbnew/dialogs/dialog_move_exact.h
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2014 John Beard, john.j.beard@xxxxxxxxx
  * Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -29,17 +30,49 @@
 #include <vector>
 #include <dialog_move_exact_base.h>
 
+enum MOVE_EXACT_ORIGIN
+{
+    RELATIVE_TO_CURRENT_POSITION,
+    RELATIVE_TO_USER_ORIGIN,
+    RELATIVE_TO_GRID_ORIGIN,
+    RELATIVE_TO_DRILL_PLACE_ORIGIN,
+    RELATIVE_TO_SHEET_ORIGIN
+};
+
+
+enum MOVE_EXACT_ANCHOR
+{
+    ANCHOR_TOP_LEFT_PAD,
+    ANCHOR_CENTER_FOOTPRINT,
+    ANCHOR_FROM_LIBRARY
+};
+
+
+struct MOVE_PARAMETERS
+{
+    wxPoint             translation     = wxPoint( 0,0 );
+    double              rotation        = 0;
+    MOVE_EXACT_ORIGIN   origin          = RELATIVE_TO_CURRENT_POSITION;
+    MOVE_EXACT_ANCHOR   anchor          = ANCHOR_FROM_LIBRARY;
+    bool                allowOverride   = true;
+    bool                editingFootprint = false;
+};
+
+
 class DIALOG_MOVE_EXACT : public DIALOG_MOVE_EXACT_BASE
 {
 private:
 
-    wxPoint& m_translation;
-    double& m_rotation;
+    wxPoint&            m_translation;
+    double&             m_rotation;
+    MOVE_EXACT_ORIGIN&  m_origin;
+    MOVE_EXACT_ANCHOR&  m_anchor;
+    bool&               m_allowOverride;
+    bool&               m_editingFootprint;
 
 public:
     // Constructor and destructor
-    DIALOG_MOVE_EXACT( PCB_BASE_FRAME* aParent, wxPoint& translation,
-                       double& rotation );
+    DIALOG_MOVE_EXACT(PCB_BASE_FRAME *aParent, MOVE_PARAMETERS &aParams );
     ~DIALOG_MOVE_EXACT();
 
 private:
@@ -52,6 +85,9 @@ private:
     void OnPolarChanged( wxCommandEvent& event ) override;
     void OnClear( wxCommandEvent& event ) override;
 
+    void OnOriginChanged( wxCommandEvent& event ) override;
+    void OnOverrideChanged( wxCommandEvent& event ) override;
+
     void OnOkClick( wxCommandEvent& event ) override;
 
     /**
@@ -78,16 +114,22 @@ private:
      */
     struct MOVE_EXACT_OPTIONS
     {
-        bool    polarCoords;
-        double  entry1;
-        double  entry2;
-        double  entryRotation;
+        bool                polarCoords;
+        double              entry1;
+        double              entry2;
+        double              entryRotation;
+        MOVE_EXACT_ORIGIN   origin;
+        MOVE_EXACT_ANCHOR   anchor;
+        bool                overrideAnchor;
 
         MOVE_EXACT_OPTIONS():
-            polarCoords(false),
-            entry1(0),
-            entry2(0),
-            entryRotation(0)
+            polarCoords( false ),
+            entry1( 0 ),
+            entry2( 0 ),
+            entryRotation( 0 ),
+            origin( RELATIVE_TO_CURRENT_POSITION ),
+            anchor( ANCHOR_FROM_LIBRARY ),
+            overrideAnchor( false )
         {
         }
     };
@@ -97,3 +139,4 @@ private:
 };
 
 #endif      //  __DIALOG_MOVE_EXACT__
+
diff --git a/pcbnew/dialogs/dialog_move_exact_base.cpp b/pcbnew/dialogs/dialog_move_exact_base.cpp
index c7d237f..3ceabbc 100644
--- a/pcbnew/dialogs/dialog_move_exact_base.cpp
+++ b/pcbnew/dialogs/dialog_move_exact_base.cpp
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// C++ code generated with wxFormBuilder (version Jan 13 2017)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO "NOT" EDIT THIS FILE!
@@ -13,62 +13,87 @@ DIALOG_MOVE_EXACT_BASE::DIALOG_MOVE_EXACT_BASE( wxWindow* parent, wxWindowID id,
 {
 	this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
 	
-	wxBoxSizer* bMainSizer;
 	bMainSizer = new wxBoxSizer( wxVERTICAL );
 	
 	m_polarCoords = new wxCheckBox( this, wxID_ANY, _("Use polar coordinates"), wxDefaultPosition, wxDefaultSize, 0 );
 	bMainSizer->Add( m_polarCoords, 0, wxALL|wxEXPAND, 5 );
 	
-	wxFlexGridSizer* fgSizer2;
-	fgSizer2 = new wxFlexGridSizer( 0, 4, 0, 0 );
-	fgSizer2->AddGrowableCol( 1 );
-	fgSizer2->SetFlexibleDirection( wxBOTH );
-	fgSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+	wxBoxSizer* bMiddleSizer;
+	bMiddleSizer = new wxBoxSizer( wxHORIZONTAL );
+	
+	wxFlexGridSizer* fgInputSizer;
+	fgInputSizer = new wxFlexGridSizer( 0, 4, 0, 0 );
+	fgInputSizer->AddGrowableCol( 1 );
+	fgInputSizer->SetFlexibleDirection( wxBOTH );
+	fgInputSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 	
 	m_xLabel = new wxStaticText( this, wxID_ANY, _("x:"), wxDefaultPosition, wxSize( -1,-1 ), 0 );
 	m_xLabel->Wrap( -1 );
-	fgSizer2->Add( m_xLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+	fgInputSizer->Add( m_xLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
 	
 	m_xEntry = new wxTextCtrl( this, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
-	fgSizer2->Add( m_xEntry, 0, wxALL|wxEXPAND, 5 );
+	fgInputSizer->Add( m_xEntry, 0, wxALL|wxEXPAND, 5 );
 	
 	m_xUnit = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_xUnit->Wrap( -1 );
-	fgSizer2->Add( m_xUnit, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL, 5 );
+	fgInputSizer->Add( m_xUnit, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxALL, 5 );
 	
 	m_clearX = new wxButton( this, wxID_ANY, _("Reset"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
-	fgSizer2->Add( m_clearX, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+	fgInputSizer->Add( m_clearX, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
 	
 	m_yLabel = new wxStaticText( this, wxID_ANY, _("y:"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_yLabel->Wrap( -1 );
-	fgSizer2->Add( m_yLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+	fgInputSizer->Add( m_yLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
 	
 	m_yEntry = new wxTextCtrl( this, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
-	fgSizer2->Add( m_yEntry, 0, wxALL|wxEXPAND, 5 );
+	fgInputSizer->Add( m_yEntry, 0, wxALL|wxEXPAND, 5 );
 	
 	m_yUnit = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_yUnit->Wrap( -1 );
-	fgSizer2->Add( m_yUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+	fgInputSizer->Add( m_yUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
 	
 	m_clearY = new wxButton( this, wxID_ANY, _("Reset"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
-	fgSizer2->Add( m_clearY, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+	fgInputSizer->Add( m_clearY, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
 	
 	m_rotLabel = new wxStaticText( this, wxID_ANY, _("Item rotation:"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_rotLabel->Wrap( -1 );
-	fgSizer2->Add( m_rotLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
+	fgInputSizer->Add( m_rotLabel, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
 	
 	m_rotEntry = new wxTextCtrl( this, wxID_ANY, _("0"), wxDefaultPosition, wxDefaultSize, 0 );
-	fgSizer2->Add( m_rotEntry, 0, wxALL|wxEXPAND, 5 );
+	fgInputSizer->Add( m_rotEntry, 0, wxALL|wxEXPAND, 5 );
 	
 	m_rotUnit = new wxStaticText( this, wxID_ANY, _("deg"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_rotUnit->Wrap( -1 );
-	fgSizer2->Add( m_rotUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+	fgInputSizer->Add( m_rotUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
 	
 	m_clearRot = new wxButton( this, wxID_ANY, _("Reset"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
-	fgSizer2->Add( m_clearRot, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+	fgInputSizer->Add( m_clearRot, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+	
+	
+	bMiddleSizer->Add( fgInputSizer, 1, wxALL|wxBOTTOM|wxEXPAND|wxTOP, 5 );
+	
+	wxString m_originChooserChoices[] = { _("Current Position"), _("User Origin"), _("Grid Origin"), _("Drill/Place Origin"), _("Sheet Origin") };
+	int m_originChooserNChoices = sizeof( m_originChooserChoices ) / sizeof( wxString );
+	m_originChooser = new wxRadioBox( this, wxID_ANY, _("Move relative to:"), wxDefaultPosition, wxDefaultSize, m_originChooserNChoices, m_originChooserChoices, 1, wxRA_SPECIFY_COLS );
+	m_originChooser->SetSelection( 0 );
+	bMiddleSizer->Add( m_originChooser, 0, wxALL, 5 );
+	
+	
+	bMainSizer->Add( bMiddleSizer, 1, wxEXPAND, 5 );
+	
+	bAnchorSizer = new wxBoxSizer( wxHORIZONTAL );
+	
+	m_cbOverride = new wxCheckBox( this, wxID_ANY, _("Override default component anchor with:"), wxDefaultPosition, wxDefaultSize, 0 );
+	bAnchorSizer->Add( m_cbOverride, 1, wxALL, 5 );
+	
+	wxString m_anchorChoiceChoices[] = { _("top left pad"), _("footprint center") };
+	int m_anchorChoiceNChoices = sizeof( m_anchorChoiceChoices ) / sizeof( wxString );
+	m_anchorChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_anchorChoiceNChoices, m_anchorChoiceChoices, 0 );
+	m_anchorChoice->SetSelection( 0 );
+	bAnchorSizer->Add( m_anchorChoice, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
 	
 	
-	bMainSizer->Add( fgSizer2, 1, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+	bMainSizer->Add( bAnchorSizer, 0, wxEXPAND, 5 );
 	
 	m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 	bMainSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
@@ -85,7 +110,6 @@ DIALOG_MOVE_EXACT_BASE::DIALOG_MOVE_EXACT_BASE( wxWindow* parent, wxWindowID id,
 	
 	this->SetSizer( bMainSizer );
 	this->Layout();
-	bMainSizer->Fit( this );
 	
 	// Connect Events
 	this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_MOVE_EXACT_BASE::OnClose ) );
@@ -96,6 +120,8 @@ DIALOG_MOVE_EXACT_BASE::DIALOG_MOVE_EXACT_BASE( wxWindow* parent, wxWindowID id,
 	m_clearY->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
 	m_rotEntry->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_MOVE_EXACT_BASE::OnTextFocusLost ), NULL, this );
 	m_clearRot->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
+	m_originChooser->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnOriginChanged ), NULL, this );
+	m_cbOverride->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnOverrideChanged ), NULL, this );
 	m_stdButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnOkClick ), NULL, this );
 }
 
@@ -110,6 +136,8 @@ DIALOG_MOVE_EXACT_BASE::~DIALOG_MOVE_EXACT_BASE()
 	m_clearY->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
 	m_rotEntry->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( DIALOG_MOVE_EXACT_BASE::OnTextFocusLost ), NULL, this );
 	m_clearRot->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnClear ), NULL, this );
+	m_originChooser->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnOriginChanged ), NULL, this );
+	m_cbOverride->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnOverrideChanged ), NULL, this );
 	m_stdButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_MOVE_EXACT_BASE::OnOkClick ), NULL, this );
 	
 }
diff --git a/pcbnew/dialogs/dialog_move_exact_base.h b/pcbnew/dialogs/dialog_move_exact_base.h
index ecb3221..b691dcb 100644
--- a/pcbnew/dialogs/dialog_move_exact_base.h
+++ b/pcbnew/dialogs/dialog_move_exact_base.h
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Jun 17 2015)
+// C++ code generated with wxFormBuilder (version Jan 13 2017)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO "NOT" EDIT THIS FILE!
@@ -24,6 +24,8 @@ class DIALOG_SHIM;
 #include <wx/textctrl.h>
 #include <wx/button.h>
 #include <wx/sizer.h>
+#include <wx/radiobox.h>
+#include <wx/choice.h>
 #include <wx/statline.h>
 #include <wx/dialog.h>
 
@@ -38,6 +40,7 @@ class DIALOG_MOVE_EXACT_BASE : public DIALOG_SHIM
 	private:
 	
 	protected:
+		wxBoxSizer* bMainSizer;
 		wxCheckBox* m_polarCoords;
 		wxStaticText* m_xLabel;
 		wxTextCtrl* m_xEntry;
@@ -51,6 +54,10 @@ class DIALOG_MOVE_EXACT_BASE : public DIALOG_SHIM
 		wxTextCtrl* m_rotEntry;
 		wxStaticText* m_rotUnit;
 		wxButton* m_clearRot;
+		wxRadioBox* m_originChooser;
+		wxBoxSizer* bAnchorSizer;
+		wxCheckBox* m_cbOverride;
+		wxChoice* m_anchorChoice;
 		wxStaticLine* m_staticline1;
 		wxStdDialogButtonSizer* m_stdButtons;
 		wxButton* m_stdButtonsOK;
@@ -61,12 +68,14 @@ class DIALOG_MOVE_EXACT_BASE : public DIALOG_SHIM
 		virtual void OnPolarChanged( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnTextFocusLost( wxFocusEvent& event ) { event.Skip(); }
 		virtual void OnClear( wxCommandEvent& event ) { event.Skip(); }
+		virtual void OnOriginChanged( wxCommandEvent& event ) { event.Skip(); }
+		virtual void OnOverrideChanged( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
 		
 	
 	public:
 		
-		DIALOG_MOVE_EXACT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Move Item"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); 
+		DIALOG_MOVE_EXACT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Move Item"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 509,277 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); 
 		~DIALOG_MOVE_EXACT_BASE();
 	
 };
diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp
index 1b3f8eb..e339fdc 100644
--- a/pcbnew/edit.cpp
+++ b/pcbnew/edit.cpp
@@ -5,6 +5,7 @@
  * Copyright (C) 2015 SoftPLC Corporation, Dick Hollenbeck <dick@xxxxxxxxxxx>
  * Copyright (C) 2015 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
  * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -1536,10 +1537,9 @@ void PCB_EDIT_FRAME::OnSelectTool( wxCommandEvent& aEvent )
 
 void PCB_EDIT_FRAME::moveExact()
 {
-    wxPoint translation;
-    double rotation = 0;
+    MOVE_PARAMETERS params;
 
-    DIALOG_MOVE_EXACT dialog( this, translation, rotation );
+    DIALOG_MOVE_EXACT dialog( this, params );
     int ret = dialog.ShowModal();
 
     if( ret == wxID_OK )
@@ -1555,8 +1555,66 @@ void PCB_EDIT_FRAME::moveExact()
             // Could be moved or rotated
             SaveCopyInUndoList( itemToSave, UR_CHANGED );
 
-            item->Move( translation );
-            item->Rotate( item->GetPosition(), rotation );
+            // begin with the default anchor
+            wxPoint anchorPoint = item->GetPosition();
+
+            if( item->Type() == PCB_MODULE_T )
+            {
+                // cast to module to allow access to the pads
+                MODULE* mod = static_cast<MODULE*>( item );
+
+                switch( params.anchor )
+                {
+                case ANCHOR_TOP_LEFT_PAD:
+                    if( mod->GetTopLeftPad()->GetAttribute() == PAD_ATTRIB_SMD )
+                    {
+                        anchorPoint = mod->GetTopLeftPad()->GetBoundingBox().GetPosition();
+                    }
+                    else
+                    {
+                        anchorPoint = mod->GetTopLeftPad()->GetPosition();
+                    }
+                    break;
+                case ANCHOR_CENTER_FOOTPRINT:
+                    anchorPoint = mod->GetFootprintRect().GetCenter();
+                    break;
+                case ANCHOR_FROM_LIBRARY:
+                    ; // nothing to do
+                }
+            }
+
+            wxPoint origin;
+
+            switch( params.origin )
+            {
+            case RELATIVE_TO_USER_ORIGIN:
+                origin = GetScreen()->m_O_Curseur;
+                break;
+
+            case RELATIVE_TO_GRID_ORIGIN:
+                origin = GetGridOrigin();
+                break;
+
+            case RELATIVE_TO_DRILL_PLACE_ORIGIN:
+                origin = GetAuxOrigin();
+                break;
+
+            case RELATIVE_TO_SHEET_ORIGIN:
+                origin = wxPoint( 0, 0 );
+                break;
+
+            case RELATIVE_TO_CURRENT_POSITION:
+                // relative movement means that only the translation values should be used:
+                // -> set origin and anchor to zero
+                origin = wxPoint( 0, 0 );
+                anchorPoint = wxPoint( 0, 0 );
+                break;
+            }
+
+            wxPoint finalMoveVector = params.translation + origin - anchorPoint;
+
+            item->Move( finalMoveVector );
+            item->Rotate( item->GetPosition(), params.rotation );
             m_canvas->Refresh();
         }
     }
diff --git a/pcbnew/modedit.cpp b/pcbnew/modedit.cpp
index 28e0b51..d3aa7be 100644
--- a/pcbnew/modedit.cpp
+++ b/pcbnew/modedit.cpp
@@ -2,6 +2,7 @@
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
  * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -837,10 +838,11 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
 
 void FOOTPRINT_EDIT_FRAME::moveExact()
 {
-    wxPoint translation;
-    double rotation = 0;
+    MOVE_PARAMETERS params;
+    params.allowOverride = false;
+    params.editingFootprint = true;
 
-    DIALOG_MOVE_EXACT dialog( this, translation, rotation );
+    DIALOG_MOVE_EXACT dialog( this, params );
     int ret = dialog.ShowModal();
 
     if( ret == wxID_OK )
@@ -849,8 +851,39 @@ void FOOTPRINT_EDIT_FRAME::moveExact()
 
         BOARD_ITEM* item = GetScreen()->GetCurItem();
 
-        item->Move( translation );
-        item->Rotate( item->GetPosition(), rotation );
+        wxPoint anchorPoint = item->GetPosition();
+        wxPoint origin;
+
+        switch( params.origin )
+        {
+        case RELATIVE_TO_USER_ORIGIN:
+            origin = GetScreen()->m_O_Curseur;
+            break;
+
+        case RELATIVE_TO_GRID_ORIGIN:
+            origin = GetGridOrigin();
+            break;
+
+        case RELATIVE_TO_DRILL_PLACE_ORIGIN:
+            origin = GetAuxOrigin();
+            break;
+
+        case RELATIVE_TO_SHEET_ORIGIN:
+            origin = wxPoint( 0, 0 );
+            break;
+
+        case RELATIVE_TO_CURRENT_POSITION:
+            // relative movement means that only the translation values should be used:
+            // -> set origin and anchor to zero
+            origin = wxPoint( 0, 0 );
+            anchorPoint = wxPoint( 0, 0 );
+            break;
+        }
+
+        wxPoint finalMoveVector = params.translation + origin - anchorPoint;
+
+        item->Move( finalMoveVector );
+        item->Rotate( item->GetPosition(), params.rotation );
         m_canvas->Refresh();
     }
 
@@ -880,16 +913,15 @@ void FOOTPRINT_EDIT_FRAME::Transform( MODULE* module, int transform )
 
     case ID_MODEDIT_MODULE_MOVE_EXACT:
     {
-        wxPoint translation;
-        double rotation = 0;
+        MOVE_PARAMETERS params;
 
-        DIALOG_MOVE_EXACT dialog( this, translation, rotation  );
+        DIALOG_MOVE_EXACT dialog( this, params );
         int ret = dialog.ShowModal();
 
         if( ret == wxID_OK )
         {
-            MoveMarkedItemsExactly( module, wxPoint(0, 0),
-                                    translation, rotation, true );
+            MoveMarkedItemsExactly( module, wxPoint( 0, 0 ),
+                    params.translation, params.rotation, true );
         }
 
         break;
diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp
index 28619b1..2211fed 100644
--- a/pcbnew/tools/edit_tool.cpp
+++ b/pcbnew/tools/edit_tool.cpp
@@ -4,6 +4,7 @@
  * Copyright (C) 2013-2015 CERN
  * @author Maciej Suminski <maciej.suminski@xxxxxxx>
  * @author Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -221,6 +222,8 @@ bool EDIT_TOOL::Init()
 
 
 bool EDIT_TOOL::invokeInlineRouter()
+
+
 {
     TRACK* track = uniqueSelected<TRACK>();
     VIA* via = uniqueSelected<VIA>();
@@ -707,13 +710,12 @@ int EDIT_TOOL::MoveExact( const TOOL_EVENT& aEvent )
     if( selection.Empty() )
         return 0;
 
-
-    wxPoint translation;
-    double rotation = 0;
-
     PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
 
-    DIALOG_MOVE_EXACT dialog( editFrame, translation, rotation );
+    MOVE_PARAMETERS params;
+    params.editingFootprint = m_editModules;
+
+    DIALOG_MOVE_EXACT dialog( editFrame, params );
     int ret = dialog.ShowModal();
 
     if( ret == wxID_OK )
@@ -721,11 +723,97 @@ int EDIT_TOOL::MoveExact( const TOOL_EVENT& aEvent )
         VECTOR2I rp = selection.GetCenter();
         wxPoint rotPoint( rp.x, rp.y );
 
+        // Begin at the center of the selection determined above
+        wxPoint anchorPoint = rotPoint;
+
+        // If the anchor is not ANCHOR_FROM_LIBRARY then the user applied an override.
+        // Also run through this block if only one item is slected because it may be a module,
+        // in which case we want something different than the center of the selection
+        if( ( params.anchor != ANCHOR_FROM_LIBRARY ) || ( selection.GetSize() == 1 ) )
+        {
+            BOARD_ITEM* topLeftItem = static_cast<BOARD_ITEM*>( selection.GetTopLeftModule() );
+
+            // no module found if the GetTopLeftModule() returns null, retry for
+            if( topLeftItem == nullptr )
+            {
+                topLeftItem = static_cast<BOARD_ITEM*>( selection.GetTopLeftItem() );
+                anchorPoint = topLeftItem->GetPosition();
+            }
+
+            if( topLeftItem->Type() == PCB_MODULE_T )
+            {
+                // Cast to module to allow access to the pads
+                MODULE* mod = static_cast<MODULE*>( topLeftItem );
+
+                switch( params.anchor )
+                {
+                case ANCHOR_FROM_LIBRARY:
+                    anchorPoint = mod->GetPosition();
+                    break;
+                case ANCHOR_TOP_LEFT_PAD:
+                    topLeftItem = mod->GetTopLeftPad();
+                    break;
+                case ANCHOR_CENTER_FOOTPRINT:
+                    anchorPoint = mod->GetFootprintRect().GetCenter();
+                    break;
+                }
+            }
+
+            if( topLeftItem->Type() == PCB_PAD_T )
+            {
+                if( static_cast<D_PAD*>( topLeftItem )->GetAttribute() == PAD_ATTRIB_SMD )
+                {
+                    // Use the top left corner of SMD pads as an anchor instead of the center
+                    anchorPoint = topLeftItem->GetBoundingBox().GetPosition();
+                }
+                else
+                {
+                    anchorPoint = topLeftItem->GetPosition();
+                }
+            }
+        }
+
+        wxPoint origin;
+
+        switch( params.origin )
+        {
+        case RELATIVE_TO_USER_ORIGIN:
+            origin = editFrame->GetScreen()->m_O_Curseur;
+            break;
+
+        case RELATIVE_TO_GRID_ORIGIN:
+            origin = editFrame->GetGridOrigin();
+            break;
+
+        case RELATIVE_TO_DRILL_PLACE_ORIGIN:
+            origin = editFrame->GetAuxOrigin();
+            break;
+
+        case RELATIVE_TO_SHEET_ORIGIN:
+            origin = wxPoint( 0, 0 );
+            break;
+
+        case RELATIVE_TO_CURRENT_POSITION:
+            // relative movement means that only the translation values should be used:
+            // -> set origin and anchor to zero
+            origin = wxPoint( 0, 0 );
+            anchorPoint = wxPoint( 0, 0 );
+            break;
+        }
+
+        wxPoint finalMoveVector = params.translation + origin - anchorPoint;
+
+        // Make sure the rotation is from the right reference point
+        rotPoint += finalMoveVector;
+
         for( auto item : selection )
         {
             m_commit->Modify( item );
-            static_cast<BOARD_ITEM*>( item )->Move( translation );
-            static_cast<BOARD_ITEM*>( item )->Rotate( rotPoint, rotation );
+            static_cast<BOARD_ITEM*>( item )->Move( finalMoveVector );
+            static_cast<BOARD_ITEM*>( item )->Rotate( rotPoint, params.rotation );
+
+            if( !m_dragging )
+                getView()->Update( item );
         }
 
         m_commit->Push( _( "Move exact" ) );
diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp
index 20a469f..494fb1c 100644
--- a/pcbnew/tools/selection_tool.cpp
+++ b/pcbnew/tools/selection_tool.cpp
@@ -4,6 +4,7 @@
  * Copyright (C) 2013-2017 CERN
  * @author Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
  * @author Maciej Suminski <maciej.suminski@xxxxxxx>
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
@@ -1820,29 +1821,74 @@ bool SELECTION_TOOL::SanitizeSelection()
 
 
 // TODO(JE) Only works for BOARD_ITEM
+VECTOR2I SELECTION::GetPosition() const
+{
+    return static_cast<VECTOR2I>( GetBoundingBox().GetPosition() );
+}
+
+
 VECTOR2I SELECTION::GetCenter() const
 {
-    VECTOR2I centre;
+    return static_cast<VECTOR2I>( GetBoundingBox().Centre() );
+}
 
-    if( Size() == 1 )
+
+EDA_RECT SELECTION::GetBoundingBox() const
+{
+    EDA_RECT bbox;
+
+    bbox = Front()->GetBoundingBox();
+    auto i = m_items.begin();
+    ++i;
+
+    for( ; i != m_items.end(); ++i )
     {
-        centre = static_cast<BOARD_ITEM*>( Front() )->GetCenter();
+        bbox.Merge( (*i)->GetBoundingBox() );
     }
-    else
+
+    return bbox;
+}
+
+
+EDA_ITEM* SELECTION::GetTopLeftItem( bool onlyModules ) const
+{
+    BOARD_ITEM* topLeftItem = nullptr;
+    BOARD_ITEM* currentItem;
+
+    wxPoint pnt;
+
+    // find the leftmost (smallest x coord) and highest (smallest y with the smallest x) item in the selection
+    for( auto item : m_items )
     {
-        EDA_RECT bbox = Front()->GetBoundingBox();
-        auto i = m_items.begin();
-        ++i;
+        currentItem = static_cast<BOARD_ITEM*>( item );
+        pnt = currentItem->GetPosition();
 
-        for( ; i != m_items.end(); ++i )
+        if( ( currentItem->Type() != PCB_MODULE_T ) && onlyModules )
         {
-            bbox.Merge( (*i)->GetBoundingBox() );
+            continue;
+        }
+        else
+        {
+            if( topLeftItem == nullptr )
+            {
+                topLeftItem = currentItem;
+            }
+            else if( ( pnt.x < topLeftItem->GetPosition().x ) ||
+                     ( ( topLeftItem->GetPosition().x == pnt.x ) &&
+                     ( pnt.y < topLeftItem->GetPosition().y ) ) )
+            {
+                topLeftItem = currentItem;
+            }
         }
-
-        centre = bbox.Centre();
     }
 
-    return centre;
+    return static_cast<EDA_ITEM*>( topLeftItem );
+}
+
+
+EDA_ITEM* SELECTION::GetTopLeftModule() const
+{
+    return GetTopLeftItem( true );
 }
 
 
diff --git a/pcbnew/tools/selection_tool.h b/pcbnew/tools/selection_tool.h
index c8396f2..a285370 100644
--- a/pcbnew/tools/selection_tool.h
+++ b/pcbnew/tools/selection_tool.h
@@ -4,6 +4,7 @@
  * Copyright (C) 2013-2017 CERN
  * @author Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
  * @author Maciej Suminski <maciej.suminski@xxxxxxx>
+ * Copyright (C) 2017 KiCad Developers, see CHANGELOG.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
-- 
2.7.4

diff --git a/pcbnew/block_module_editor.cpp b/pcbnew/block_module_editor.cpp
index be496e5..b37eb8c 100644
--- a/pcbnew/block_module_editor.cpp
+++ b/pcbnew/block_module_editor.cpp
@@ -199,26 +199,38 @@ bool FOOTPRINT_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
             if( ret == wxID_OK )
             {
                 SaveCopyInUndoList( currentModule, UR_CHANGED );
-                const wxPoint blockCentre = GetScreen()->m_BlockLocate.Centre();
+                wxPoint blockCentre = GetScreen()->m_BlockLocate.Centre();
 
-                wxPoint finalMoveVector = params.translation;
+                wxPoint origin;
 
                 switch( params.origin )
                 {
-                case ME_RELATIVE_TO_CURRENT_POSITION:
-                    // nothing to do
+                case RELATIVE_TO_USER_ORIGIN:
+                    origin = GetScreen()->m_O_Curseur;
                     break;
-                case ME_RELATIVE_TO_USER_ORIGIN:
-                    finalMoveVector += GetScreen()->m_O_Curseur - blockCentre;
+
+                case RELATIVE_TO_GRID_ORIGIN:
+                    origin = GetGridOrigin();
+                    break;
+
+                case RELATIVE_TO_DRILL_PLACE_ORIGIN:
+                    origin = GetAuxOrigin();
                     break;
-                case ME_RELATIVE_TO_GRID_ORIGIN:
-                    finalMoveVector += GetGridOrigin() - blockCentre;
+
+                case RELATIVE_TO_SHEET_ORIGIN:
+                    origin = wxPoint( 0, 0 );
                     break;
-                case ME_RELATIVE_TO_SHEET_ORIGIN:
-                    finalMoveVector -= blockCentre;
+
+                case RELATIVE_TO_CURRENT_POSITION:
+                    // relative movement means that only the translation values should be used:
+                    // -> set origin and blockCentre to zero
+                    origin = wxPoint( 0, 0 );
+                    blockCentre = wxPoint( 0, 0 );
                     break;
                 }
 
+                wxPoint finalMoveVector = params.translation + origin - blockCentre;
+
                 MoveMarkedItemsExactly( currentModule, blockCentre, finalMoveVector, params.rotation );
             }
         }
diff --git a/pcbnew/dialogs/dialog_move_exact.cpp b/pcbnew/dialogs/dialog_move_exact.cpp
index cf742b3..1736086 100644
--- a/pcbnew/dialogs/dialog_move_exact.cpp
+++ b/pcbnew/dialogs/dialog_move_exact.cpp
@@ -65,16 +65,16 @@ DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT(PCB_BASE_FRAME *aParent, MOVE_PARAMETERS &a
         m_anchorChoice->Enable( m_options.overrideAnchor );
 
         // ME_ANCHOR_FROM_LIBRARY is not in the wxChoice options so show the first choice instead
-        if( m_options.anchor == ME_ANCHOR_FROM_LIBRARY )
+        if( m_options.anchor == ANCHOR_FROM_LIBRARY )
         {
-            m_anchorChoice->SetSelection( ME_ANCHOR_TOP_LEFT_PAD );
+            m_anchorChoice->SetSelection( ANCHOR_TOP_LEFT_PAD );
         }
         else
         {
             m_anchorChoice->SetSelection( m_options.anchor );
         }
 
-        if( m_options.origin == ME_RELATIVE_TO_CURRENT_POSITION )
+        if( m_options.origin == RELATIVE_TO_CURRENT_POSITION )
         {
             // no footprint override necessary in this mode
             m_cbOverride->Disable();
@@ -84,7 +84,7 @@ DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT(PCB_BASE_FRAME *aParent, MOVE_PARAMETERS &a
         if( m_editingFootprint )
         {
             // there is no point in showing the center footprint option when editing footprints
-            m_anchorChoice->Delete( ME_ANCHOR_CENTER_FOOTPRINT );
+            m_anchorChoice->Delete( ANCHOR_CENTER_FOOTPRINT );
         }
     }
     else
@@ -93,6 +93,33 @@ DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT(PCB_BASE_FRAME *aParent, MOVE_PARAMETERS &a
         bMainSizer->Hide( bAnchorSizer, true );
     }
 
+    if( wxPoint( 0, 0 ) == aParent->GetScreen()->m_O_Curseur )
+    {
+        // disble the user origin option when the user oigin is not set
+        m_originChooser->Enable( RELATIVE_TO_USER_ORIGIN, false );
+        m_originChooser->SetItemToolTip( RELATIVE_TO_USER_ORIGIN,
+                                         wxString( "The user origin is currently not set\n"
+                                                   "Set it by using the <space> hotkey" ) );
+    }
+
+    if( wxPoint( 0, 0 ) == aParent->GetGridOrigin() )
+    {
+        // disble the grid origin option when the user oigin is not set
+        m_originChooser->Enable( RELATIVE_TO_GRID_ORIGIN, false );
+        m_originChooser->SetItemToolTip( RELATIVE_TO_GRID_ORIGIN,
+                                         wxString( "The grid origin is currently not set\n"
+                                                   "Set it by using the tool in the <place> menu" ) );
+    }
+
+    if( wxPoint( 0, 0 ) == aParent->GetAuxOrigin() )
+    {
+        // disble the grid origin option when the drill/place oigin is not set
+        m_originChooser->Enable( RELATIVE_TO_DRILL_PLACE_ORIGIN, false );
+        m_originChooser->SetItemToolTip( RELATIVE_TO_DRILL_PLACE_ORIGIN,
+                                         wxString( "The drill/place origin is currently not set\n"
+                                                   "Set it by using the tool in the <place> menu" ) );
+    }
+
     updateDlgTexts( m_polarCoords->IsChecked() );
 
     m_stdButtonsOK->SetDefault();
@@ -171,8 +198,9 @@ void DIALOG_MOVE_EXACT::OnPolarChanged( wxCommandEvent& event )
 
 void DIALOG_MOVE_EXACT::OnOriginChanged( wxCommandEvent& event )
 {
-    if( m_originChooser->GetSelection() == ME_RELATIVE_TO_CURRENT_POSITION )
+    if( m_originChooser->GetSelection() == RELATIVE_TO_CURRENT_POSITION )
     {
+        //no need to override the achor in this mode since the reference in the current position
         m_cbOverride->Disable();
         m_anchorChoice->Disable();
     }
@@ -244,15 +272,15 @@ void DIALOG_MOVE_EXACT::OnClear( wxCommandEvent& event )
 void DIALOG_MOVE_EXACT::OnOkClick( wxCommandEvent& event )
 {
     m_rotation = DoubleValueFromString( DEGREES, m_rotEntry->GetValue() );
-    m_origin = static_cast< MOVE_EXACT_ORIGIN >( m_originChooser->GetSelection() );
+    m_origin = static_cast<MOVE_EXACT_ORIGIN>( m_originChooser->GetSelection() );
 
     if( m_cbOverride->IsChecked() && m_allowOverride )
     {
-        m_anchor = static_cast< MOVE_EXACT_ANCHOR >( m_anchorChoice->GetSelection() );
+        m_anchor = static_cast<MOVE_EXACT_ANCHOR>( m_anchorChoice->GetSelection() );
     }
     else
     {
-        m_anchor = ME_ANCHOR_FROM_LIBRARY;
+        m_anchor = ANCHOR_FROM_LIBRARY;
     }
 
     // for the output, we only deliver a Cartesian vector
@@ -266,7 +294,7 @@ void DIALOG_MOVE_EXACT::OnOkClick( wxCommandEvent& event )
         m_options.entry2 = DoubleValueFromString( UNSCALED_UNITS, m_yEntry->GetValue() );
         m_options.entryRotation = DoubleValueFromString( UNSCALED_UNITS, m_rotEntry->GetValue() );
         m_options.origin = m_origin;
-        m_options.anchor = static_cast< MOVE_EXACT_ANCHOR >( m_anchorChoice->GetSelection() );
+        m_options.anchor = static_cast<MOVE_EXACT_ANCHOR>( m_anchorChoice->GetSelection() );
         m_options.overrideAnchor = m_cbOverride->IsChecked();
         event.Skip();
     }
diff --git a/pcbnew/dialogs/dialog_move_exact.fbp b/pcbnew/dialogs/dialog_move_exact.fbp
index 9c7ce75..0cd1571 100644
--- a/pcbnew/dialogs/dialog_move_exact.fbp
+++ b/pcbnew/dialogs/dialog_move_exact.fbp
@@ -1261,7 +1261,7 @@
                                 <property name="caption"></property>
                                 <property name="caption_visible">1</property>
                                 <property name="center_pane">0</property>
-                                <property name="choices">&quot;Current Position&quot; &quot;User Origin&quot; &quot;Grid Origin&quot; &quot;Sheet Origin&quot;</property>
+                                <property name="choices">&quot;Current Position&quot; &quot;User Origin&quot; &quot;Grid Origin&quot; &quot;Drill/Place Origin&quot; &quot;Sheet Origin&quot;</property>
                                 <property name="close_button">1</property>
                                 <property name="context_help"></property>
                                 <property name="context_menu">1</property>
diff --git a/pcbnew/dialogs/dialog_move_exact.h b/pcbnew/dialogs/dialog_move_exact.h
index 4336b41..f851b2d 100644
--- a/pcbnew/dialogs/dialog_move_exact.h
+++ b/pcbnew/dialogs/dialog_move_exact.h
@@ -32,18 +32,19 @@
 
 enum MOVE_EXACT_ORIGIN
 {
-    ME_RELATIVE_TO_CURRENT_POSITION,
-    ME_RELATIVE_TO_USER_ORIGIN,
-    ME_RELATIVE_TO_GRID_ORIGIN,
-    ME_RELATIVE_TO_SHEET_ORIGIN
+    RELATIVE_TO_CURRENT_POSITION,
+    RELATIVE_TO_USER_ORIGIN,
+    RELATIVE_TO_GRID_ORIGIN,
+    RELATIVE_TO_DRILL_PLACE_ORIGIN,
+    RELATIVE_TO_SHEET_ORIGIN
 };
 
 
 enum MOVE_EXACT_ANCHOR
 {
-    ME_ANCHOR_TOP_LEFT_PAD,
-    ME_ANCHOR_CENTER_FOOTPRINT,
-    ME_ANCHOR_FROM_LIBRARY
+    ANCHOR_TOP_LEFT_PAD,
+    ANCHOR_CENTER_FOOTPRINT,
+    ANCHOR_FROM_LIBRARY
 };
 
 
@@ -51,8 +52,8 @@ struct MOVE_PARAMETERS
 {
     wxPoint             translation     = wxPoint( 0,0 );
     double              rotation        = 0;
-    MOVE_EXACT_ORIGIN   origin          = ME_RELATIVE_TO_CURRENT_POSITION;
-    MOVE_EXACT_ANCHOR   anchor          = ME_ANCHOR_FROM_LIBRARY;
+    MOVE_EXACT_ORIGIN   origin          = RELATIVE_TO_CURRENT_POSITION;
+    MOVE_EXACT_ANCHOR   anchor          = ANCHOR_FROM_LIBRARY;
     bool                allowOverride   = true;
     bool                editingFootprint = false;
 };
@@ -126,8 +127,8 @@ private:
             entry1( 0 ),
             entry2( 0 ),
             entryRotation( 0 ),
-            origin( ME_RELATIVE_TO_CURRENT_POSITION ),
-            anchor( ME_ANCHOR_FROM_LIBRARY ),
+            origin( RELATIVE_TO_CURRENT_POSITION ),
+            anchor( ANCHOR_FROM_LIBRARY ),
             overrideAnchor( false )
         {
         }
diff --git a/pcbnew/dialogs/dialog_move_exact_base.cpp b/pcbnew/dialogs/dialog_move_exact_base.cpp
index 56066c9..3ceabbc 100644
--- a/pcbnew/dialogs/dialog_move_exact_base.cpp
+++ b/pcbnew/dialogs/dialog_move_exact_base.cpp
@@ -72,7 +72,7 @@ DIALOG_MOVE_EXACT_BASE::DIALOG_MOVE_EXACT_BASE( wxWindow* parent, wxWindowID id,
 	
 	bMiddleSizer->Add( fgInputSizer, 1, wxALL|wxBOTTOM|wxEXPAND|wxTOP, 5 );
 	
-	wxString m_originChooserChoices[] = { _("Current Position"), _("User Origin"), _("Grid Origin"), _("Sheet Origin") };
+	wxString m_originChooserChoices[] = { _("Current Position"), _("User Origin"), _("Grid Origin"), _("Drill/Place Origin"), _("Sheet Origin") };
 	int m_originChooserNChoices = sizeof( m_originChooserChoices ) / sizeof( wxString );
 	m_originChooser = new wxRadioBox( this, wxID_ANY, _("Move relative to:"), wxDefaultPosition, wxDefaultSize, m_originChooserNChoices, m_originChooserChoices, 1, wxRA_SPECIFY_COLS );
 	m_originChooser->SetSelection( 0 );
diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp
index 6f7f417..e339fdc 100644
--- a/pcbnew/edit.cpp
+++ b/pcbnew/edit.cpp
@@ -1565,7 +1565,7 @@ void PCB_EDIT_FRAME::moveExact()
 
                 switch( params.anchor )
                 {
-                case ME_ANCHOR_TOP_LEFT_PAD:
+                case ANCHOR_TOP_LEFT_PAD:
                     if( mod->GetTopLeftPad()->GetAttribute() == PAD_ATTRIB_SMD )
                     {
                         anchorPoint = mod->GetTopLeftPad()->GetBoundingBox().GetPosition();
@@ -1575,35 +1575,44 @@ void PCB_EDIT_FRAME::moveExact()
                         anchorPoint = mod->GetTopLeftPad()->GetPosition();
                     }
                     break;
-                case ME_ANCHOR_CENTER_FOOTPRINT:
+                case ANCHOR_CENTER_FOOTPRINT:
                     anchorPoint = mod->GetFootprintRect().GetCenter();
                     break;
-                case ME_ANCHOR_FROM_LIBRARY:
+                case ANCHOR_FROM_LIBRARY:
                     ; // nothing to do
                 }
             }
 
-            wxPoint finalMoveVector = params.translation;
+            wxPoint origin;
 
             switch( params.origin )
             {
-            case ME_RELATIVE_TO_USER_ORIGIN:
-                finalMoveVector += GetScreen()->m_O_Curseur - anchorPoint;
+            case RELATIVE_TO_USER_ORIGIN:
+                origin = GetScreen()->m_O_Curseur;
                 break;
 
-            case ME_RELATIVE_TO_GRID_ORIGIN:
-                finalMoveVector += GetGridOrigin() - anchorPoint;
+            case RELATIVE_TO_GRID_ORIGIN:
+                origin = GetGridOrigin();
                 break;
 
-            case ME_RELATIVE_TO_SHEET_ORIGIN:
-                finalMoveVector -= anchorPoint;
+            case RELATIVE_TO_DRILL_PLACE_ORIGIN:
+                origin = GetAuxOrigin();
                 break;
 
-            case ME_RELATIVE_TO_CURRENT_POSITION:
-                // nothing to do
+            case RELATIVE_TO_SHEET_ORIGIN:
+                origin = wxPoint( 0, 0 );
+                break;
+
+            case RELATIVE_TO_CURRENT_POSITION:
+                // relative movement means that only the translation values should be used:
+                // -> set origin and anchor to zero
+                origin = wxPoint( 0, 0 );
+                anchorPoint = wxPoint( 0, 0 );
                 break;
             }
 
+            wxPoint finalMoveVector = params.translation + origin - anchorPoint;
+
             item->Move( finalMoveVector );
             item->Rotate( item->GetPosition(), params.rotation );
             m_canvas->Refresh();
diff --git a/pcbnew/modedit.cpp b/pcbnew/modedit.cpp
index 08756d9..d3aa7be 100644
--- a/pcbnew/modedit.cpp
+++ b/pcbnew/modedit.cpp
@@ -852,25 +852,36 @@ void FOOTPRINT_EDIT_FRAME::moveExact()
         BOARD_ITEM* item = GetScreen()->GetCurItem();
 
         wxPoint anchorPoint = item->GetPosition();
-
-        wxPoint finalMoveVector = params.translation;
+        wxPoint origin;
 
         switch( params.origin )
         {
-        case ME_RELATIVE_TO_USER_ORIGIN:
-            finalMoveVector += GetScreen()->m_O_Curseur - anchorPoint;
+        case RELATIVE_TO_USER_ORIGIN:
+            origin = GetScreen()->m_O_Curseur;
             break;
-        case ME_RELATIVE_TO_GRID_ORIGIN:
-            finalMoveVector += GetGridOrigin() - anchorPoint;
+
+        case RELATIVE_TO_GRID_ORIGIN:
+            origin = GetGridOrigin();
             break;
-        case ME_RELATIVE_TO_SHEET_ORIGIN:
-            finalMoveVector -= anchorPoint;
+
+        case RELATIVE_TO_DRILL_PLACE_ORIGIN:
+            origin = GetAuxOrigin();
             break;
-        case ME_RELATIVE_TO_CURRENT_POSITION:
-            // nothing to do
+
+        case RELATIVE_TO_SHEET_ORIGIN:
+            origin = wxPoint( 0, 0 );
+            break;
+
+        case RELATIVE_TO_CURRENT_POSITION:
+            // relative movement means that only the translation values should be used:
+            // -> set origin and anchor to zero
+            origin = wxPoint( 0, 0 );
+            anchorPoint = wxPoint( 0, 0 );
             break;
         }
 
+        wxPoint finalMoveVector = params.translation + origin - anchorPoint;
+
         item->Move( finalMoveVector );
         item->Rotate( item->GetPosition(), params.rotation );
         m_canvas->Refresh();
diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp
index 4cd90d5..2211fed 100644
--- a/pcbnew/tools/edit_tool.cpp
+++ b/pcbnew/tools/edit_tool.cpp
@@ -726,10 +726,10 @@ int EDIT_TOOL::MoveExact( const TOOL_EVENT& aEvent )
         // Begin at the center of the selection determined above
         wxPoint anchorPoint = rotPoint;
 
-        // If the anchor is not ME_ANCHOR_FROM_LIBRARY then the user applied an override.
+        // If the anchor is not ANCHOR_FROM_LIBRARY then the user applied an override.
         // Also run through this block if only one item is slected because it may be a module,
         // in which case we want something different than the center of the selection
-        if( ( params.anchor != ME_ANCHOR_FROM_LIBRARY ) || ( selection.GetSize() == 1 ) )
+        if( ( params.anchor != ANCHOR_FROM_LIBRARY ) || ( selection.GetSize() == 1 ) )
         {
             BOARD_ITEM* topLeftItem = static_cast<BOARD_ITEM*>( selection.GetTopLeftModule() );
 
@@ -743,17 +743,17 @@ int EDIT_TOOL::MoveExact( const TOOL_EVENT& aEvent )
             if( topLeftItem->Type() == PCB_MODULE_T )
             {
                 // Cast to module to allow access to the pads
-                MODULE* mod = static_cast< MODULE* >( topLeftItem );
+                MODULE* mod = static_cast<MODULE*>( topLeftItem );
 
                 switch( params.anchor )
                 {
-                case ME_ANCHOR_FROM_LIBRARY:
+                case ANCHOR_FROM_LIBRARY:
                     anchorPoint = mod->GetPosition();
                     break;
-                case ME_ANCHOR_TOP_LEFT_PAD:
+                case ANCHOR_TOP_LEFT_PAD:
                     topLeftItem = mod->GetTopLeftPad();
                     break;
-                case ME_ANCHOR_CENTER_FOOTPRINT:
+                case ANCHOR_CENTER_FOOTPRINT:
                     anchorPoint = mod->GetFootprintRect().GetCenter();
                     break;
                 }
@@ -761,7 +761,7 @@ int EDIT_TOOL::MoveExact( const TOOL_EVENT& aEvent )
 
             if( topLeftItem->Type() == PCB_PAD_T )
             {
-                if( static_cast< D_PAD* >( topLeftItem )->GetAttribute() == PAD_ATTRIB_SMD )
+                if( static_cast<D_PAD*>( topLeftItem )->GetAttribute() == PAD_ATTRIB_SMD )
                 {
                     // Use the top left corner of SMD pads as an anchor instead of the center
                     anchorPoint = topLeftItem->GetBoundingBox().GetPosition();
@@ -773,27 +773,36 @@ int EDIT_TOOL::MoveExact( const TOOL_EVENT& aEvent )
             }
         }
 
-        wxPoint finalMoveVector = params.translation;
+        wxPoint origin;
 
         switch( params.origin )
         {
-        case ME_RELATIVE_TO_USER_ORIGIN:
-            finalMoveVector += editFrame->GetScreen()->m_O_Curseur - anchorPoint;
+        case RELATIVE_TO_USER_ORIGIN:
+            origin = editFrame->GetScreen()->m_O_Curseur;
             break;
 
-        case ME_RELATIVE_TO_GRID_ORIGIN:
-            finalMoveVector += editFrame->GetGridOrigin() - anchorPoint;
+        case RELATIVE_TO_GRID_ORIGIN:
+            origin = editFrame->GetGridOrigin();
             break;
 
-        case ME_RELATIVE_TO_SHEET_ORIGIN:
-            finalMoveVector -= anchorPoint;  // Relative to coordinate ( 0, 0 )
+        case RELATIVE_TO_DRILL_PLACE_ORIGIN:
+            origin = editFrame->GetAuxOrigin();
             break;
 
-        case ME_RELATIVE_TO_CURRENT_POSITION:
-            // Nothing to do
+        case RELATIVE_TO_SHEET_ORIGIN:
+            origin = wxPoint( 0, 0 );
+            break;
+
+        case RELATIVE_TO_CURRENT_POSITION:
+            // relative movement means that only the translation values should be used:
+            // -> set origin and anchor to zero
+            origin = wxPoint( 0, 0 );
+            anchorPoint = wxPoint( 0, 0 );
             break;
         }
 
+        wxPoint finalMoveVector = params.translation + origin - anchorPoint;
+
         // Make sure the rotation is from the right reference point
         rotPoint += finalMoveVector;
 

Follow ups

References