KiCad PCB EDA Suite
GERBVIEW_SELECTION Class Reference

#include <gerbview_selection.h>

Inheritance diagram for GERBVIEW_SELECTION:
SELECTION KIGFX::VIEW_GROUP KIGFX::VIEW_ITEM INSPECTABLE

Public Types

using ITER = std::deque< EDA_ITEM * >::iterator
 
using CITER = std::deque< EDA_ITEM * >::const_iterator
 

Public Member Functions

VECTOR2I GetCenter () const override
 Returns the center point of the selection area bounding box. More...
 
const BOX2I ViewBBox () const override
 Return the bounding box for all stored items covering all its layers. More...
 
ITER begin ()
 
CITER begin () const
 
ITER end ()
 
CITER end () const
 
void SetIsHover (bool aIsHover)
 
bool IsHover () const
 
virtual void Add (EDA_ITEM *aItem)
 
virtual void Add (VIEW_ITEM *aItem)
 Add an item to the group. More...
 
virtual void Remove (EDA_ITEM *aItem)
 
virtual void Remove (VIEW_ITEM *aItem)
 Remove an item from the group. More...
 
virtual void Clear () override
 Remove all the stored items from the group. More...
 
virtual unsigned int GetSize () const override
 Return the number of stored items. More...
 
virtual KIGFX::VIEW_ITEMGetItem (unsigned int aIdx) const override
 
bool Contains (EDA_ITEM *aItem) const
 
bool Empty () const
 Checks if there is anything selected. More...
 
int Size () const
 Returns the number of selected parts. More...
 
const std::deque< EDA_ITEM * > GetItems () const
 
VECTOR2I GetPosition () const
 Returns the top left point of the selection area bounding box. More...
 
virtual EDA_RECT GetBoundingBox () const
 
virtual EDA_ITEMGetTopLeftItem (bool onlyModules=false) const
 
EDA_ITEMoperator[] (const size_t aIdx) const
 
EDA_ITEMFront () const
 
std::deque< EDA_ITEM * > & Items ()
 
template<class T >
T * FirstOfKind () const
 
bool HasType (KICAD_T aType) const
 Checks if there is at least one item of requested kind. More...
 
virtual const std::vector< KIGFX::VIEW_ITEM * > updateDrawList () const override
 
bool HasReferencePoint () const
 
VECTOR2I GetReferencePoint () const
 
void SetReferencePoint (const VECTOR2I &aP)
 
void ClearReferencePoint ()
 
bool AreAllItemsIdentical () const
 Checks if all items in the selection are the same KICAD_T type. More...
 
virtual void ViewDraw (int aLayer, VIEW *aView) const override
 Draw all the stored items in the group on the given layer. More...
 
virtual void ViewGetLayers (int aLayers[], int &aCount) const override
 Return all the layers used by the stored items. More...
 
virtual void SetLayer (int aLayer)
 Set layer used to draw the group. More...
 
void FreeItems ()
 Free all the items that were added to the group. More...
 
virtual double ViewGetLOD (int aLayer, VIEW *aView) const
 Return the level of detail (LOD) of the item. More...
 
VIEW_ITEM_DATA * viewPrivData () const
 
void ClearViewPrivData ()
 
bool Set (PROPERTY_BASE *aProperty, wxAny &aValue)
 
template<typename T >
bool Set (PROPERTY_BASE *aProperty, T aValue)
 
template<typename T >
bool Set (const wxString &aProperty, T aValue)
 
wxAny Get (PROPERTY_BASE *aProperty)
 
template<typename T >
Get (PROPERTY_BASE *aProperty)
 
template<typename T >
boost::optional< T > Get (const wxString &aProperty)
 

Protected Attributes

OPT< VECTOR2Im_referencePoint
 
std::deque< EDA_ITEM * > m_items
 
bool m_isHover
 
int m_layer
 
std::vector< VIEW_ITEM * > m_groupItems
 

Detailed Description

Definition at line 30 of file gerbview_selection.h.

Member Typedef Documentation

◆ CITER

using SELECTION::CITER = std::deque<EDA_ITEM*>::const_iterator
inherited

Definition at line 62 of file selection.h.

◆ ITER

using SELECTION::ITER = std::deque<EDA_ITEM*>::iterator
inherited

Definition at line 61 of file selection.h.

Member Function Documentation

◆ Add() [1/2]

◆ Add() [2/2]

void SELECTION::Add ( EDA_ITEM aItem)
virtualinherited

Definition at line 32 of file selection.cpp.

