KiCad PCB EDA Suite
EE_COLLECTOR Class Reference

EE_COLLECTOR. More...

#include <ee_collectors.h>

Inheritance diagram for EE_COLLECTOR:
COLLECTOR

Public Types

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

Public Member Functions

 EE_COLLECTOR (const KICAD_T *aScanTypes=EE_COLLECTOR::AllItems)
 
SCH_ITEMoperator[] (int aIndex) const override
 Overload COLLECTOR::operator[](int) to return a SCH_ITEM instead of an EDA_ITEM. More...
 
SEARCH_RESULT Inspect (EDA_ITEM *aItem, void *aTestData) override
 
void Collect (SCH_SCREEN *aScreen, const KICAD_T aFilterList[], const wxPoint &aPos, int aUnit=0, int aConvert=0)
 Function Collect scans a EDA_ITEM using this class's Inspector method, which does the collection. More...
 
void Collect (LIB_ITEMS_CONTAINER &aItems, const KICAD_T aFilterList[], const wxPoint &aPos, int aUnit=0, int aConvert=0)
 Function Collect scans a EDA_ITEM using this class's Inspector method, which does the collection. More...
 
bool IsCorner () const
 Function IsCorner tests if the collected items forms as corner of two line segments. More...
 
ITER begin ()
 
CITER begin () const
 
ITER end ()
 
CITER end () const
 
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...
 
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 SetRefPos (const wxPoint &aRefPos)
 
const EDA_RECTGetBoundingBox () const
 
int CountType (KICAD_T aType)
 Function CountType counts the number of items matching aType. More...
 

Public Attributes

int m_Unit
 
int m_Convert
 
int m_Threshold
 
wxString m_MenuTitle
 
bool m_MenuCancelled
 

Static Public Attributes

static const KICAD_T AllItems []
 
static const KICAD_T EditableItems []
 
static const KICAD_T ComponentsOnly []
 
static const KICAD_T SheetsOnly []
 

Protected Attributes

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

Detailed Description

EE_COLLECTOR.

Definition at line 42 of file ee_collectors.h.

Member Typedef Documentation

◆ CITER

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

Definition at line 89 of file collector.h.

◆ ITER

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

Definition at line 88 of file collector.h.

Constructor & Destructor Documentation

◆ EE_COLLECTOR()

EE_COLLECTOR::EE_COLLECTOR ( const KICAD_T aScanTypes = EE_COLLECTOR::AllItems)
inline

Definition at line 50 of file ee_collectors.h.

50  :
51  m_Unit( 0 ),
52  m_Convert( 0 )
53  {
54  SetScanTypes( aScanTypes );
55  }
void SetScanTypes(const KICAD_T *scanTypes)
Function SetScanTypes records the list of KICAD_T types to consider for collection by the Inspect() f...
Definition: collector.h:201

References COLLECTOR::SetScanTypes().

Member Function Documentation

◆ Append()

◆ BasePtr()

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

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

172  {
173  return &m_List[0];
174  }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References COLLECTOR::m_List.

◆ begin() [1/2]

ITER COLLECTOR::begin ( )
inlineinherited

Definition at line 91 of file collector.h.

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

References COLLECTOR::m_List.

Referenced by SELECTION_TOOL::RequestSelection().

◆ begin() [2/2]

CITER COLLECTOR::begin ( ) const
inlineinherited

Definition at line 93 of file collector.h.

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

References COLLECTOR::m_List.

◆ Collect() [1/2]

void EE_COLLECTOR::Collect ( SCH_SCREEN aScreen,
const KICAD_T  aFilterList[],
const wxPoint aPos,
int  aUnit = 0,
int  aConvert = 0 
)

Function Collect scans a EDA_ITEM using this class's Inspector method, which does the collection.

Parameters
aScreenThe eeschema screen to use for scanning
aFilterListA list of KICAD_T types with a terminating EOT, that determines what is to be collected and the priority order of the resulting collection.
aPosA wxPoint to use in hit-testing.
aUnitA symbol unit filter (for symbol editor)
aConvertA DeMorgan filter (for symbol editor)

Definition at line 100 of file ee_collectors.cpp.

102 {
103  Empty(); // empty the collection just in case
104 
105  SetScanTypes( aFilterList );
106  m_Unit = aUnit;
107  m_Convert = aConvert;
108 
109  // remember where the snapshot was taken from and pass refPos to the Inspect() function.
110  SetRefPos( aPos );
111 
112  if( aScreen )
113  {
114  // Components and sheets own their own children so have to be visited even if
115  // they're not in the filter list
116  bool componentsVisited = false;
117  bool sheetsVisited = false;
118 
119  for( const KICAD_T* filter = aFilterList; *filter != EOT; ++filter )
120  {
121  for( SCH_ITEM* item : aScreen->Items().OfType( *filter ) )
122  {
123  if( *filter == SCH_COMPONENT_T || *filter == SCH_LOCATE_ANY_T )
124  componentsVisited = true;
125 
126  if( *filter == SCH_SHEET_T || *filter == SCH_LOCATE_ANY_T )
127  sheetsVisited = true;
128 
129  item->Visit( m_inspector, nullptr, m_ScanTypes );
130  }
131  }
132 
133  if( !componentsVisited )
134  {
135  for( SCH_ITEM* item : aScreen->Items().OfType( SCH_COMPONENT_T ) )
136  item->Visit( m_inspector, nullptr, m_ScanTypes );
137  }
138 
139  if( !sheetsVisited )
140  {
141  for( SCH_ITEM* item : aScreen->Items().OfType( SCH_SHEET_T ) )
142  item->Visit( m_inspector, nullptr, m_ScanTypes );
143  }
144  }
145 }
void Empty()
Function Empty sets the list to empty.
Definition: collector.h:109
void SetScanTypes(const KICAD_T *scanTypes)
Function SetScanTypes records the list of KICAD_T types to consider for collection by the Inspect() f...
Definition: collector.h:201
EE_TYPE OfType(KICAD_T aType)
Definition: sch_rtree.h:219
search types array terminator (End Of Types)
Definition: typeinfo.h:82
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
INSPECTOR_FUNC m_inspector
Definition: collector.h:61
void SetRefPos(const wxPoint &aRefPos)
Definition: collector.h:206
EE_RTREE & Items()
Definition: sch_screen.h:162
const KICAD_T * m_ScanTypes
Definition: collector.h:60
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:186

References COLLECTOR::Empty(), EOT, SCH_SCREEN::Items(), m_Convert, COLLECTOR::m_inspector, COLLECTOR::m_ScanTypes, m_Unit, EE_RTREE::OfType(), SCH_COMPONENT_T, SCH_LOCATE_ANY_T, SCH_SHEET_T, COLLECTOR::SetRefPos(), and COLLECTOR::SetScanTypes().

Referenced by SCH_EDIT_TOOL::DeleteItemCursor(), EE_SELECTION_TOOL::GetNode(), and EE_SELECTION_TOOL::SelectPoint().

◆ Collect() [2/2]

void EE_COLLECTOR::Collect ( LIB_ITEMS_CONTAINER aItems,
const KICAD_T  aFilterList[],
const wxPoint aPos,
int  aUnit = 0,
int  aConvert = 0 
)

Function Collect scans a EDA_ITEM using this class's Inspector method, which does the collection.

Parameters
aItemsThe LIB_PART multivector holding the part components
aFilterListA list of KICAD_T types with a terminating EOT, that determines what is to be collected and the priority order of the resulting collection.
aPosA wxPoint to use in hit-testing.
aUnitA symbol unit filter (for symbol editor)
aConvertA DeMorgan filter (for symbol editor)

Definition at line 148 of file ee_collectors.cpp.

150 {
151  Empty(); // empty the collection just in case
152 
153  SetScanTypes( aFilterList );
154  m_Unit = aUnit;
155  m_Convert = aConvert;
156 
157  // remember where the snapshot was taken from and pass refPos to the Inspect() function.
158  SetRefPos( aPos );
159 
160  for( auto& item : aItems )
161  {
162  if( item.Visit( m_inspector, nullptr, m_ScanTypes ) == SEARCH_RESULT::QUIT )
163  break;
164  }
165 }
void Empty()
Function Empty sets the list to empty.
Definition: collector.h:109
void SetScanTypes(const KICAD_T *scanTypes)
Function SetScanTypes records the list of KICAD_T types to consider for collection by the Inspect() f...
Definition: collector.h:201
INSPECTOR_FUNC m_inspector
Definition: collector.h:61
void SetRefPos(const wxPoint &aRefPos)
Definition: collector.h:206
const KICAD_T * m_ScanTypes
Definition: collector.h:60

References COLLECTOR::Empty(), m_Convert, COLLECTOR::m_inspector, COLLECTOR::m_ScanTypes, m_Unit, QUIT, COLLECTOR::SetRefPos(), and COLLECTOR::SetScanTypes().

◆ CountType()

int COLLECTOR::CountType ( KICAD_T  aType)
inlineinherited

Function CountType counts the number of items matching aType.

Parameters
aTypetype we are interested in
Returns
number of occurences

Definition at line 216 of file collector.h.

217  {
218  int cnt = 0;
219  for( size_t i = 0; i < m_List.size(); i++ )
220  {
221  if( m_List[i]->Type() == aType )
222  cnt++;
223  }
224  return cnt;
225  }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References COLLECTOR::m_List.

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

◆ Empty()

◆ end() [1/2]

ITER COLLECTOR::end ( )
inlineinherited

Definition at line 92 of file collector.h.

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

References COLLECTOR::m_List.

Referenced by SELECTION_TOOL::RequestSelection().

◆ end() [2/2]

CITER COLLECTOR::end ( ) const
inlineinherited

Definition at line 94 of file collector.h.

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

References COLLECTOR::m_List.

◆ GetBoundingBox()

const EDA_RECT& COLLECTOR::GetBoundingBox ( ) const
inlineinherited

Definition at line 208 of file collector.h.

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

References COLLECTOR::m_RefBox.

◆ GetCount()

int COLLECTOR::GetCount ( ) const
inlineinherited

Function GetCount returns the number of objects in the list.

Definition at line 100 of file collector.h.

101  {
102  return (int) m_List.size();
103  }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References COLLECTOR::m_List.

Referenced by BuildBoardPolygonOutlines(), calcMaxArea(), connectedItemFilter(), MODULE::CoverageRatio(), SCH_EDIT_TOOL::DeleteItemCursor(), PCBNEW_CONTROL::DeleteItemCursor(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PL_SELECTION_TOOL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), SELECTION_TOOL::doSelectionMenu(), EditToolSelectionFilter(), PAD_TOOL::EnumeratePads(), SELECTION_TOOL::filterCollectedItems(), EDIT_TOOL::FootprintFilter(), DSN::SPECCTRA_DB::FromBOARD(), EE_SELECTION_TOOL::GetNode(), PANEL_SETUP_LAYERS::getNonRemovableLayers(), PANEL_SETUP_LAYERS::getRemovedLayersWithItems(), GENDRILL_WRITER_BASE::getUniqueLayerPairs(), PL_SELECTION_TOOL::guessSelectionCandidates(), EE_SELECTION_TOOL::GuessSelectionCandidates(), SELECTION_TOOL::GuessSelectionCandidates(), PCB_INSPECTION_TOOL::highlightNet(), PCB_EDIT_FRAME::inferLegacyEdgeClearance(), IsCorner(), DSN::SPECCTRA_DB::makeIMAGE(), ROUTER_TOOL::NeighboringSegmentFilter(), operator[](), GERBER_COLLECTOR::operator[](), COLLECTOR::operator[](), PCB_COLLECTOR::operator[](), EDIT_TOOL::PadFilter(), SELECTION_TOOL::pickSmallestComponent(), PL_SELECTION_TOOL::SelectPoint(), GERBVIEW_SELECTION_TOOL::selectPoint(), EE_SELECTION_TOOL::SelectPoint(), SELECTION_TOOL::selectPoint(), and PANEL_SETUP_LAYERS::TransferDataFromWindow().

◆ HasItem()

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

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

184  {
185  for( size_t i = 0; i < m_List.size(); i++ )
186  {
187  if( m_List[i] == aItem )
188  return true;
189  }
190 
191  return false;
192  }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References COLLECTOR::m_List.

Referenced by EditToolSelectionFilter().

◆ Inspect()

SEARCH_RESULT EE_COLLECTOR::Inspect ( EDA_ITEM aItem,
void *  aTestData 
)
overridevirtual

Reimplemented from COLLECTOR.

Definition at line 74 of file ee_collectors.cpp.

75 {
76  if( aItem->Type() == LIB_PIN_T )
77  {
78  // Special selection rules apply to pins of different units when edited in
79  // synchronized pins mode. Leave it to EE_SELECTION_TOOL::Selectable() to
80  // decide what to do with them.
81  }
82  else if( m_Unit || m_Convert )
83  {
84  LIB_ITEM* lib_item = dynamic_cast<LIB_ITEM*>( aItem );
85 
86  if( m_Unit && lib_item && lib_item->GetUnit() && lib_item->GetUnit() != m_Unit )
88 
89  if( m_Convert && lib_item && lib_item->GetConvert() && lib_item->GetConvert() != m_Convert )
91  }
92 
93  if( aItem->HitTest( m_RefPos, m_Threshold ) )
94  Append( aItem );
95 
97 }
int m_Threshold
Definition: collector.h:66
The base class for drawable items used by schematic library components.
Definition: lib_item.h:61
void Append(EDA_ITEM *item)
Function Append adds an item to the end of the list.
Definition: collector.h:119
virtual bool HitTest(const wxPoint &aPosition, int aAccuracy=0) const
Function HitTest tests if aPosition is contained within or on the bounding box of an item.
Definition: base_struct.h:307
int GetUnit() const
Definition: lib_item.h:295
int GetConvert() const
Definition: lib_item.h:298
wxPoint m_RefPos
Definition: collector.h:62
KICAD_T Type() const
Function Type()
Definition: base_struct.h:193

References COLLECTOR::Append(), CONTINUE, LIB_ITEM::GetConvert(), LIB_ITEM::GetUnit(), EDA_ITEM::HitTest(), LIB_PIN_T, m_Convert, COLLECTOR::m_RefPos, COLLECTOR::m_Threshold, m_Unit, and EDA_ITEM::Type().

◆ IsCorner()

bool EE_COLLECTOR::IsCorner ( ) const

Function IsCorner tests if the collected items forms as corner of two line segments.

Returns
True if the collected items form a corner of two line segments.

Definition at line 168 of file ee_collectors.cpp.

169 {
170  if( GetCount() != 2 )
171  return false;
172 
173  bool is_busentry0 = (dynamic_cast<SCH_BUS_ENTRY_BASE*>( m_List[0] ) != NULL);
174  bool is_busentry1 = (dynamic_cast<SCH_BUS_ENTRY_BASE*>( m_List[1] ) != NULL);
175 
176  if( (m_List[0]->Type() == SCH_LINE_T) && (m_List[1]->Type() == SCH_LINE_T) )
177  return ( ( SCH_LINE* ) m_List[0])->GetLayer() == ( ( SCH_LINE* ) m_List[1])->GetLayer();
178 
179  if( (m_List[0]->Type() == SCH_LINE_T) && is_busentry1 )
180  return true;
181 
182  if( is_busentry0 && (m_List[1]->Type() == SCH_LINE_T) )
183  return true;
184 
185  return false;
186 }
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:100
#define NULL
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
static bool GetLayer(MODEL_VRML &aModel, LAYER_NUM layer, VRML_LAYER **vlayer)
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References COLLECTOR::GetCount(), GetLayer(), COLLECTOR::m_List, NULL, and SCH_LINE_T.

