KiCad PCB EDA Suite
COLLECTOR Class Reference

Class COLLECTOR is an abstract class that will find and hold all the objects according to an inspection done by the Inspect() function which must be implemented by any derived class. More...

#include <collector.h>

Inheritance diagram for COLLECTOR:
EE_COLLECTOR GERBER_COLLECTOR PCB_COLLECTOR EE_TYPE_COLLECTOR GENERAL_COLLECTOR PCB_LAYER_COLLECTOR PCB_TYPE_COLLECTOR

Public Types

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

Public Member Functions

 COLLECTOR ()
 
virtual ~COLLECTOR ()
 
virtual SEARCH_RESULT Inspect (EDA_ITEM *aItem, void *aTestData)
 
ITER begin ()
 
ITER end ()
 
CITER begin () const
 
CITER end () const
 
bool IsValidIndex (int aIndex)
 Function IsValidIndex tests if aIndex is with the limits of the list of collected items. More...
 
int GetCount () const
 Function GetCount returns the number of objects in the list. More...
 
void Empty ()
 Function Empty sets the list to empty. More...
 
void Append (EDA_ITEM *item)
 Function Append adds an item to the end of the list. More...
 
void Remove (int aIndex)
 Function Remove removes the item at aIndex (first position is 0);. More...
 
void Remove (const EDA_ITEM *aItem)
 Function Remove removes the item aItem (if exists in the collector). More...
 
virtual EDA_ITEMoperator[] (int aIndex) const
 Function operator[int] is used for read only access and returns the object at aIndex. More...
 
EDA_ITEM *const * BasePtr () const
 Function BasePtr returns the address of the first element in the array. More...
 
bool HasItem (const EDA_ITEM *aItem) const
 Function HasItem tests if aItem has already been collected. More...
 
void SetScanTypes (const KICAD_T *scanTypes)
 Function SetScanTypes records the list of KICAD_T types to consider for collection by the Inspect() function. More...
 
void SetTimeNow ()
 
timestamp_t GetTime ()
 
void SetRefPos (const wxPoint &aRefPos)
 
const wxPoint & GetRefPos () const
 
void SetBoundingBox (const EDA_RECT &aRefBox)
 
const EDA_RECTGetBoundingBox () const
 
bool IsSimilarPointAndTime (const wxPoint &aRefPos)
 Function IsSimilarPointAndTime returns true if the given reference point is "similar" (defined here) to the internal reference point and the current time is within a few seconds of the internal m_TimeAtCollection. More...
 
int CountType (KICAD_T aType)
 Function CountType counts the number of items matching aType. More...
 

Public Attributes

int m_Threshold
 
wxString m_MenuTitle
 
bool m_MenuCancelled
 

Protected Attributes

std::vector< EDA_ITEM * > m_List
 
const KICAD_Tm_ScanTypes
 
INSPECTOR_FUNC m_inspector
 
wxPoint m_RefPos
 
EDA_RECT m_RefBox
 
timestamp_t m_TimeAtCollection
 

Detailed Description

Class COLLECTOR is an abstract class that will find and hold all the objects according to an inspection done by the Inspect() function which must be implemented by any derived class.

When Inspect() finds an object that it wants to collect, i.e. one that it "likes", then it only has to do an Append( testItem ) on it to add it to its collection, but in all cases for the scan to continue, Inspect() must return SEARCH_CONTINUE.

Later, after collection, the user can iterate through all the objects in the remembered collection using GetCount() and the [int] operator.

Definition at line 55 of file collector.h.

Member Typedef Documentation

◆ CITER

using COLLECTOR::CITER = std::vector<EDA_ITEM*>::const_iterator

Definition at line 89 of file collector.h.

◆ ITER

using COLLECTOR::ITER = std::vector<EDA_ITEM*>::iterator

Definition at line 88 of file collector.h.

Constructor & Destructor Documentation

◆ COLLECTOR()

COLLECTOR::COLLECTOR ( )
inline

Definition at line 74 of file collector.h.

