Move PCBNew rotation increment to EDA_ANGLE.

This commit is contained in:
Jeff Young 2022-01-13 20:04:14 +00:00
parent c9487bad18
commit 5176512de3
7 changed files with 36 additions and 34 deletions

View File

@ -48,7 +48,8 @@ PCB_BASE_EDIT_FRAME::PCB_BASE_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent,
const wxPoint& aPos, const wxSize& aSize, long aStyle,
const wxString& aFrameName ) :
PCB_BASE_FRAME( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName ),
m_rotationAngle( 900 ), m_undoRedoBlocked( false ),
m_rotationAngle( ANGLE_90 ),
m_undoRedoBlocked( false ),
m_selectionFilterPanel( nullptr ),
m_appearancePanel( nullptr )
{
@ -158,9 +159,10 @@ bool PCB_BASE_EDIT_FRAME::TryBefore( wxEvent& aEvent )
}
void PCB_BASE_EDIT_FRAME::SetRotationAngle( int aRotationAngle )
void PCB_BASE_EDIT_FRAME::SetRotationAngle( EDA_ANGLE aRotationAngle )
{
wxCHECK2_MSG( aRotationAngle > 0 && aRotationAngle <= 900, aRotationAngle = 900,
wxCHECK2_MSG( aRotationAngle > ANGLE_0 && aRotationAngle <= ANGLE_90,
aRotationAngle = ANGLE_90,
wxT( "Invalid rotation angle, defaulting to 90." ) );
m_rotationAngle = aRotationAngle;

View File

@ -159,12 +159,12 @@ public:
/**
* Return the angle used for rotate operations.
*/
int GetRotationAngle() const { return m_rotationAngle; }
EDA_ANGLE GetRotationAngle() const { return m_rotationAngle; }
/**
* Set the angle used for rotate operations.
*/
void SetRotationAngle( int aRotationAngle );
void SetRotationAngle( EDA_ANGLE aRotationAngle );
void ShowTextPropertiesDialog( BOARD_ITEM* aText );
void ShowGraphicItemPropertiesDialog( BOARD_ITEM* aItem );
@ -226,7 +226,7 @@ protected:
void unitsChangeRefresh() override;
protected:
int m_rotationAngle; // Rotation step (in tenths of a degree)
EDA_ANGLE m_rotationAngle; // Rotation step (in tenths of a degree)
bool m_undoRedoBlocked;
PANEL_SELECTION_FILTER* m_selectionFilterPanel;

View File

@ -192,7 +192,7 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
// assume dirty
m_ZoneFillsDirty = true;
m_rotationAngle = 900;
m_rotationAngle = ANGLE_90;
m_aboutTitle = _( "KiCad PCB Editor" );
// Must be created before the menus are created.
@ -1048,7 +1048,7 @@ void PCB_EDIT_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
if( cfg )
{
m_rotationAngle = cfg->m_RotationAngle;
m_rotationAngle = EDA_ANGLE( cfg->m_RotationAngle, TENTHS_OF_A_DEGREE_T );
m_show_layer_manager_tools = cfg->m_AuiPanels.show_layer_manager;
}
}
@ -1063,7 +1063,7 @@ void PCB_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
if( cfg )
{
cfg->m_RotationAngle = m_rotationAngle;
cfg->m_RotationAngle = m_rotationAngle.AsTenthsOfADegree();
cfg->m_AuiPanels.show_layer_manager = m_show_layer_manager_tools;
cfg->m_AuiPanels.right_panel_width = m_appearancePanel->GetSize().x;
cfg->m_AuiPanels.appearance_panel_tab = m_appearancePanel->GetTabIndex();

View File

@ -1461,8 +1461,8 @@ int EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
updateModificationPoint( selection );
VECTOR2I refPt = selection.GetReferencePoint();
const int rotateAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *editFrame, aEvent );
VECTOR2I refPt = selection.GetReferencePoint();
EDA_ANGLE rotateAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *editFrame, aEvent );
// When editing footprints, all items have the same parent
if( IsFootprintEditor() )
@ -1484,7 +1484,7 @@ int EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
}
}
static_cast<BOARD_ITEM*>( item )->Rotate( refPt, EDA_ANGLE( rotateAngle, TENTHS_OF_A_DEGREE_T ) );
static_cast<BOARD_ITEM*>( item )->Rotate( refPt, rotateAngle );
}
if( !m_dragging )

