Restored support for custom angle rotation.

This commit is contained in:
Maciej Suminski 2014-07-09 13:50:27 +02:00
parent 6e0bd1eedc
commit 5ce29330b1
6 changed files with 45 additions and 19 deletions

View File

@ -87,9 +87,6 @@ class PCB_EDIT_FRAME : public PCB_BASE_EDIT_FRAME
/// The auxiliary right vertical tool bar used to access the microwave tools.
wxAuiToolBar* m_microWaveToolBar;
/// User defined rotation angle (in tenths of a degree).
int m_rotationAngle;
/**
* Function loadFootprints
* loads the footprints for each #COMPONENT in \a aNetlist from the list of libraries.
@ -315,9 +312,6 @@ public:
*/
virtual void SetGridColor(EDA_COLOR_T aColor);
int GetRotationAngle() const { return m_rotationAngle; }
void SetRotationAngle( int aRotationAngle );
// Configurations:
void Process_Config( wxCommandEvent& event );

View File

@ -160,6 +160,7 @@ set( PCBNEW_CLASS_SRCS
tool_modview.cpp
modview_frame.cpp
pcbframe.cpp
pcb_base_edit_frame.cpp
attribut.cpp
board_items_to_polygon_shape_transform.cpp
board_undo_redo.cpp

View File

@ -0,0 +1,33 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014 CERN
* @author Maciej Suminski <maciej.suminski@cern.ch>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <pcb_base_edit_frame.h>
void PCB_BASE_EDIT_FRAME::SetRotationAngle( int aRotationAngle )
{
wxCHECK2_MSG( aRotationAngle > 0 && aRotationAngle <= 900, aRotationAngle = 900,
wxT( "Invalid rotation angle, defaulting to 90." ) );
m_rotationAngle = aRotationAngle;
}

View File

@ -36,7 +36,8 @@ public:
PCB_BASE_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrameType,
const wxString& aTitle, const wxPoint& aPos, const wxSize& aSize,
long aStyle, const wxString& aFrameName ) :
PCB_BASE_FRAME( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName )
PCB_BASE_FRAME( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName ),
m_rotationAngle( 900 )
{}
virtual ~PCB_BASE_EDIT_FRAME() {};
@ -64,6 +65,13 @@ public:
* - Get an old version of the data from Undo list
*/
virtual void RestoreCopyFromUndoList( wxCommandEvent& aEvent ) = 0;
int GetRotationAngle() const { return m_rotationAngle; }
void SetRotationAngle( int aRotationAngle );
protected:
/// User defined rotation angle (in tenths of a degree).
int m_rotationAngle;
};
#endif

View File

@ -1021,13 +1021,3 @@ void PCB_EDIT_FRAME::ToPlotter( wxCommandEvent& event )
dlg.ShowModal();
}
void PCB_EDIT_FRAME::SetRotationAngle( int aRotationAngle )
{
wxCHECK2_MSG( aRotationAngle > 0 && aRotationAngle <= 900, aRotationAngle = 900,
wxT( "Invalid rotation angle, defaulting to 90." ) );
m_rotationAngle = aRotationAngle;
}

View File

@ -286,7 +286,7 @@ int EDIT_TOOL::Properties( TOOL_EVENT& aEvent )
int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent )
{
const SELECTION_TOOL::SELECTION& selection = m_selectionTool->GetSelection();
PCB_BASE_FRAME* editFrame = getEditFrame<PCB_BASE_FRAME>();
PCB_BASE_EDIT_FRAME* editFrame = getEditFrame<PCB_BASE_EDIT_FRAME>();
// Shall the selection be cleared at the end?
bool unselect = selection.Empty();
@ -310,7 +310,7 @@ int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent )
{
BOARD_ITEM* item = selection.Item<BOARD_ITEM>( i );
item->Rotate( rotatePoint, 900.0 /*m_frame->GetRotationAngle()*/ );
item->Rotate( rotatePoint, editFrame->GetRotationAngle() );
if( !m_dragging )
item->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );