KiCad PCB EDA Suite
COLLECTOR Class Reference

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 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 INSPECT_RESULT Inspect (EDA_ITEM *aItem, void *aTestData)
 
ITER begin ()
 
ITER end ()
 
CITER begin () const
 
CITER end () const
 
int GetCount () const
 Return the number of objects in the list. More...
 
void Empty ()
 Clear the list. More...
 
void Append (EDA_ITEM *item)
 Add an item to the end of the list. More...
 
void Remove (int aIndex)
 Remove the item at aIndex (first position is 0). More...
 
void Remove (const EDA_ITEM *aItem)
 Remove the item aItem (if exists in the collector). More...
 
bool HasAdditionalItems ()
 Test if the collector has heuristic backup items. More...
 
void Combine ()
 Re-combine the backup list into the main list of the collector. More...
 
void Transfer (int aIndex)
 Move the item at aIndex (first position is 0) to the backup list. More...
 
void Transfer (EDA_ITEM *aItem)
 Move aItem (if exists in the collector) to the backup list. More...
 
virtual EDA_ITEMoperator[] (int aIndex) const
 Used for read only access and returns the object at aIndex. More...
 
bool HasItem (const EDA_ITEM *aItem) const
 Tests if aItem has already been collected. More...
 
void SetScanTypes (const std::vector< KICAD_T > &aTypes)
 Record the list of KICAD_T types to consider for collection by the Inspect() function. More...
 
void SetRefPos (const VECTOR2I &aRefPos)
 
int CountType (KICAD_T aType)
 Count 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
 
std::vector< EDA_ITEM * > m_backupList
 
std::vector< KICAD_Tm_scanTypes
 
INSPECTOR_FUNC m_inspector
 
VECTOR2I m_refPos
 

Detailed Description

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 47 of file collector.h.

Member Typedef Documentation

◆ CITER

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

Definition at line 71 of file collector.h.

◆ ITER

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

Definition at line 70 of file collector.h.

Constructor & Destructor Documentation

◆ COLLECTOR()

COLLECTOR::COLLECTOR ( )
inline

Definition at line 50 of file collector.h.

50 :
51 m_Threshold( 0 ),
52 m_MenuCancelled( false ),
53 m_scanTypes( {} ),
54 // Inspect() is virtual so calling it from a class common inspector preserves
55 // polymorphism.
56 m_inspector( [=]( EDA_ITEM* aItem, void* aTestData )
57 {
58 return this->Inspect( aItem, aTestData );
59 } )
60 {
61 }
virtual INSPECT_RESULT Inspect(EDA_ITEM *aItem, void *aTestData)
Definition: collector.h:65
bool m_MenuCancelled
Definition: collector.h:237
INSPECTOR_FUNC m_inspector
Definition: collector.h:244
std::vector< KICAD_T > m_scanTypes
Definition: collector.h:243
int m_Threshold
Definition: collector.h:234
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85

◆ ~COLLECTOR()

virtual COLLECTOR::~COLLECTOR ( )
inlinevirtual

Definition at line 63 of file collector.h.

63{}

Member Function Documentation

◆ Append()

◆ begin() [1/2]

ITER COLLECTOR::begin ( )
inline

Definition at line 73 of file collector.h.

73{ return m_list.begin(); }

References m_list.

◆ begin() [2/2]

CITER COLLECTOR::begin ( ) const
inline

Definition at line 75 of file collector.h.

75{ return m_list.cbegin(); }

References m_list.

◆ Combine()

void COLLECTOR::Combine ( )
inline

Re-combine the backup list into the main list of the collector.

Definition at line 140 of file collector.h.

141 {
142 std::copy( m_backupList.begin(), m_backupList.end(), std::back_inserter( m_list ) );
143 m_backupList.clear();
144 }
std::vector< EDA_ITEM * > m_backupList
Definition: collector.h:241

References m_backupList, and m_list.

Referenced by SELECTION_TOOL::doSelectionMenu().

◆ CountType()

int COLLECTOR::CountType ( KICAD_T  aType)
inline

Count the number of items matching aType.

Parameters
aTypetype we are interested in.
Returns
number of occurrences.

Definition at line 221 of file collector.h.