33 {
34  // We're not sorting here; this is just a time-optimized way to do an
35  // inclusion check. std::lower_bound will return the first i >= aItem
36  // and the second i > aItem check rules out i == aItem.
37  ITER i = std::lower_bound( m_items.begin(), m_items.end(), aItem );
38 
39  if( i == m_items.end() || *i > aItem )
40  m_items.insert( i, aItem );
41 }
PTREE::iterator ITER
Definition: ptree.cpp:36
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by EE_GRID_HELPER::BestSnapAnchor(), PCB_TOOL_BASE::doInteractiveItemPlacement(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), SCH_EDIT_FRAME::FixupJunctions(), PL_SELECTION_TOOL::highlight(), EE_SELECTION_TOOL::highlight(), PCB_SELECTION_TOOL::highlight(), DRAWING_TOOL::PlaceImportedGraphics(), SCH_EDIT_TOOL::RepeatDrawItem(), and GERBVIEW_SELECTION_TOOL::select().

◆ AreAllItemsIdentical()

bool SELECTION::AreAllItemsIdentical ( ) const
inherited

Checks if all items in the selection are the same KICAD_T type.

Returns
True if all items are the same type, this includes zero or single items

Definition at line 134 of file selection.cpp.

135 {
136  return ( std::all_of( m_items.begin() + 1, m_items.end(),
137  [&]( const EDA_ITEM* r )
138  {
139  return r->Type() == m_items.front()->Type();
140  } ) );
141 }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206
E_SERIE r
Definition: eserie.cpp:41
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:100

References SELECTION::m_items, and r.

Referenced by SCH_EDIT_TOOL::Properties().

◆ begin() [1/2]

ITER SELECTION::begin ( )
inlineinherited

Definition at line 64 of file selection.h.

64 { return m_items.begin(); }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by BOARD_INSPECTION_TOOL::calculateSelectionRatsnest(), and EDIT_TOOL::FilletTracks().

◆ begin() [2/2]

CITER SELECTION::begin ( ) const
inlineinherited

Definition at line 66 of file selection.h.

66 { return m_items.cbegin(); }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

◆ Clear()

◆ ClearReferencePoint()

◆ ClearViewPrivData()

void KIGFX::VIEW_ITEM::ClearViewPrivData ( )
inlineinherited

Definition at line 143 of file view_item.h.

144  {
145  m_viewPrivData = nullptr;
146  }
VIEW_ITEM_DATA * m_viewPrivData
Definition: view_item.h:151

References KIGFX::VIEW_ITEM::m_viewPrivData.

Referenced by KIGFX::VIEW::OnDestroy().

◆ Contains()

bool SELECTION::Contains ( EDA_ITEM aItem) const
inherited

Definition at line 62 of file selection.cpp.

63 {
64  CITER i = std::lower_bound( m_items.begin(), m_items.end(), aItem );
65 
66  return !( i == m_items.end() || *i > aItem );
67 }
PTREE::const_iterator CITER
Definition: ptree.cpp:35
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by EDIT_TOOL::FilletTracks(), and PCB_SELECTION_TOOL::select().

◆ Empty()

bool SELECTION::Empty ( ) const
inlineinherited

Checks if there is anything selected.

Definition at line 98 of file selection.h.