74  :
75  m_ScanTypes( 0 ),
76  // Inspect() is virtual so calling it from a class common inspector preserves polymorphism.
77  m_inspector( [=] ( EDA_ITEM* aItem, void* aTestData ) { return this->Inspect( aItem, aTestData ); } ),
78  m_TimeAtCollection( 0 ),
79  m_Threshold( 0 ),
80  m_MenuCancelled( false )
81  {
82  }
int m_Threshold
Definition: collector.h:68
bool m_MenuCancelled
Definition: collector.h:71
INSPECTOR_FUNC m_inspector
Definition: collector.h:61
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:150
timestamp_t m_TimeAtCollection
Definition: collector.h:65
virtual SEARCH_RESULT Inspect(EDA_ITEM *aItem, void *aTestData)
Definition: collector.h:86
const KICAD_T * m_ScanTypes
Definition: collector.h:60

References Inspect().

◆ ~COLLECTOR()

virtual COLLECTOR::~COLLECTOR ( )
inlinevirtual

Definition at line 84 of file collector.h.

84 {}

Member Function Documentation

◆ Append()

◆ BasePtr()

EDA_ITEM* const* COLLECTOR::BasePtr ( ) const
inline

Function BasePtr returns the address of the first element in the array.

Only call this if there is at least one element in the vector m_List, otherwise a C++ exception should get thrown.

Definition at line 184 of file collector.h.

185  {
186  return &m_List[0];
187  }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References m_List.

◆ begin() [1/2]

ITER COLLECTOR::begin ( )
inline

Definition at line 91 of file collector.h.

91 { return m_List.begin(); }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References m_List.

Referenced by SELECTION_TOOL::RequestSelection().

◆ begin() [2/2]

CITER COLLECTOR::begin ( ) const
inline

Definition at line 93 of file collector.h.

93 { return m_List.cbegin(); }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References m_List.

◆ CountType()

int COLLECTOR::CountType ( KICAD_T  aType)
inline

Function CountType counts the number of items matching aType.

Parameters
aTypetype we are interested in
Returns
number of occurences

Definition at line 264 of file collector.h.

265  {
266  int cnt = 0;
267  for( size_t i = 0; i < m_List.size(); i++ )
268  {
269  if( m_List[i]->Type() == aType )
270  cnt++;
271  }
272  return cnt;
273  }
size_t i
Definition: json11.cpp:597
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References i, and m_List.

Referenced by SELECTION_TOOL::guessSelectionCandidates(), and ROUTER_TOOL::NeighboringSegmentFilter().

◆ Empty()

◆ end() [1/2]

ITER COLLECTOR::end ( )
inline

Definition at line 92 of file collector.h.

92 { return m_List.end(); }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References m_List.

Referenced by SELECTION_TOOL::RequestSelection().

◆ end() [2/2]

CITER COLLECTOR::end ( ) const
inline

Definition at line 94 of file collector.h.

94 { return m_List.cend(); }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References m_List.

◆ GetBoundingBox()

const EDA_RECT& COLLECTOR::GetBoundingBox ( ) const
inline

Definition at line 233 of file collector.h.

233 { return m_RefBox; }
EDA_RECT m_RefBox
Definition: collector.h:63

References m_RefBox.

◆ GetCount()

int COLLECTOR::GetCount ( ) const
inline

Function GetCount returns the number of objects in the list.

Definition at line 113 of file collector.h.

114  {
115  return (int) m_List.size();
116  }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References m_List.

Referenced by SCH_EDIT_FRAME::AppendSchematic(), BuildBoardPolygonOutlines(), calcMaxArea(), connectedItemFilter(), connectedTrackFilter(), MODULE::CoverageRatio(), LIB_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCBNEW_CONTROL::DeleteItemCursor(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PL_SELECTION_TOOL::doSelectionMenu(), DIALOG_DRC_CONTROL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), SELECTION_TOOL::doSelectionMenu(), EditToolSelectionFilter(), PAD_TOOL::EnumeratePads(), EDIT_TOOL::FootprintFilter(), DSN::SPECCTRA_DB::FromBOARD(), EE_SELECTION_TOOL::GetNode(), PANEL_SETUP_LAYERS::getNonRemovableLayers(), PANEL_SETUP_LAYERS::getRemovedLayersWithItems(), GENDRILL_WRITER_BASE::getUniqueLayerPairs(), EE_SELECTION_TOOL::GuessSelectionCandidates(), PL_SELECTION_TOOL::guessSelectionCandidates(), SELECTION_TOOL::guessSelectionCandidates(), PCB_EDITOR_CONTROL::highlightNet(), SCH_EDIT_FRAME::importFile(), PCB_EDIT_FRAME::inferLegacyEdgeClearance(), EE_COLLECTOR::IsCorner(), DSN::SPECCTRA_DB::makeIMAGE(), ROUTER_TOOL::NeighboringSegmentFilter(), EE_COLLECTOR::operator[](), GERBER_COLLECTOR::operator[](), operator[](), PCB_COLLECTOR::operator[](), EDIT_TOOL::PadFilter(), SELECTION_TOOL::pickSmallestComponent(), SCH_COMPONENT::ResolveAll(), PL_SELECTION_TOOL::SelectPoint(), GERBVIEW_SELECTION_TOOL::selectPoint(), EE_SELECTION_TOOL::SelectPoint(), SELECTION_TOOL::selectPoint(), PANEL_SETUP_LAYERS::TransferDataFromWindow(), and SCH_COMPONENT::UpdatePins().