222 {
223 int cnt = 0;
224
225 for( size_t i = 0; i < m_list.size(); i++ )
226 {
227 if( m_list[i]->Type() == aType )
228 cnt++;
229 }
230
231 return cnt;
232 }

References m_list.

Referenced by ROUTER_TOOL::NeighboringSegmentFilter().

◆ Empty()

◆ end() [1/2]

ITER COLLECTOR::end ( )
inline

Definition at line 74 of file collector.h.

74{ return m_list.end(); }

References m_list.

◆ end() [2/2]

CITER COLLECTOR::end ( ) const
inline

Definition at line 76 of file collector.h.

76{ return m_list.cend(); }

References m_list.

◆ GetCount()

int COLLECTOR::GetCount ( ) const
inline

Return the number of objects in the list.

Definition at line 81 of file collector.h.

82 {
83 return (int) m_list.size();
84 }

References m_list.

Referenced by BOARD_EDITOR_CONTROL::AssignNetclass(), BuildBoardPolygonOutlines(), BuildFootprintPolygonOutlines(), EDIT_TOOL::ChangeTrackWidth(), EE_SELECTION_TOOL::CollectHits(), connectedItemFilter(), EDIT_TOOL::copyToClipboard(), FOOTPRINT::CoverageRatio(), CONVERT_TOOL::CreateLines(), SCH_EDIT_TOOL::DeleteItemCursor(), PCB_CONTROL::DeleteItemCursor(), ALIGN_DISTRIBUTE_TOOL::DistributeHorizontally(), ALIGN_DISTRIBUTE_TOOL::DistributeVertically(), SELECTION_TOOL::doSelectionMenu(), EDIT_TOOL::Drag(), PAD_TOOL::EnumeratePads(), EDIT_TOOL::FilletTracks(), PCB_SELECTION_TOOL::FilterCollectedItems(), PCB_SELECTION_TOOL::FilterCollectorForFreePads(), PCB_SELECTION_TOOL::FilterCollectorForHierarchy(), PCB_SELECTION_TOOL::FilterCollectorForMarkers(), EDIT_TOOL::FootprintFilter(), EE_SELECTION_TOOL::GetNode(), PANEL_SETUP_LAYERS::getNonRemovableLayers(), PANEL_SETUP_LAYERS::getRemovedLayersWithItems(), ALIGN_DISTRIBUTE_TOOL::GetSelections(), GENDRILL_WRITER_BASE::getUniqueLayerPairs(), GROUP_TOOL::Group(), PL_SELECTION_TOOL::guessSelectionCandidates(), EE_SELECTION_TOOL::GuessSelectionCandidates(), PCB_SELECTION_TOOL::GuessSelectionCandidates(), BOARD_INSPECTION_TOOL::highlightNet(), PCB_EDIT_FRAME::inferLegacyEdgeClearance(), EE_COLLECTOR::IsCorner(), EE_SELECTION_TOOL::Main(), DSN::SPECCTRA_DB::makeIMAGE(), EE_SELECTION_TOOL::narrowSelection(), ROUTER_TOOL::NeighboringSegmentFilter(), operator[](), EE_COLLECTOR::operator[](), GERBER_COLLECTOR::operator[](), PCB_COLLECTOR::operator[](), EDIT_TOOL::PackAndMoveFootprints(), EDIT_TOOL::PadFilter(), CONVERT_TOOL::SegmentToArc(), PCB_SELECTION_TOOL::selectionContains(), GERBVIEW_SELECTION_TOOL::selectPoint(), PL_SELECTION_TOOL::SelectPoint(), PCB_SELECTION_TOOL::selectPoint(), EE_SELECTION_TOOL::selectPoint(), EDIT_TOOL::Swap(), and PANEL_SETUP_LAYERS::TransferDataFromWindow().

◆ HasAdditionalItems()

bool COLLECTOR::HasAdditionalItems ( )
inline

Test if the collector has heuristic backup items.

Returns
true if Combine() can run to bring secondary items into the list.

Definition at line 132 of file collector.h.

133 {
134 return !m_backupList.empty();
135 }

References m_backupList.

Referenced by SELECTION_TOOL::doSelectionMenu().

◆ HasItem()

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

Tests if aItem has already been collected.

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

Definition at line 195 of file collector.h.