99  {
100  return m_items.empty();
101  }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by SCH_EDIT_TOOL::AutoplaceFields(), SCH_EDIT_TOOL::ChangeSymbols(), PL_SELECTION_TOOL::ClearSelection(), PCB_SELECTION_TOOL::ClearSelection(), GERBVIEW_SELECTION_TOOL::clearSelection(), EE_SELECTION_TOOL::ClearSelection(), SCH_EDIT_TOOL::ConvertDeMorgan(), EDIT_TOOL::copyToClipboard(), EDIT_TOOL::CreateArray(), ZONE_CREATE_HELPER::createNewZone(), DIALOG_BOARD_REANNOTATE::DIALOG_BOARD_REANNOTATE(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), BOARD_INSPECTION_TOOL::doHideNet(), EDIT_TOOL::doMoveSelection(), EDIT_TOOL::Drag(), EDIT_TOOL::Duplicate(), BOARD_EDITOR_CONTROL::EditFpInFpEditor(), SELECTION_CONDITIONS::Empty(), GLOBAL_EDIT_TOOL::ExchangeFootprints(), EDIT_TOOL::Flip(), DRAWING_TOOL::getSourceZoneForAction(), GROUP_TOOL::Group(), ROUTER_TOOL::InlineDrag(), BOARD_INSPECTION_TOOL::LocalRatsnestTool(), PL_EDIT_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), SCH_MOVE_TOOL::Main(), PL_SELECTION_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), PCB_SELECTION_TOOL::Main(), EDIT_TOOL::Mirror(), BOARD_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), SELECTION_CONDITIONS::NotEmpty(), PCB_SELECTION_CONDITIONS::OnlyConnectedItems(), PCB_SELECTION_CONDITIONS::onlyGraphicShapeTypesFunc(), SELECTION_CONDITIONS::onlyTypeFunc(), SELECTION_CONDITIONS::onlyTypesFunc(), PL_EDIT_TOOL::Paste(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), GROUP_TOOL::PickNewMember(), POSITION_RELATIVE_TOOL::PositionRelative(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), BOARD_REANNOTATE_TOOL::ReannotateDuplicatesInSelection(), EDIT_TOOL::Remove(), GROUP_TOOL::RemoveFromGroup(), PL_SELECTION_TOOL::RequestSelection(), EE_SELECTION_TOOL::RequestSelection(), PCB_SELECTION_TOOL::RequestSelection(), EDIT_TOOL::Rotate(), PCB_SELECTION_CONDITIONS::sameLayerFunc(), PCB_SELECTION_CONDITIONS::sameNetFunc(), CLIPBOARD_IO::SaveSelection(), SCH_EDIT_FRAME::SaveSymbolToSchematic(), EE_SELECTION_TOOL::SelectConnection(), GERBVIEW_SELECTION_TOOL::selectCursor(), PCB_SELECTION_TOOL::selectCursor(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), EE_INSPECTION_TOOL::ShowDatasheet(), GROUP_TOOL::Ungroup(), GERBVIEW_SELECTION_TOOL::unselect(), and BOARD_INSPECTION_TOOL::UpdateSelectionRatsnest().

◆ end() [1/2]

ITER SELECTION::end ( )
inlineinherited

Definition at line 65 of file selection.h.

65 { return m_items.end(); }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by BOARD_INSPECTION_TOOL::calculateSelectionRatsnest(), and EDIT_TOOL::FilletTracks().

◆ end() [2/2]

CITER SELECTION::end ( ) const
inlineinherited

Definition at line 67 of file selection.h.

67 { return m_items.cend(); }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

◆ FirstOfKind()

template<class T >
T* SELECTION::FirstOfKind ( ) const
inlineinherited

Definition at line 156 of file selection.h.

157  {
158  for( auto item : m_items )
159  {
160  if( IsA<T, EDA_ITEM>( item ) )
161  return static_cast<T*> ( item );
162  }
163 
164  return nullptr;
165  }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by BOARD_EDITOR_CONTROL::EditFpInFpEditor(), and GLOBAL_EDIT_TOOL::ExchangeFootprints().

◆ FreeItems()

void VIEW_GROUP::FreeItems ( )
inherited

Free all the items that were added to the group.

Definition at line 192 of file view_group.cpp.

193 {
194  for( unsigned int i = 0 ; i < GetSize(); i++ )
195  delete GetItem( i );
196 
197  Clear();
198 }
virtual void Clear()
Remove all the stored items from the group.
Definition: view_group.cpp:69
virtual VIEW_ITEM * GetItem(unsigned int aIdx) const
Definition: view_group.cpp:81
virtual unsigned int GetSize() const
Return the number of stored items.
Definition: view_group.cpp:75

References KIGFX::VIEW_GROUP::Clear(), KIGFX::VIEW_GROUP::GetItem(), and KIGFX::VIEW_GROUP::GetSize().

Referenced by PNS_PCBNEW_DEBUG_DECORATOR::Clear(), PNS_KICAD_IFACE::EraseView(), PNS_KICAD_IFACE::SetView(), and PNS_KICAD_IFACE::~PNS_KICAD_IFACE().

◆ Front()

EDA_ITEM* SELECTION::Front ( ) const
inlineinherited

Definition at line 145 of file selection.h.