◆ GetRefPos()

const wxPoint& COLLECTOR::GetRefPos ( ) const
inline

Definition at line 230 of file collector.h.

230 { return m_RefPos; }
wxPoint m_RefPos
Definition: collector.h:62

References m_RefPos.

◆ GetTime()

timestamp_t COLLECTOR::GetTime ( )
inline

Definition at line 224 of file collector.h.

225  {
226  return m_TimeAtCollection;
227  }
timestamp_t m_TimeAtCollection
Definition: collector.h:65

References m_TimeAtCollection.

◆ HasItem()

bool COLLECTOR::HasItem ( const EDA_ITEM aItem) const
inline

Function HasItem tests if aItem has already been collected.

Parameters
aItemThe EDA_ITEM* to be tested.
Returns
True if aItem is already collected.

Definition at line 196 of file collector.h.

197  {
198  for( size_t i = 0; i < m_List.size(); i++ )
199  {
200  if( m_List[i] == aItem )
201  return true;
202  }
203 
204  return false;
205  }
size_t i
Definition: json11.cpp:597
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References i, and m_List.

Referenced by EditToolSelectionFilter().

◆ Inspect()

virtual SEARCH_RESULT COLLECTOR::Inspect ( EDA_ITEM aItem,
void *  aTestData 
)
inlinevirtual

Reimplemented in PCB_LAYER_COLLECTOR, PCB_TYPE_COLLECTOR, GENERAL_COLLECTOR, EE_TYPE_COLLECTOR, GERBER_COLLECTOR, and EE_COLLECTOR.

Definition at line 86 of file collector.h.

86 { return SEARCH_QUIT; };

References SEARCH_QUIT.

Referenced by COLLECTOR().

◆ IsSimilarPointAndTime()

bool COLLECTOR::IsSimilarPointAndTime ( const wxPoint &  aRefPos)
inline

Function IsSimilarPointAndTime returns true if the given reference point is "similar" (defined here) to the internal reference point and the current time is within a few seconds of the internal m_TimeAtCollection.

Parameters
aRefPosA wxPoint to compare to.
Returns
bool - true if the point and time are similar, else false.

Definition at line 244 of file collector.h.

245  {
246  const int distMax = 2; // adjust these here
247  const timestamp_t timeMax = 3; // seconds
248 
249  int dx = abs( aRefPos.x - m_RefPos.x );
250  int dy = abs( aRefPos.y - m_RefPos.y );
251 
252  if( dx <= distMax && dy <= distMax &&
253  GetNewTimeStamp() - m_TimeAtCollection <= timeMax )
254  return true;
255  else
256  return false;
257  }
#define abs(a)
Definition: auxiliary.h:84
timestamp_t GetNewTimeStamp()
Definition: common.cpp:217
wxPoint m_RefPos
Definition: collector.h:62
uint32_t timestamp_t
timestamp_t is our type to represent unique IDs for all kinds of elements; historically simply the ti...
Definition: common.h:53
timestamp_t m_TimeAtCollection
Definition: collector.h:65

References abs, GetNewTimeStamp(), m_RefPos, and m_TimeAtCollection.

◆ IsValidIndex()

bool COLLECTOR::IsValidIndex ( int  aIndex)
inline

Function IsValidIndex tests if aIndex is with the limits of the list of collected items.

Parameters
aIndexThe index to test.
Returns
True if aIndex is with the limits of the list of collected items, otherwise false.

Definition at line 104 of file collector.h.