196 {
197 for( size_t i = 0; i < m_list.size(); i++ )
198 {
199 if( m_list[i] == aItem )
200 return true;
201 }
202
203 return false;
204 }

References m_list.

Referenced by EE_SELECTION_TOOL::CollectHits(), PCB_SELECTION_TOOL::FilterCollectorForFreePads(), and PCB_SELECTION_TOOL::FilterCollectorForHierarchy().

◆ Inspect()

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

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

Definition at line 65 of file collector.h.

66 {
68 };

References QUIT.

◆ operator[]()

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

Used for read only access and returns the object at aIndex.

Parameters
aIndexThe index into the list.
Returns
the object at aIndex something derived from it or NULL.

Reimplemented in EE_COLLECTOR, GERBER_COLLECTOR, and PCB_COLLECTOR.

Definition at line 181 of file collector.h.

182 {
183 if( (unsigned)aIndex < (unsigned)GetCount() ) // (unsigned) excludes aIndex<0 also
184 return m_list[ aIndex ];
185
186 return nullptr;
187 }
int GetCount() const
Return the number of objects in the list.
Definition: collector.h:81

References GetCount(), and m_list.

◆ Remove() [1/2]

void COLLECTOR::Remove ( const EDA_ITEM aItem)
inline

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

Parameters
aItemthe item to be removed.

Definition at line 119 of file collector.h.

120 {
121 alg::delete_if( m_list, [&aItem]( const EDA_ITEM* aCandidate )
122 {
123 return aCandidate == aItem;
124 } );
125 }
void delete_if(_Container &__c, _Function &&__f)
Deletes all values from __c for which __f returns true.
Definition: kicad_algo.h:173

References alg::delete_if(), and m_list.

◆ Remove() [2/2]

◆ SetRefPos()

void COLLECTOR::SetRefPos ( const VECTOR2I aRefPos)
inline

Definition at line 213 of file collector.h.

213{ m_refPos = aRefPos; }
VECTOR2I m_refPos
Definition: collector.h:246

References m_refPos.

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

◆ SetScanTypes()

void COLLECTOR::SetScanTypes ( const std::vector< KICAD_T > &  aTypes)
inline

Record the list of KICAD_T types to consider for collection by the Inspect() function.

Parameters
aScanTypesA list of KICAD_Ts.

Definition at line 211 of file collector.h.

211{ m_scanTypes = aTypes; }

References m_scanTypes.

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

◆ Transfer() [1/2]

void COLLECTOR::Transfer ( EDA_ITEM aItem)
inline

Move aItem (if exists in the collector) to the backup list.

Parameters
aItemthe item to be moved.

Definition at line 162 of file collector.h.

163 {
164 for( size_t i = 0; i < m_list.size(); i++ )
165 {
166 if( m_list[i] == aItem )
167 {
168 m_list.erase( m_list.begin() + i );
169 m_backupList.push_back( aItem );
170 return;
171 }
172 }
173 }

References m_backupList, and m_list.

◆ Transfer() [2/2]

void COLLECTOR::Transfer ( int  aIndex)
inline

Move the item at aIndex (first position is 0) to the backup list.

Parameters
aIndexThe index into the list.

Definition at line 151 of file collector.h.

152 {
153 m_backupList.push_back( m_list[aIndex] );
154 m_list.erase( m_list.begin() + aIndex );
155 }

References m_backupList, and m_list.

Referenced by PL_SELECTION_TOOL::guessSelectionCandidates(), EE_SELECTION_TOOL::GuessSelectionCandidates(), and PCB_SELECTION_TOOL::GuessSelectionCandidates().

Member Data Documentation

◆ m_backupList

std::vector<EDA_ITEM*> COLLECTOR::m_backupList
protected

Definition at line 241 of file collector.h.

Referenced by Combine(), HasAdditionalItems(), and Transfer().

◆ m_inspector

◆ m_list

◆ m_MenuCancelled

◆ m_MenuTitle

wxString COLLECTOR::m_MenuTitle

Definition at line 236 of file collector.h.

Referenced by SELECTION_TOOL::doSelectionMenu().

◆ m_refPos

VECTOR2I COLLECTOR::m_refPos
protected

◆ m_scanTypes

std::vector<KICAD_T> COLLECTOR::m_scanTypes
protected

◆ m_Threshold


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