View File

@ -217,8 +217,8 @@ void PCB_TOOL_BASE::doInteractiveItemPlacement( const std::string& aTool,
*/
if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) && ( aOptions & IPO_ROTATE ) )
{
const int rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *frame(), *evt );
newItem->Rotate( newItem->GetPosition(), EDA_ANGLE( rotationAngle, TENTHS_OF_A_DEGREE_T ) );
EDA_ANGLE rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle( *frame(), *evt );
newItem->Rotate( newItem->GetPosition(), rotationAngle );
view()->Update( &preview );
}
else if( evt->IsAction( &PCB_ACTIONS::flip ) && ( aOptions & IPO_FLIP ) )

View File

@ -33,13 +33,15 @@ bool TOOL_EVT_UTILS::IsRotateToolEvt( const TOOL_EVENT& aEvt )
}
int TOOL_EVT_UTILS::GetEventRotationAngle( const PCB_BASE_EDIT_FRAME& aFrame,
const TOOL_EVENT& aEvt )
EDA_ANGLE TOOL_EVT_UTILS::GetEventRotationAngle( const PCB_BASE_EDIT_FRAME& aFrame,
const TOOL_EVENT& aEvent )
{
wxASSERT_MSG( IsRotateToolEvt( aEvt ), "Expected rotation event" );
wxASSERT_MSG( IsRotateToolEvt( aEvent ), "Expected rotation event" );
const int rotAngle = aFrame.GetRotationAngle();
const int angleMultiplier = aEvt.Parameter<intptr_t>();
EDA_ANGLE rotAngle = aFrame.GetRotationAngle();
const int angleMultiplier = aEvent.Parameter<intptr_t>();
return rotAngle * angleMultiplier;
wxASSERT_MSG( angleMultiplier == 1 || angleMultiplier == -1, "Expected 1 or -1" );
return angleMultiplier > 0 ? rotAngle : -rotAngle;
}

View File

@ -1,7 +1,7 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
* Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2022 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -25,6 +25,7 @@
#define TOOL_EVENT_UTILS_H
#include <tool/tool_interactive.h>
#include <eda_angle.h>
class PCB_BASE_EDIT_FRAME;
@ -33,10 +34,9 @@ class PCB_BASE_EDIT_FRAME;
/**
* Namespace TOOL_EVT_UTILS
*
* Utility functions for dealing with various tool events. These are
* free functions, so they interface with any classes exclusively via
* the public interfaces, so they don't need to be subsumed into the
* "helped" classes.
* Utility functions for dealing with various tool events. These are free functions, so they
* interface with any classes exclusively via the public interfaces, so they don't need to be
* subsumed into the "helped" classes.
*/
namespace TOOL_EVT_UTILS
{
@ -51,18 +51,16 @@ namespace TOOL_EVT_UTILS
/**
* Function getEventRotationAngle()
*
* Helper function to get a rotation angle based on a frame's
* configured angle and the direction indicated by a rotation action event
* Helper function to get a rotation angle based on a frame's configured angle and the
* direction indicated by a rotation action event
*
* @param aFrame the PCB edit frame to use to get the base rotation
* step value from
* @param aEvt the tool event - should be a rotation action event
* and should have a rotation multiplier parameter
* @param aFrame the PCB edit frame to use to get the base rotation step value from
* @param aEvt the tool event - should be a rotation action event and should have a rotation
* multiplier parameter
*
* @return the rotation angle in clockwise internal units
* @return the clockwise rotation angle
*/
int GetEventRotationAngle( const PCB_BASE_EDIT_FRAME& aFrame,
const TOOL_EVENT& aEvt );
EDA_ANGLE GetEventRotationAngle( const PCB_BASE_EDIT_FRAME& aFrame, const TOOL_EVENT& aEvent );
}
#endif // TOOL_EVENT_UTILS_H