◆ operator[]()

SCH_ITEM* EE_COLLECTOR::operator[] ( int  aIndex) const
inlineoverridevirtual

Overload COLLECTOR::operator[](int) to return a SCH_ITEM instead of an EDA_ITEM.

Parameters
aIndexThe index into the list.
Returns
SCH_ITEM* at aIndex or NULL.

Reimplemented from COLLECTOR.

Definition at line 63 of file ee_collectors.h.

64  {
65  if( (unsigned)aIndex < (unsigned)GetCount() )
66  return (SCH_ITEM*) m_List[ aIndex ];
67 
68  return NULL;
69  }
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:100
#define NULL
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:186

References COLLECTOR::GetCount(), COLLECTOR::m_List, and NULL.

◆ Remove() [1/2]

void COLLECTOR::Remove ( int  aIndex)
inlineinherited

◆ Remove() [2/2]

void COLLECTOR::Remove ( const EDA_ITEM aItem)
inlineinherited

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

Parameters
aItemthe item to be removed.

Definition at line 139 of file collector.h.

140  {
141  for( size_t i = 0; i < m_List.size(); i++ )
142  {
143  if( m_List[i] == aItem )
144  {
145  m_List.erase( m_List.begin() + i);
146  return;
147  }
148  }
149  }
std::vector< EDA_ITEM * > m_List
Definition: collector.h:58

References COLLECTOR::m_List.

◆ SetRefPos()

void COLLECTOR::SetRefPos ( const wxPoint aRefPos)
inlineinherited

Definition at line 206 of file collector.h.

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

References COLLECTOR::m_RefPos.

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

◆ SetScanTypes()

void COLLECTOR::SetScanTypes ( const KICAD_T scanTypes)
inlineinherited

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

202  {
203  m_ScanTypes = scanTypes;
204  }
const KICAD_T * m_ScanTypes
Definition: collector.h:60

References COLLECTOR::m_ScanTypes.

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

Member Data Documentation

◆ AllItems

const KICAD_T EE_COLLECTOR::AllItems
static
Initial value:

Definition at line 45 of file ee_collectors.h.

Referenced by EE_SELECTION_TOOL::Main().

◆ ComponentsOnly

const KICAD_T EE_COLLECTOR::ComponentsOnly
static

◆ EditableItems

◆ m_Convert

int EE_COLLECTOR::m_Convert

Definition at line 110 of file ee_collectors.h.

Referenced by Collect(), and Inspect().

◆ m_inspector

INSPECTOR_FUNC COLLECTOR::m_inspector
protectedinherited

◆ m_List

◆ m_MenuCancelled

bool COLLECTOR::m_MenuCancelled
inherited

◆ m_MenuTitle

◆ m_RefBox

EDA_RECT COLLECTOR::m_RefBox
protectedinherited

Definition at line 63 of file collector.h.

Referenced by COLLECTOR::GetBoundingBox().

◆ m_RefPos

wxPoint COLLECTOR::m_RefPos
protectedinherited

◆ m_ScanTypes

const KICAD_T* COLLECTOR::m_ScanTypes
protectedinherited

◆ m_Threshold

◆ m_Unit

int EE_COLLECTOR::m_Unit

Definition at line 109 of file ee_collectors.h.

Referenced by Collect(), and Inspect().

◆ SheetsOnly

const KICAD_T EE_COLLECTOR::SheetsOnly
static

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