105  {
106  return ( (unsigned) aIndex < m_List.size() );
107  }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References m_List.

◆ operator[]()

virtual EDA_ITEM* COLLECTOR::operator[] ( int  aIndex) const
inlinevirtual

Function operator[int] is used for read only access and returns the object at aIndex.

Parameters
aIndexThe index into the list.
Returns
EDA_ITEM* - or something derived from it, or NULL.

Reimplemented in PCB_COLLECTOR, GERBER_COLLECTOR, and EE_COLLECTOR.

Definition at line 170 of file collector.h.

171  {
172  if( (unsigned)aIndex < (unsigned)GetCount() ) // (unsigned) excludes aIndex<0 also
173  return m_List[ aIndex ];
174 
175  return NULL;
176  }
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:113
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References GetCount(), and m_List.

◆ Remove() [1/2]

void COLLECTOR::Remove ( int  aIndex)
inline

◆ Remove() [2/2]

void COLLECTOR::Remove ( const EDA_ITEM aItem)
inline

Function Remove removes the item aItem (if exists in the collector).

Parameters
aItemthe item to be removed.

Definition at line 152 of file collector.h.

153  {
154  for( size_t i = 0; i < m_List.size(); i++ )
155  {
156  if( m_List[i] == aItem )
157  {
158  m_List.erase( m_List.begin() + i);
159  return;
160  }
161  }
162  }
size_t i
Definition: json11.cpp:597
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References i, and m_List.

◆ SetBoundingBox()

void COLLECTOR::SetBoundingBox ( const EDA_RECT aRefBox)
inline

Definition at line 232 of file collector.h.

232 { m_RefBox = aRefBox; }
EDA_RECT m_RefBox
Definition: collector.h:63

References m_RefBox.

◆ SetRefPos()

void COLLECTOR::SetRefPos ( const wxPoint &  aRefPos)
inline

Definition at line 229 of file collector.h.

229 { m_RefPos = aRefPos; }
wxPoint m_RefPos
Definition: collector.h:62

References m_RefPos.

Referenced by EE_COLLECTOR::Collect(), GERBER_COLLECTOR::Collect(), and GENERAL_COLLECTOR::Collect().

◆ SetScanTypes()

void COLLECTOR::SetScanTypes ( const KICAD_T scanTypes)
inline

Function SetScanTypes records the list of KICAD_T types to consider for collection by the Inspect() function.

Parameters
scanTypesAn array of KICAD_T, terminated by EOT. No copy is is made of this array (so cannot come from caller's stack).

Definition at line 214 of file collector.h.

215  {
216  m_ScanTypes = scanTypes;
217  }
const KICAD_T * m_ScanTypes
Definition: collector.h:60

References m_ScanTypes.

Referenced by EE_COLLECTOR::Collect(), GERBER_COLLECTOR::Collect(), EE_TYPE_COLLECTOR::Collect(), GENERAL_COLLECTOR::Collect(), EE_COLLECTOR::EE_COLLECTOR(), GENERAL_COLLECTOR::GENERAL_COLLECTOR(), and GERBER_COLLECTOR::GERBER_COLLECTOR().

◆ SetTimeNow()

void COLLECTOR::SetTimeNow ( )
inline

Definition at line 219 of file collector.h.

220  {
222  }
timestamp_t GetNewTimeStamp()
Definition: common.cpp:217
timestamp_t m_TimeAtCollection
Definition: collector.h:65

References GetNewTimeStamp(), and m_TimeAtCollection.

Referenced by GERBER_COLLECTOR::Collect(), and GENERAL_COLLECTOR::Collect().

Member Data Documentation

◆ m_inspector

◆ m_List

◆ m_MenuCancelled

◆ m_MenuTitle

◆ m_RefBox

EDA_RECT COLLECTOR::m_RefBox
protected

Definition at line 63 of file collector.h.

Referenced by GetBoundingBox(), and SetBoundingBox().

◆ m_RefPos

wxPoint COLLECTOR::m_RefPos
protected

◆ m_ScanTypes

const KICAD_T* COLLECTOR::m_ScanTypes
protected

◆ m_Threshold

◆ m_TimeAtCollection

timestamp_t COLLECTOR::m_TimeAtCollection
protected

Definition at line 65 of file collector.h.

Referenced by GetTime(), IsSimilarPointAndTime(), and SetTimeNow().


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