146  {
147  return m_items.size() ? m_items.front() : nullptr;
148  }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by PCB_POINT_EDITOR::addCornerCondition(), ROUTER_TOOL::CanInlineDrag(), SCH_EDIT_TOOL::ChangeSymbols(), SCH_EDIT_TOOL::CleanupSheetPins(), PL_SELECTION_TOOL::ClearSelection(), PCB_SELECTION_TOOL::ClearSelection(), EE_SELECTION_TOOL::ClearSelection(), SCH_EDIT_TOOL::ConvertDeMorgan(), DRC_TOOL::CrossProbe(), BOARD_INSPECTION_TOOL::CrossProbePcbToSch(), SCH_EDITOR_CONTROL::doCrossProbeSchToPcb(), PL_EDIT_TOOL::DoDelete(), EDIT_TOOL::doMoveSelection(), EDIT_TOOL::Drag(), EDIT_TOOL::DragArcTrack(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::EditField(), SCH_EDIT_TOOL::EditPageNumber(), SCH_EDITOR_CONTROL::FindNext(), EDIT_TOOL::Flip(), GetCenter(), SCH_EDITOR_CONTROL::HasMatch(), SELECTION_CONDITIONS::Idle(), SELECTION_CONDITIONS::IdleSelection(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingBus(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingLine(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingWire(), EE_POINT_EDITOR::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PL_POINT_EDITOR::Main(), SCH_MOVE_TOOL::Main(), EE_SELECTION_TOOL::Main(), SYMBOL_EDITOR_EDIT_TOOL::Mirror(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), PCB_POINT_EDITOR::OnSelectionChange(), GROUP_TOOL::PickNewMember(), DRAWING_TOOL::PlaceImportedGraphics(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), SYMBOL_EDITOR_PIN_TOOL::PushPinProperties(), SCH_EDITOR_CONTROL::ReplaceAndFindNext(), SYMBOL_EDITOR_EDIT_TOOL::Rotate(), EDIT_TOOL::Rotate(), CLIPBOARD_IO::SaveSelection(), EE_SELECTION_TOOL::SelectConnection(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), PCB_SELECTION_TOOL::selectSameSheet(), EE_INSPECTION_TOOL::ShowDatasheet(), SCH_DRAWING_TOOLS::SingleClickPlace(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::TransferDataToWindow(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::TransferDataToWindow(), SCH_DRAWING_TOOLS::TwoClickPlace(), BUS_UNFOLD_MENU::update(), PCB_CONTROL::UpdateMessagePanel(), PL_EDIT_TOOL::updateModificationPoint(), EDIT_TOOL::updateModificationPoint(), and ViewBBox().

◆ Get() [1/3]

wxAny INSPECTABLE::Get ( PROPERTY_BASE aProperty)
inlineinherited

Definition at line 86 of file inspectable.h.

87  {
89  TYPE_ID thisType = TYPE_HASH( *this );
90  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
91  return object ? aProperty->getter( object ) : wxAny();
92  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
virtual wxAny getter(void *aObject) const =0
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::getter(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

Referenced by BOOST_AUTO_TEST_CASE(), CLASS_D_DESC::CLASS_D_DESC(), PCB_EXPR_VAR_REF::GetValue(), and PAD_DESC::PAD_DESC().

◆ Get() [2/3]

template<typename T >
T INSPECTABLE::Get ( PROPERTY_BASE aProperty)
inlineinherited

Definition at line 95 of file inspectable.h.

96  {
98  TYPE_ID thisType = TYPE_HASH( *this );
99  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
100  return object ? aProperty->get<T>( object ) : T();
101  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
T get(void *aObject)
Definition: property.h:268
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::get(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Get() [3/3]

template<typename T >
boost::optional<T> INSPECTABLE::Get ( const wxString &  aProperty)
inlineinherited

Definition at line 104 of file inspectable.h.

105  {
107  TYPE_ID thisType = TYPE_HASH( *this );
108  PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
109  boost::optional<T> ret = T();
110 
111  if( prop )
112  {
113  void* object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
114 
115  if( object )
116  ret = prop->get<T>( object );
117  }
118 
119  return ret;
120  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
PROPERTY_BASE * GetProperty(TYPE_ID aType, const wxString &aProperty) const
Return a property for a specific type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
T get(void *aObject)
Definition: property.h:268
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::get(), PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ GetBoundingBox()

EDA_RECT SELECTION::GetBoundingBox ( ) const
virtualinherited

Reimplemented in EE_SELECTION.

Definition at line 100 of file selection.cpp.

101 {
102  EDA_RECT bbox;
103 
104  for( EDA_ITEM* item : m_items )
105  bbox.Merge( item->GetBoundingBox() );
106 
107  return bbox;
108 }
void Merge(const EDA_RECT &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: eda_rect.cpp:432
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206
Handle the component boundary box.
Definition: eda_rect.h:42
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:100

References SELECTION::m_items, and EDA_RECT::Merge().

Referenced by SELECTION::GetPosition(), EDIT_TOOL::MoveExact(), and PCB_SELECTION_TOOL::zoomFitSelection().

◆ GetCenter()

VECTOR2I GERBVIEW_SELECTION::GetCenter ( ) const
overridevirtual

Returns the center point of the selection area bounding box.

Reimplemented from SELECTION.

Definition at line 26 of file gerbview_selection.cpp.

27 {
28  VECTOR2I centre;
29 
30  if( Size() == 1 )
31  {
32  centre = Front()->GetPosition();
33  }
34  else
35  {
36  EDA_RECT bbox = Front()->GetBoundingBox();
37  auto i = m_items.begin();
38  ++i;
39 
40  for( ; i != m_items.end(); ++i )
41  bbox.Merge( (*i)->GetBoundingBox() );
42 
43  centre = bbox.Centre();
44  }
45 
46  return centre;
47 }
void Merge(const EDA_RECT &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: eda_rect.cpp:432
virtual wxPoint GetPosition() const
Definition: eda_item.h:252
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206
Handle the component boundary box.
Definition: eda_rect.h:42
int Size() const
Returns the number of selected parts.
Definition: selection.h:104
wxPoint Centre() const
Definition: eda_rect.h:55
virtual const EDA_RECT GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
Definition: eda_item.cpp:75
EDA_ITEM * Front() const
Definition: selection.h:145

References EDA_RECT::Centre(), SELECTION::Front(), EDA_ITEM::GetBoundingBox(), EDA_ITEM::GetPosition(), SELECTION::m_items, EDA_RECT::Merge(), and SELECTION::Size().

◆ GetItem()

◆ GetItems()

const std::deque<EDA_ITEM*> SELECTION::GetItems ( ) const
inlineinherited

◆ GetPosition()

VECTOR2I SELECTION::GetPosition ( ) const
inlineinherited

Returns the top left point of the selection area bounding box.

Definition at line 125 of file selection.h.

126  {
127  return static_cast<VECTOR2I>( GetBoundingBox().GetPosition() );
128  }
VECTOR2I GetPosition() const
Returns the top left point of the selection area bounding box.
Definition: selection.h:125
virtual EDA_RECT GetBoundingBox() const
Definition: selection.cpp:100

References SELECTION::GetBoundingBox().

◆ GetReferencePoint()

VECTOR2I SELECTION::GetReferencePoint ( ) const
inlineinherited

◆ GetSize()

◆ GetTopLeftItem()

virtual EDA_ITEM* SELECTION::GetTopLeftItem ( bool  onlyModules = false) const
inlinevirtualinherited

Reimplemented in EE_SELECTION, PL_SELECTION, and PCB_SELECTION.

Definition at line 132 of file selection.h.

133  {
134  return nullptr;
135  }

◆ HasReferencePoint()

bool SELECTION::HasReferencePoint ( ) const
inlineinherited

◆ HasType()

bool SELECTION::HasType ( KICAD_T  aType) const
inherited

Checks if there is at least one item of requested kind.

Parameters
aTypeis the type to check for.
Returns
True if there is at least one item of such kind.

Definition at line 111 of file selection.cpp.

112 {
113  for( auto item : m_items )
114  {
115  if( item->Type() == aType )
116  return true;
117  }
118 
119  return false;
120 }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by EDIT_TOOL::Remove().

◆ IsHover()

◆ Items()

std::deque<EDA_ITEM*>& SELECTION::Items ( )
inlineinherited

Definition at line 150 of file selection.h.

151  {
152  return m_items;
153  }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by EE_SELECTION::GetMultiUnitSymbols(), EE_SELECTION::GetSymbols(), and SCH_EDIT_TOOL::Properties().

◆ operator[]()

EDA_ITEM* SELECTION::operator[] ( const size_t  aIdx) const
inlineinherited

Definition at line 137 of file selection.h.

138  {
139  if( aIdx < m_items.size() )
140  return m_items[ aIdx ];
141 
142  return nullptr;
143  }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

◆ Remove() [1/2]

void VIEW_GROUP::Remove ( VIEW_ITEM aItem)
virtualinherited

Remove an item from the group.

Definition at line 63 of file view_group.cpp.

64 {
66 }
std::vector< VIEW_ITEM * > m_groupItems
Definition: view_group.h:113
void delete_matching(_Container &__c, _Value __value)
Covers for the horrifically named std::remove and std::remove_if (neither of which remove anything).
Definition: kicad_algo.h:164

References alg::delete_matching(), and KIGFX::VIEW_GROUP::m_groupItems.

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), and BOARD_EDITOR_CONTROL::PlaceTarget().

◆ Remove() [2/2]

void SELECTION::Remove ( EDA_ITEM aItem)
virtualinherited

Definition at line 44 of file selection.cpp.

45 {
46  ITER i = std::lower_bound( m_items.begin(), m_items.end(), aItem );
47 
48  if( !( i == m_items.end() || *i > aItem ) )
49  m_items.erase( i );
50 }
PTREE::iterator ITER
Definition: ptree.cpp:36
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by DRAWING_TOOL::DrawDimension(), PL_SELECTION_TOOL::unhighlight(), EE_SELECTION_TOOL::unhighlight(), PCB_SELECTION_TOOL::unhighlight(), and GERBVIEW_SELECTION_TOOL::unselect().

◆ Set() [1/3]

bool INSPECTABLE::Set ( PROPERTY_BASE aProperty,
wxAny &  aValue 
)
inlineinherited

Definition at line 42 of file inspectable.h.

43  {
45  TYPE_ID thisType = TYPE_HASH( *this );
46  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
47 
48  if( object )
49  aProperty->setter( object, aValue );
50 
51  return object != nullptr;
52  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
virtual void setter(void *aObject, wxAny &aValue)=0
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::setter(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Set() [2/3]

template<typename T >
bool INSPECTABLE::Set ( PROPERTY_BASE aProperty,
aValue 
)
inlineinherited

Definition at line 55 of file inspectable.h.

56  {
58  TYPE_ID thisType = TYPE_HASH( *this );
59  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
60 
61  if( object )
62  aProperty->set<T>( object, aValue );
63 
64  return object != nullptr;
65  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
void set(void *aObject, T aValue)
Definition: property.h:261
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::set(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Set() [3/3]

template<typename T >
bool INSPECTABLE::Set ( const wxString &  aProperty,
aValue 
)
inlineinherited

Definition at line 68 of file inspectable.h.

69  {
71  TYPE_ID thisType = TYPE_HASH( *this );
72  PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
73  void* object = nullptr;
74 
75  if( prop )
76  {
77  object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
78 
79  if( object )
80  prop->set<T>( object, aValue );
81  }
82 
83  return object != nullptr;
84  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
PROPERTY_BASE * GetProperty(TYPE_ID aType, const wxString &aProperty) const
Return a property for a specific type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
void set(void *aObject, T aValue)
Definition: property.h:261
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::set(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ SetIsHover()

◆ SetLayer()

virtual void KIGFX::VIEW_GROUP::SetLayer ( int  aLayer)
inlinevirtualinherited

Set layer used to draw the group.

Definition at line 98 of file view_group.h.

99  {
100  m_layer = aLayer;
101  }

References KIGFX::VIEW_GROUP::m_layer.

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PCB_SELECTION_TOOL::doSelectionMenu(), PNS_KICAD_IFACE::SetView(), and PNS_PCBNEW_DEBUG_DECORATOR::SetView().

◆ SetReferencePoint()

◆ Size()

int SELECTION::Size ( ) const
inlineinherited

Returns the number of selected parts.

Definition at line 104 of file selection.h.

105  {
106  return m_items.size();
107  }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

Referenced by PCB_POINT_EDITOR::addCornerCondition(), ROUTER_TOOL::CanInlineDrag(), PAD_TOOL::copyPadSettings(), SELECTION_CONDITIONS::countFunc(), BOARD_INSPECTION_TOOL::CrossProbePcbToSch(), ALIGN_DISTRIBUTE_TOOL::DistributeHorizontally(), ALIGN_DISTRIBUTE_TOOL::DistributeVertically(), PL_EDIT_TOOL::DoDelete(), EDIT_TOOL::Drag(), EDIT_TOOL::DragArcTrack(), EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::EditField(), PAD_TOOL::EditPad(), PCB_SELECTION_TOOL::expandConnection(), EDIT_TOOL::FilletTracks(), GetCenter(), DRAWING_TOOL::getSourceZoneForAction(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), BOARD_INSPECTION_TOOL::InspectClearance(), BOARD_INSPECTION_TOOL::InspectConstraints(), ARRAY_CREATOR::Invoke(), SELECTION_CONDITIONS::lessThanFunc(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), SELECTION_CONDITIONS::moreThanFunc(), EDIT_TOOL::MoveExact(), PCB_POINT_EDITOR::OnSelectionChange(), PCB_CONTROL::placeBoardItems(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), CLIPBOARD_IO::SaveSelection(), PCB_SELECTION_TOOL::selectNet(), PCB_SELECTION_TOOL::selectSameSheet(), PCB_SELECTION_TOOL::selectSheetContents(), PL_EDIT_TOOL::updateModificationPoint(), EDIT_TOOL::updateModificationPoint(), EE_SELECTION_TOOL::updateReferencePoint(), ViewBBox(), BOARD_EDITOR_CONTROL::ZoneDuplicate(), and BOARD_EDITOR_CONTROL::ZoneMerge().

◆ updateDrawList()

const std::vector< KIGFX::VIEW_ITEM * > SELECTION::updateDrawList ( ) const
overridevirtualinherited

Reimplemented from KIGFX::VIEW_GROUP.

Reimplemented in PCB_SELECTION.

Definition at line 123 of file selection.cpp.

124 {
125  std::vector<VIEW_ITEM*> items;
126 
127  for( auto item : m_items )
128  items.push_back( item );
129 
130  return items;
131 }
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206

References SELECTION::m_items.

◆ ViewBBox()

const BOX2I GERBVIEW_SELECTION::ViewBBox ( ) const
overridevirtual

Return the bounding box for all stored items covering all its layers.

Reimplemented from SELECTION.

Definition at line 50 of file gerbview_selection.cpp.

51 {
52  EDA_RECT eda_bbox;
53 
54  if( Size() == 1 )
55  {
56  eda_bbox = Front()->GetBoundingBox();
57  }
58  else if( Size() > 1 )
59  {
60  eda_bbox = Front()->GetBoundingBox();
61  auto i = m_items.begin();
62  ++i;
63 
64  for( ; i != m_items.end(); ++i )
65  eda_bbox.Merge( (*i)->GetBoundingBox() );
66  }
67 
68  return BOX2I( eda_bbox.GetOrigin(), eda_bbox.GetSize() );
69 }
BOX2< VECTOR2I > BOX2I
Definition: box2.h:506
void Merge(const EDA_RECT &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: eda_rect.cpp:432
std::deque< EDA_ITEM * > m_items
Definition: selection.h:206
const wxPoint GetOrigin() const
Definition: eda_rect.h:101
Handle the component boundary box.
Definition: eda_rect.h:42
int Size() const
Returns the number of selected parts.
Definition: selection.h:104
virtual const EDA_RECT GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
Definition: eda_item.cpp:75
EDA_ITEM * Front() const
Definition: selection.h:145
const wxSize GetSize() const
Definition: eda_rect.h:91

References SELECTION::Front(), EDA_ITEM::GetBoundingBox(), EDA_RECT::GetOrigin(), EDA_RECT::GetSize(), SELECTION::m_items, EDA_RECT::Merge(), and SELECTION::Size().

◆ ViewDraw()

void VIEW_GROUP::ViewDraw ( int  aLayer,
VIEW aView 
) const
overridevirtualinherited

Draw all the stored items in the group on the given layer.

Parameters
aLayeris the layer which should be drawn.
aViewis the VIEW that should be used for drawing.

Reimplemented from KIGFX::VIEW_ITEM.

Definition at line 107 of file view_group.cpp.

108 {
109  KIGFX::GAL* gal = aView->GetGAL();
110  PAINTER* painter = aView->GetPainter();
111  bool isSelection = m_layer == LAYER_SELECT_OVERLAY;
112 
113  const std::vector<VIEW_ITEM*> drawList = updateDrawList();
114 
115  std::unordered_map<int, std::vector<VIEW_ITEM*>> layer_item_map;
116 
117  // Build a list of layers used by the items in the group
118  for( VIEW_ITEM* item : drawList )
119  {
120  int item_layers[VIEW::VIEW_MAX_LAYERS], item_layers_count;
121  item->ViewGetLayers( item_layers, item_layers_count );
122 
123  for( int i = 0; i < item_layers_count; i++ )
124  {
125  if( layer_item_map.count( item_layers[i] ) == 0 )
126  {
127  layer_item_map.emplace( std::make_pair( item_layers[i],
128  std::vector<VIEW_ITEM*>() ) );
129  }
130 
131  layer_item_map[ item_layers[i] ].push_back( item );
132  }
133  }
134 
135  int layers[VIEW::VIEW_MAX_LAYERS] = { 0 };
136  int layers_count = 0;
137 
138  for( const std::pair<const int, std::vector<VIEW_ITEM*>>& entry : layer_item_map )
139  layers[ layers_count++ ] = entry.first;
140 
141  aView->SortLayers( layers, layers_count );
142 
143  // Now draw the layers in sorted order
144 
145  gal->PushDepth();
146 
147  for( int i = 0; i < layers_count; i++ )
148  {
149  int layer = layers[i];
150  bool draw = aView->IsLayerVisible( layer );
151 
152  if( isSelection )
153  {
154  switch( layer )
155  {
156  case LAYER_PADS_TH:
158  case LAYER_PAD_HOLEWALLS:
159  case LAYER_PAD_FR:
160  case LAYER_PAD_BK:
161  draw = true;
162  break;
163  default:
164  break;
165  }
166  }
167 
168  if( draw )
169  {
170  gal->AdvanceDepth();
171 
172  for( VIEW_ITEM* item : layer_item_map[ layers[i] ] )
173  {
174  if( !painter->Draw( item, layers[i] ) )
175  item->ViewDraw( layers[i], aView ); // Alternative drawing method
176  }
177  }
178  }
179 
180  gal->PopDepth();
181 }
currently selected items overlay
Definition: layer_ids.h:215
smd pads, front layer
Definition: layer_ids.h:198
smd pads, back layer
Definition: layer_ids.h:199
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:190
An abstract base class for deriving all objects that can be added to a VIEW.
Definition: view_item.h:76
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:208
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:711
void SortLayers(int aLayers[], int &aCount) const
Change the order of given layer ids, so after sorting the order corresponds to layers rendering order...
Definition: view.cpp:647
Contains all the knowledge about how to draw graphical object onto any particular output device.
Definition: painter.h:57
void PopDepth()
Restore previously stored drawing depth for the depth stack.
virtual const std::vector< VIEW_ITEM * > updateDrawList() const
Definition: view_group.cpp:201
virtual bool Draw(const VIEW_ITEM *aItem, int aLayer)=0
Takes an instance of VIEW_ITEM and passes it to a function that knows how to draw the item.
void PushDepth()
Store current drawing depth on the depth stack.
multilayer pads, usually with holes
Definition: layer_ids.h:209
to draw pad holes (plated)
Definition: layer_ids.h:210
void AdvanceDepth()
Change the current depth to deeper, so it is possible to draw objects right beneath other.
Abstract interface for drawing on a 2D-surface.
bool IsLayerVisible(int aLayer) const
Return information about visibility of a particular layer.
Definition: view.h:405

References KIGFX::GAL::AdvanceDepth(), KIGFX::PAINTER::Draw(), KIGFX::VIEW::GetGAL(), KIGFX::VIEW::GetPainter(), KIGFX::VIEW::IsLayerVisible(), LAYER_PAD_BK, LAYER_PAD_FR, LAYER_PAD_HOLEWALLS, LAYER_PAD_PLATEDHOLES, LAYER_PADS_TH, LAYER_SELECT_OVERLAY, KIGFX::VIEW_GROUP::m_layer, KIGFX::GAL::PopDepth(), KIGFX::GAL::PushDepth(), KIGFX::VIEW::SortLayers(), KIGFX::VIEW_GROUP::updateDrawList(), and KIGFX::VIEW::VIEW_MAX_LAYERS.

◆ ViewGetLayers()

void VIEW_GROUP::ViewGetLayers ( int  aLayers[],
int &  aCount 
) const
overridevirtualinherited

Return all the layers used by the stored items.

Parameters
aLayers[]is the output layer index array.
aCountis the number of layer indices in aLayers[].

Implements KIGFX::VIEW_ITEM.

Definition at line 184 of file view_group.cpp.

185 {
186  // Everything is displayed on a single layer
187  aLayers[0] = m_layer;
188  aCount = 1;
189 }

References KIGFX::VIEW_GROUP::m_layer.

◆ ViewGetLOD()

virtual double KIGFX::VIEW_ITEM::ViewGetLOD ( int  aLayer,
VIEW aView 
) const
inlinevirtualinherited

Return the level of detail (LOD) of the item.

A level of detail is the minimal VIEW scale that is sufficient for an item to be shown on a given layer.

Parameters
aLayeris the current drawing layer.
aViewis a pointer to the VIEW device we are drawing on.
Returns
the level of detail. 0 always show the item, because the actual zoom level (or VIEW scale) is always > 0

Reimplemented in FP_ZONE, PAD, FOOTPRINT, PCB_VIA, GERBER_DRAW_ITEM, FP_TEXT, PCB_TRACK, ZONE, PCB_GROUP, and FP_SHAPE.

Definition at line 132 of file view_item.h.

133  {
134  // By default always show the item
135  return 0.0;
136  }

Referenced by PNS_KICAD_IFACE::IsItemVisible(), KIGFX::VIEW::DRAW_ITEM_VISITOR::operator()(), EE_GRID_HELPER::queryVisible(), PCB_GRID_HELPER::queryVisible(), and PCB_SELECTION_TOOL::Selectable().

◆ viewPrivData()

Member Data Documentation

◆ m_groupItems

◆ m_isHover

bool SELECTION::m_isHover
protectedinherited

◆ m_items

◆ m_layer

int KIGFX::VIEW_GROUP::m_layer
protectedinherited

◆ m_referencePoint

OPT<VECTOR2I> SELECTION::m_referencePoint
protectedinherited

The documentation for this class was generated from the following files: