GRID_HELPER: push code to parent class

Prep'ing for PCB grid overrides
This commit is contained in:
Mike Williams 2023-08-23 13:05:08 -04:00
parent 0f621f9af9
commit 0f781f328e
6 changed files with 75 additions and 45 deletions

View File

@ -153,7 +153,7 @@ int COMMON_TOOLS::CursorControl( const TOOL_EVENT& aEvent )
TOOL_EVENT evt( TC_MOUSE, action, button | modifiers ); TOOL_EVENT evt( TC_MOUSE, action, button | modifiers );
evt.SetParameter( type ); evt.SetParameter( type );
evt.SetMousePosition( getViewControls()->GetCursorPosition() ); evt.SetMousePosition( getViewControls()->GetMousePosition() );
m_toolMgr->ProcessEvent( evt ); m_toolMgr->ProcessEvent( evt );
return 0; return 0;

View File

@ -30,6 +30,7 @@ using namespace std::placeholders;
#include <tool/tool_manager.h> #include <tool/tool_manager.h>
#include <view/view.h> #include <view/view.h>
#include <tool/grid_helper.h> #include <tool/grid_helper.h>
#include <settings/app_settings.h>
GRID_HELPER::GRID_HELPER( TOOL_MANAGER* aToolMgr ) : GRID_HELPER::GRID_HELPER( TOOL_MANAGER* aToolMgr ) :
@ -70,6 +71,29 @@ VECTOR2I GRID_HELPER::GetOrigin() const
} }
GRID_HELPER_GRIDS GRID_HELPER::GetSelectionGrid( const SELECTION& aSelection ) const
{
GRID_HELPER_GRIDS grid = GetItemGrid( aSelection.Front() );
// Find the largest grid of all the items and use that
for( EDA_ITEM* item : aSelection )
{
GRID_HELPER_GRIDS itemGrid = GetItemGrid( item );
if( GetGridSize( itemGrid ) > GetGridSize( grid ) )
grid = itemGrid;
}
return grid;
}
VECTOR2D GRID_HELPER::GetGridSize( GRID_HELPER_GRIDS aGrid ) const
{
return m_toolMgr->GetView()->GetGAL()->GetGridSize();
}
void GRID_HELPER::SetAuxAxes( bool aEnable, const VECTOR2I& aOrigin ) void GRID_HELPER::SetAuxAxes( bool aEnable, const VECTOR2I& aOrigin )
{ {
if( aEnable ) if( aEnable )

View File

@ -61,18 +61,6 @@ EE_GRID_HELPER::EE_GRID_HELPER( TOOL_MANAGER* aToolMgr ) :
} }
VECTOR2I EE_GRID_HELPER::AlignGrid( const VECTOR2I& aPoint, GRID_HELPER_GRIDS aGrid ) const
{
return AlignGrid( aPoint, GetGridSize( aGrid ), GetOrigin() );
}
VECTOR2I EE_GRID_HELPER::Align( const VECTOR2I& aPoint, GRID_HELPER_GRIDS aGrid ) const
{
return Align( aPoint, GetGridSize( aGrid ), GetOrigin() );
}
VECTOR2I EE_GRID_HELPER::BestDragOrigin( const VECTOR2I& aMousePos, GRID_HELPER_GRIDS aGrid, VECTOR2I EE_GRID_HELPER::BestDragOrigin( const VECTOR2I& aMousePos, GRID_HELPER_GRIDS aGrid,
const EE_SELECTION& aItems ) const EE_SELECTION& aItems )
{ {
@ -334,7 +322,7 @@ std::set<SCH_ITEM*> EE_GRID_HELPER::queryVisible( const BOX2I& aArea,
} }
GRID_HELPER_GRIDS EE_GRID_HELPER::GetSelectionGrid( const EE_SELECTION& aSelection ) GRID_HELPER_GRIDS EE_GRID_HELPER::GetSelectionGrid( const SELECTION& aSelection ) const
{ {
GRID_HELPER_GRIDS grid = GetItemGrid( aSelection.Front() ); GRID_HELPER_GRIDS grid = GetItemGrid( aSelection.Front() );
@ -403,6 +391,7 @@ GRID_HELPER_GRIDS EE_GRID_HELPER::GetItemGrid( const EDA_ITEM* aItem ) const
} }
} }
void EE_GRID_HELPER::computeAnchors( SCH_ITEM *aItem, const VECTOR2I &aRefPos, bool aFrom, void EE_GRID_HELPER::computeAnchors( SCH_ITEM *aItem, const VECTOR2I &aRefPos, bool aFrom,
bool aIncludeText ) bool aIncludeText )
{ {
@ -480,7 +469,7 @@ void EE_GRID_HELPER::computeAnchors( SCH_ITEM *aItem, const VECTOR2I &aRefPos, b
EE_GRID_HELPER::ANCHOR* EE_GRID_HELPER::nearestAnchor( const VECTOR2I& aPos, int aFlags, EE_GRID_HELPER::ANCHOR* EE_GRID_HELPER::nearestAnchor( const VECTOR2I& aPos, int aFlags,
int aMatchLayer ) GRID_HELPER_GRIDS aGrid )
{ {
double minDist = std::numeric_limits<double>::max(); double minDist = std::numeric_limits<double>::max();
ANCHOR* best = nullptr; ANCHOR* best = nullptr;
@ -492,9 +481,9 @@ EE_GRID_HELPER::ANCHOR* EE_GRID_HELPER::nearestAnchor( const VECTOR2I& aPos, int
if( ( aFlags & a.flags ) != aFlags ) if( ( aFlags & a.flags ) != aFlags )
continue; continue;
if( aMatchLayer == LAYER_NOCONNECT && !item->IsConnectable() ) if( aGrid == GRID_CONNECTABLE && !item->IsConnectable() )
continue; continue;
else if( aMatchLayer == GRID_GRAPHICS && item->IsConnectable() ) else if( aGrid == GRID_GRAPHICS && item->IsConnectable() )
continue; continue;
double dist = a.Distance( aPos ); double dist = a.Distance( aPos );

View File

@ -35,29 +35,12 @@ class SCH_ITEM;
class LIB_ITEM; class LIB_ITEM;
enum GRID_HELPER_GRIDS : int
{
// When the item doesn't match an override, use the current user grid
GRID_CURRENT,
GRID_CONNECTABLE,
GRID_WIRES,
GRID_TEXT,
GRID_GRAPHICS
};
class EE_GRID_HELPER : public GRID_HELPER class EE_GRID_HELPER : public GRID_HELPER
{ {
public: public:
EE_GRID_HELPER( TOOL_MANAGER* aToolMgr ); EE_GRID_HELPER( TOOL_MANAGER* aToolMgr );
using GRID_HELPER::Align;
using GRID_HELPER::AlignGrid;
VECTOR2I Align( const VECTOR2I& aPoint, GRID_HELPER_GRIDS aGrid ) const;
VECTOR2I AlignGrid( const VECTOR2I& aPoint, GRID_HELPER_GRIDS aGrid ) const;
/** /**
* Function GetSnapped * Function GetSnapped
* If the EE_GRID_HELPER has highlighted a snap point (target shown), this function * If the EE_GRID_HELPER has highlighted a snap point (target shown), this function
@ -67,18 +50,11 @@ public:
*/ */
SCH_ITEM* GetSnapped() const; SCH_ITEM* GetSnapped() const;
VECTOR2D GetGridSize( GRID_HELPER_GRIDS aGrid ) const; VECTOR2D GetGridSize( GRID_HELPER_GRIDS aGrid ) const override;
using GRID_HELPER::GetGrid; using GRID_HELPER::GetGrid;
/** GRID_HELPER_GRIDS GetSelectionGrid( const SELECTION& aItem ) const override;
* Gets the coarsest grid that applies to a selecion of items. GRID_HELPER_GRIDS GetItemGrid( const EDA_ITEM* aItem ) const override;
*/
GRID_HELPER_GRIDS GetSelectionGrid( const EE_SELECTION& aItem );
/**
* Gets the coarsest grid that applies to an item.
*/
GRID_HELPER_GRIDS GetItemGrid( const EDA_ITEM* aItem ) const;
VECTOR2I BestDragOrigin( const VECTOR2I& aMousePos, GRID_HELPER_GRIDS aGrid, VECTOR2I BestDragOrigin( const VECTOR2I& aMousePos, GRID_HELPER_GRIDS aGrid,
const EE_SELECTION& aItems ); const EE_SELECTION& aItems );
@ -90,7 +66,7 @@ public:
private: private:
std::set<SCH_ITEM*> queryVisible( const BOX2I& aArea, const EE_SELECTION& aSkipList ) const; std::set<SCH_ITEM*> queryVisible( const BOX2I& aArea, const EE_SELECTION& aSkipList ) const;
ANCHOR* nearestAnchor( const VECTOR2I& aPos, int aFlags, int aMatchLayer ); ANCHOR* nearestAnchor( const VECTOR2I& aPos, int aFlags, GRID_HELPER_GRIDS aGrid );
/** /**
* Insert the local anchor points in to the grid helper for the specified * Insert the local anchor points in to the grid helper for the specified

View File

@ -24,6 +24,7 @@
#ifndef GRID_HELPER_H #ifndef GRID_HELPER_H
#define GRID_HELPER_H #define GRID_HELPER_H
#include "tool/selection.h"
#include <tool/tool_manager.h> #include <tool/tool_manager.h>
#include <vector> #include <vector>
#include <math/vector2d.h> #include <math/vector2d.h>
@ -32,6 +33,16 @@
class TOOL_MANAGER; class TOOL_MANAGER;
class EDA_ITEM; class EDA_ITEM;
enum GRID_HELPER_GRIDS : int
{
// When the item doesn't match an override, use the current user grid
GRID_CURRENT,
GRID_CONNECTABLE,
GRID_WIRES,
GRID_TEXT,
GRID_GRAPHICS
};
class GRID_HELPER class GRID_HELPER
{ {
@ -45,6 +56,16 @@ public:
void SetAuxAxes( bool aEnable, const VECTOR2I& aOrigin = VECTOR2I( 0, 0 ) ); void SetAuxAxes( bool aEnable, const VECTOR2I& aOrigin = VECTOR2I( 0, 0 ) );
virtual VECTOR2I Align( const VECTOR2I& aPoint, GRID_HELPER_GRIDS aGrid ) const
{
return Align( aPoint, GetGridSize( aGrid ), GetOrigin() );
}
virtual VECTOR2I AlignGrid( const VECTOR2I& aPoint, GRID_HELPER_GRIDS aGrid ) const
{
return AlignGrid( aPoint, GetGridSize( aGrid ), GetOrigin() );
}
virtual VECTOR2I Align( const VECTOR2I& aPoint ) const; virtual VECTOR2I Align( const VECTOR2I& aPoint ) const;
virtual VECTOR2I Align( const VECTOR2I& aPoint, const VECTOR2D& aGrid, virtual VECTOR2I Align( const VECTOR2I& aPoint, const VECTOR2D& aGrid,
const VECTOR2D& aOffset ) const; const VECTOR2D& aOffset ) const;
@ -53,6 +74,21 @@ public:
VECTOR2I AlignGrid( const VECTOR2I& aPoint, const VECTOR2D& aGrid, VECTOR2I AlignGrid( const VECTOR2I& aPoint, const VECTOR2D& aGrid,
const VECTOR2D& aOffset ) const; const VECTOR2D& aOffset ) const;
/**
* Gets the coarsest grid that applies to a selecion of items.
*/
virtual GRID_HELPER_GRIDS GetSelectionGrid( const SELECTION& aSelection ) const;
/**
* Gets the coarsest grid that applies to an item.
*/
virtual GRID_HELPER_GRIDS GetItemGrid( const EDA_ITEM* aItem ) const { return GRID_CURRENT; }
/**
* Return the size of the specified grid
*/
virtual VECTOR2D GetGridSize( GRID_HELPER_GRIDS aGrid ) const;
void SetSkipPoint( const VECTOR2I& aPoint ) void SetSkipPoint( const VECTOR2I& aPoint )
{ {
m_skipPoint = aPoint; m_skipPoint = aPoint;

View File

@ -31,6 +31,8 @@
#include <tool/grid_helper.h> #include <tool/grid_helper.h>
class TOOL_MANAGER; class TOOL_MANAGER;
struct MAGNETIC_SETTINGS;
struct SELECTION_FILTER_OPTIONS;
class PCB_GRID_HELPER : public GRID_HELPER class PCB_GRID_HELPER : public GRID_HELPER
{ {
@ -47,6 +49,9 @@ public:
*/ */
BOARD_ITEM* GetSnapped() const; BOARD_ITEM* GetSnapped() const;
using GRID_HELPER::Align;
using GRID_HELPER::AlignGrid;
VECTOR2I AlignToSegment ( const VECTOR2I& aPoint, const SEG& aSeg ); VECTOR2I AlignToSegment ( const VECTOR2I& aPoint, const SEG& aSeg );
VECTOR2I BestDragOrigin( const VECTOR2I& aMousePos, std::vector<BOARD_ITEM*>& aItem, VECTOR2I BestDragOrigin( const VECTOR2I& aMousePos, std::vector<BOARD_ITEM*>& aItem,