KiCad PCB EDA Suite
GENERAL_COLLECTOR Class Reference

Used when the right click button is pressed, or when the select tool is in effect. More...

#include <collectors.h>

Inheritance diagram for GENERAL_COLLECTOR:
PCB_COLLECTOR COLLECTOR

Public Member Functions

 GENERAL_COLLECTOR ()
 Constructor GENERALCOLLECTOR. More...
 
void Empty2nd ()
 
void Append2nd (BOARD_ITEM *item)
 
void SetGuide (const COLLECTORS_GUIDE *aGuide)
 Record which COLLECTORS_GUIDE to use. More...
 
int GetPrimaryCount ()
 
SEARCH_RESULT Inspect (EDA_ITEM *testItem, void *testData) override
 The examining function within the INSPECTOR which is passed to the Iterate function. More...
 
void Collect (BOARD_ITEM *aItem, const KICAD_T aScanList[], const wxPoint &aRefPos, const COLLECTORS_GUIDE &aGuide)
 Scan a BOARD_ITEM using this class's Inspector method, which does the collection. More...
 
BOARD_ITEMoperator[] (int ndx) const
 Overload the COLLECTOR::operator[](int) to return a BOARD_ITEM instead of an EDA_ITEM. More...
 
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...
 
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 wxPointGetRefPos () 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...
 

Static Public Attributes

static const KICAD_T AllBoardItems []
 A scan list for all editable board items, like PcbGeneralLocateAndDisplay() More...
 
static const KICAD_T AllButZones []
 A scan list for all editable board items, except zones. More...
 
static const KICAD_T Zones []
 A scan list for zones outlines only. More...
 
static const KICAD_T BoardLevelItems []
 A scan list for all primary board items, omitting items which are subordinate to a MODULE, such as D_PAD and TEXTEMODULE. More...
 
static const KICAD_T Modules []
 A scan list for only MODULEs. More...
 
static const KICAD_T PadsOrModules []
 A scan list for PADs or MODULEs. More...
 
static const KICAD_T PadsTracksOrZones []
 A scan list for PADs, TRACKs, VIAs, or ZONEs. More...
 
static const KICAD_T ModulesAndTheirItems []
 A scan list for MODULEs and their items (for Modedit) More...
 
static const KICAD_T ModuleItems []
 A scan list for primary module items. More...
 
static const KICAD_T Tracks []
 A scan list for only TRACKS. More...
 

Protected Attributes

std::vector< BOARD_ITEM * > m_List2nd
 A place to hold collected objects which don't match precisely the search criteria, but would be acceptable if nothing else is found. More...
 
const COLLECTORS_GUIDEm_Guide
 Determines which items are to be collected by Inspect() More...
 
int m_PrimaryLength
 The number of items that were originally in the primary list before the m_List2nd was concatenated onto the end of it. More...
 
INSPECTOR_FUNC m_inspector
 a class common bridge into the polymorphic Inspect() More...
 
const KICAD_Tm_ScanTypes
 Which object types to scan. More...
 
std::vector< EDA_ITEM * > m_List
 A place to hold collected objects without taking ownership of their memory. More...
 
wxPoint m_RefPos
 A point to test against, and that was used to make the collection. More...
 
EDA_RECT m_RefBox
 A bounding box to test against, and that was used to make the collection. More...
 
timestamp_t m_TimeAtCollection
 The time at which the collection was made. More...
 

Detailed Description

Used when the right click button is pressed, or when the select tool is in effect.

This class can be used by window classes such as PCB_EDIT_FRAME.

Philosophy: this class knows nothing of the context in which a BOARD is used and that means it knows nothing about which layers are visible or current, but can handle those concerns by the SetPreferredLayer() function and the SetLayerSet() function.

Definition at line 232 of file collectors.h.

Constructor & Destructor Documentation

GENERAL_COLLECTOR::GENERAL_COLLECTOR ( )
inline

Constructor GENERALCOLLECTOR.

Definition at line 310 of file collectors.h.

311  {
312  m_Guide = NULL;
313  m_PrimaryLength = 0;
315  }
static const KICAD_T AllBoardItems[]
A scan list for all editable board items, like PcbGeneralLocateAndDisplay()
Definition: collectors.h:259
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:207
int m_PrimaryLength
The number of items that were originally in the primary list before the m_List2nd was concatenated on...
Definition: collectors.h:252
const COLLECTORS_GUIDE * m_Guide
Determines which items are to be collected by Inspect()
Definition: collectors.h:246

Member Function Documentation

void COLLECTOR::Append ( EDA_ITEM item)
inlineinherited

Function Append adds an item to the end of the list.

Parameters
itemAn EDA_ITEM* to add.

Definition at line 125 of file collector.h.

Referenced by Collect(), SELECTION_TOOL::guessSelectionCandidates(), GERBER_COLLECTOR::Inspect(), LIB_COLLECTOR::Inspect(), SCH_COLLECTOR::Inspect(), Inspect(), SCH_FIND_COLLECTOR::Inspect(), SCH_TYPE_COLLECTOR::Inspect(), PCB_TYPE_COLLECTOR::Inspect(), and PCB_LAYER_COLLECTOR::Inspect().

126  {
127  m_List.push_back( item );
128  }
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
void GENERAL_COLLECTOR::Append2nd ( BOARD_ITEM item)
inline

Definition at line 322 of file collectors.h.

Referenced by Inspect().

323  {
324  m_List2nd.push_back( item );
325  }
std::vector< BOARD_ITEM * > m_List2nd
A place to hold collected objects which don&#39;t match precisely the search criteria, but would be acceptable if nothing else is found.
Definition: collectors.h:241
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 177 of file collector.h.

178  {
179  return &m_List[0];
180  }
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
void GENERAL_COLLECTOR::Collect ( BOARD_ITEM aItem,
const KICAD_T  aScanList[],
const wxPoint aRefPos,
const COLLECTORS_GUIDE aGuide 
)

Scan a BOARD_ITEM using this class's Inspector method, which does the collection.

Parameters
aItemA BOARD_ITEM to scan, may be a BOARD or MODULE, or whatever.
aScanListA list of KICAD_Ts with a terminating EOT, that specs what is to be collected and the priority order of the resultant collection in "m_List".
aRefPosA wxPoint to use in hit-testing.
aGuideThe COLLECTORS_GUIDE to use in collecting items.

Definition at line 450 of file collectors.cpp.

References COLLECTOR::Append(), COLLECTOR::Empty(), Empty2nd(), i, COLLECTOR::m_inspector, COLLECTOR::m_List, m_List2nd, m_PrimaryLength, COLLECTOR::m_ScanTypes, SetGuide(), COLLECTOR::SetRefPos(), COLLECTOR::SetScanTypes(), COLLECTOR::SetTimeNow(), and EDA_ITEM::Visit().

Referenced by MODULE_EDITOR_TOOLS::EnumeratePads(), highlightNet(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), PCB_EDIT_FRAME::SelectHighLight(), and SELECTION_TOOL::selectPoint().

452 {
453  Empty(); // empty the collection, primary criteria list
454  Empty2nd(); // empty the collection, secondary criteria list
455 
456  // remember guide, pass it to Inspect()
457  SetGuide( &aGuide );
458 
459  SetScanTypes( aScanList );
460 
461  // remember where the snapshot was taken from and pass refPos to
462  // the Inspect() function.
463  SetRefPos( aRefPos );
464 
465  aItem->Visit( m_inspector, NULL, m_ScanTypes );
466 
467  SetTimeNow(); // when snapshot was taken
468 
469  // record the length of the primary list before concatenating on to it.
470  m_PrimaryLength = m_List.size();
471 
472  // append 2nd list onto end of the first list
473  for( unsigned i = 0; i<m_List2nd.size(); ++i )
474  Append( m_List2nd[i] );
475 
476  Empty2nd();
477 }
void Empty()
Function Empty sets the list to empty.
Definition: collector.h:115
virtual SEARCH_RESULT Visit(INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
Function Visit may be re-implemented for each derived class in order to handle all the types given by...
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:207
std::vector< BOARD_ITEM * > m_List2nd
A place to hold collected objects which don&#39;t match precisely the search criteria, but would be acceptable if nothing else is found.
Definition: collectors.h:241
int m_PrimaryLength
The number of items that were originally in the primary list before the m_List2nd was concatenated on...
Definition: collectors.h:252
void Append(EDA_ITEM *item)
Function Append adds an item to the end of the list.
Definition: collector.h:125
void SetGuide(const COLLECTORS_GUIDE *aGuide)
Record which COLLECTORS_GUIDE to use.
Definition: collectors.h:332
INSPECTOR_FUNC m_inspector
a class common bridge into the polymorphic Inspect()
Definition: collector.h:59
void SetRefPos(const wxPoint &aRefPos)
Definition: collector.h:222
void SetTimeNow()
Definition: collector.h:212
size_t i
Definition: json11.cpp:597
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
const KICAD_T * m_ScanTypes
Which object types to scan.
Definition: collector.h:62
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 257 of file collector.h.

References i.

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

258  {
259  int cnt = 0;
260  for( size_t i = 0; i < m_List.size(); i++ )
261  {
262  if( m_List[i]->Type() == aType )
263  cnt++;
264  }
265  return cnt;
266  }
size_t i
Definition: json11.cpp:597
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
void COLLECTOR::Empty ( )
inlineinherited

Function Empty sets the list to empty.

Definition at line 115 of file collector.h.

Referenced by GERBER_COLLECTOR::Collect(), LIB_COLLECTOR::Collect(), SCH_COLLECTOR::Collect(), Collect(), SCH_FIND_COLLECTOR::Collect(), SCH_TYPE_COLLECTOR::Collect(), PCB_TYPE_COLLECTOR::Collect(), PCB_LAYER_COLLECTOR::Collect(), SCH_FIND_COLLECTOR::Empty(), MODULE_EDITOR_TOOLS::EnumeratePads(), and SELECTION_TOOL::guessSelectionCandidates().

116  {
117  m_List.clear();
118  }
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
void GENERAL_COLLECTOR::Empty2nd ( )
inline

Definition at line 317 of file collectors.h.

Referenced by Collect().

318  {
319  m_List2nd.clear();
320  }
std::vector< BOARD_ITEM * > m_List2nd
A place to hold collected objects which don&#39;t match precisely the search criteria, but would be acceptable if nothing else is found.
Definition: collectors.h:241
const EDA_RECT& COLLECTOR::GetBoundingBox ( ) const
inlineinherited

Definition at line 226 of file collector.h.

References COLLECTOR::m_RefBox.

226 { return m_RefBox; }
EDA_RECT m_RefBox
A bounding box to test against, and that was used to make the collection.
Definition: collector.h:71
int COLLECTOR::GetCount ( ) const
inlineinherited

Function GetCount returns the number of objects in the list.

Definition at line 106 of file collector.h.

Referenced by AllAreModulesAndReturnSmallestIfSo(), SCH_EDIT_FRAME::AppendSchematic(), BuildBoardPolygonOutlines(), calcMaxArea(), connectedItemFilter(), connectedTrackFilter(), MODULE::CoverageRatio(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SELECTION_TOOL::disambiguationMenu(), MODULE_EDITOR_TOOLS::EnumeratePads(), EDIT_TOOL::FootprintFilter(), DSN::SPECCTRA_DB::FromBOARD(), SCH_FIND_COLLECTOR::GetItem(), DIALOG_LAYERS_SETUP::getNonRemovableLayers(), DIALOG_LAYERS_SETUP::getRemovedLayersWithItems(), SCH_FIND_COLLECTOR::GetText(), GENDRILL_WRITER_BASE::getUniqueLayerPairs(), SELECTION_TOOL::guessSelectionCandidates(), highlightNet(), SCH_EDIT_FRAME::importFile(), SCH_COLLECTOR::IsCorner(), LIB_EDIT_FRAME::locateItem(), SCH_EDIT_FRAME::LocateItem(), DSN::SPECCTRA_DB::makeIMAGE(), ROUTER_TOOL::NeighboringSegmentFilter(), SCH_EDIT_FRAME::OnFindSchematicItem(), LIB_EDIT_FRAME::OnSelectItem(), GERBER_COLLECTOR::operator[](), SCH_COLLECTOR::operator[](), COLLECTOR::operator[](), SCH_FIND_COLLECTOR::PassedEnd(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), SELECTION_TOOL::pickSmallestComponent(), SCH_COMPONENT::ResolveAll(), GERBVIEW_SELECTION_TOOL::selectPoint(), SELECTION_TOOL::selectPoint(), DIALOG_LAYERS_SETUP::TransferDataFromWindow(), SCH_COMPONENT::UpdateAllPinCaches(), and SCH_FIND_COLLECTOR::UpdateIndex().

107  {
108  return (int) m_List.size();
109  }
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
int GENERAL_COLLECTOR::GetPrimaryCount ( )
inline
Returns
int - The number if items which met the primary search criteria

Definition at line 337 of file collectors.h.

Referenced by AllAreModulesAndReturnSmallestIfSo(), and SELECTION_TOOL::pickSmallestComponent().

337 { return m_PrimaryLength; }
int m_PrimaryLength
The number of items that were originally in the primary list before the m_List2nd was concatenated on...
Definition: collectors.h:252
const wxPoint& COLLECTOR::GetRefPos ( ) const
inlineinherited

Definition at line 223 of file collector.h.

References COLLECTOR::m_RefPos.

Referenced by PCB_EDIT_FRAME::OnRightClick().

223 { return m_RefPos; }
wxPoint m_RefPos
A point to test against, and that was used to make the collection.
Definition: collector.h:68
timestamp_t COLLECTOR::GetTime ( )
inlineinherited

Definition at line 217 of file collector.h.

References COLLECTOR::m_TimeAtCollection.

218  {
219  return m_TimeAtCollection;
220  }
timestamp_t m_TimeAtCollection
The time at which the collection was made.
Definition: collector.h:74
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 189 of file collector.h.

References i.

190  {
191  for( size_t i = 0; i < m_List.size(); i++ )
192  {
193  if( m_List[i] == aItem )
194  return true;
195  }
196 
197  return false;
198  }
size_t i
Definition: json11.cpp:597
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
SEARCH_RESULT GENERAL_COLLECTOR::Inspect ( EDA_ITEM testItem,
void *  testData 
)
overridevirtual

The examining function within the INSPECTOR which is passed to the Iterate function.

Searches and collects all the objects that the old function PcbGeneralLocateAndDisplay() would find, except that it keeps all that it finds and does not do any displaying.

Parameters
testItemAn EDA_ITEM to examine.
testDatais not used in this class.
Returns
SEARCH_RESULT - SEARCH_QUIT if the Iterator is to stop the scan, else SCAN_CONTINUE;

Implements COLLECTOR.

Definition at line 144 of file collectors.cpp.

References COLLECTOR::Append(), Append2nd(), B_Cu, F_Cu, D_PAD::GetAttribute(), BOARD_ITEM::GetLayer(), BOARD_ITEM::GetParent(), COLLECTORS_GUIDE::GetPreferredLayer(), MODULE::GetReference(), EDA_TEXT::GetText(), TEXTE_MODULE::GetType(), VIA::GetViaType(), MARKER_PCB::HitTest(), BOARD_ITEM::HitTest(), MODULE::HitTestAccurate(), COLLECTORS_GUIDE::IgnoreBlindBuriedVias(), COLLECTORS_GUIDE::IgnoreLockedItems(), COLLECTORS_GUIDE::IgnoreLockedLayers(), COLLECTORS_GUIDE::IgnoreMicroVias(), COLLECTORS_GUIDE::IgnoreModulesOnBack(), COLLECTORS_GUIDE::IgnoreModulesOnFront(), COLLECTORS_GUIDE::IgnoreModulesRefs(), COLLECTORS_GUIDE::IgnoreModulesVals(), COLLECTORS_GUIDE::IgnoreMTextsMarkedNoShow(), COLLECTORS_GUIDE::IgnoreMTextsOnBack(), COLLECTORS_GUIDE::IgnoreMTextsOnFront(), COLLECTORS_GUIDE::IgnoreNonVisibleLayers(), COLLECTORS_GUIDE::IgnorePads(), COLLECTORS_GUIDE::IgnorePadsOnBack(), COLLECTORS_GUIDE::IgnorePadsOnFront(), COLLECTORS_GUIDE::IgnorePreferredLayer(), COLLECTORS_GUIDE::IgnoreThroughVias(), COLLECTORS_GUIDE::IgnoreTracks(), COLLECTORS_GUIDE::IncludeSecondary(), IsBackLayer(), IsFrontLayer(), COLLECTORS_GUIDE::IsLayerLocked(), COLLECTORS_GUIDE::IsLayerVisible(), BOARD_ITEM::IsLocked(), BOARD_ITEM::IsOnLayer(), D_PAD::IsOnLayer(), EDA_TEXT::IsVisible(), m_Guide, COLLECTOR::m_RefPos, PAD_ATTRIB_CONN, PAD_ATTRIB_SMD, PCB_DIMENSION_T, PCB_LINE_T, PCB_MARKER_T, PCB_MODULE_T, PCB_MODULE_TEXT_T, PCB_PAD_T, PCB_TARGET_T, PCB_TEXT_T, PCB_TRACE_T, PCB_VIA_T, PCB_ZONE_AREA_T, PCB_ZONE_T, SEARCH_CONTINUE, TEXTE_MODULE::TEXT_is_DIVERS, TEXTE_MODULE::TEXT_is_REFERENCE, TEXTE_MODULE::TEXT_is_VALUE, EDA_ITEM::Type(), VIA_BLIND_BURIED, VIA_MICROVIA, and VIA_THROUGH.

145 {
146  BOARD_ITEM* item = (BOARD_ITEM*) testItem;
147  MODULE* module = NULL;
148  D_PAD* pad = NULL;
149  bool pad_through = false;
150  VIA* via = NULL;
151  MARKER_PCB* marker = NULL;
152 
153 #if 0 // debugging
154  static int breakhere = 0;
155 
156  switch( item->Type() )
157  {
158  case PCB_PAD_T:
159  {
160  MODULE* m = (MODULE*) item->GetParent();
161 
162  if( m->GetReference() == wxT( "Y2" ) )
163  {
164  breakhere++;
165  }
166  }
167  break;
168 
169  case PCB_VIA_T:
170  breakhere++;
171  break;
172 
173  case PCB_TRACE_T:
174  breakhere++;
175  break;
176 
177  case PCB_ZONE_T:
178  breakhere++;
179  break;
180 
181  case PCB_TEXT_T:
182  breakhere++;
183  break;
184 
185  case PCB_LINE_T:
186  breakhere++;
187  break;
188 
189  case PCB_DIMENSION_T:
190  breakhere++;
191  break;
192 
193  case PCB_MODULE_TEXT_T:
194  {
195  TEXTE_MODULE* tm = (TEXTE_MODULE*) item;
196 
197  if( tm->GetText() == wxT( "10uH" ) )
198  {
199  breakhere++;
200  }
201  }
202  break;
203 
204  case PCB_MODULE_T:
205  {
206  MODULE* m = (MODULE*) item;
207 
208  if( m->GetReference() == wxT( "C98" ) )
209  {
210  breakhere++;
211  }
212  }
213  break;
214 
215  case PCB_MARKER_T:
216  breakhere++;
217  break;
218 
219  default:
220  breakhere++;
221  break;
222  }
223 
224 #endif
225 
226 
227  switch( item->Type() )
228  {
229  case PCB_PAD_T:
230  // there are pad specific visibility controls.
231  // Criterias to select a pad is:
232  // for smd pads: the module parent must be seen, and pads on the corresponding
233  // board side must be seen
234  // if pad is a thru hole, then it can be visible when its parent module is not.
235  // for through pads: pads on Front or Back board sides must be seen
236  pad = (D_PAD*) item;
237 
238  if( (pad->GetAttribute() != PAD_ATTRIB_SMD) &&
239  (pad->GetAttribute() != PAD_ATTRIB_CONN) ) // a hole is present, so multiple layers
240  {
241  // proceed to the common tests below, but without the parent module test,
242  // by leaving module==NULL, but having pad != null
243  pad_through = true;
244  }
245  else // smd, so use pads test after module test
246  {
247  module = static_cast<MODULE*>( item->GetParent() );
248  }
249 
250  break;
251 
252  case PCB_VIA_T: // vias are on many layers, so layer test is specific
253  via = static_cast<VIA*>( item );
254  break;
255 
256  case PCB_TRACE_T:
257  if( m_Guide->IgnoreTracks() )
258  goto exit;
259  break;
260 
261  case PCB_ZONE_T:
262  break;
263 
264  case PCB_ZONE_AREA_T:
265  break;
266 
267  case PCB_TEXT_T:
268  break;
269 
270  case PCB_LINE_T:
271  break;
272 
273  case PCB_DIMENSION_T:
274  break;
275 
276  case PCB_TARGET_T:
277  break;
278 
279  case PCB_MODULE_TEXT_T:
280  {
281  TEXTE_MODULE *text = static_cast<TEXTE_MODULE*>( item );
282  if( m_Guide->IgnoreMTextsMarkedNoShow() && !text->IsVisible() )
283  goto exit;
284 
285  if( m_Guide->IgnoreMTextsOnBack() && IsBackLayer( text->GetLayer() ) )
286  goto exit;
287 
288  if( m_Guide->IgnoreMTextsOnFront() && IsFrontLayer( text->GetLayer() ) )
289  goto exit;
290 
291  /* The three text types have different criteria: reference
292  * and value have their own ignore flags; user text instead
293  * follows their layer visibility. Checking this here is
294  * simpler than later (when layer visibility is checked for
295  * other entities) */
296 
297  switch( text->GetType() )
298  {
300  if( m_Guide->IgnoreModulesRefs() )
301  goto exit;
302  break;
303 
305  if( m_Guide->IgnoreModulesVals() )
306  goto exit;
307  break;
308 
310  if( !m_Guide->IsLayerVisible( text->GetLayer() )
312  goto exit;
313  break;
314  }
315 
316  // Extract the module since it could be hidden
317  module = static_cast<MODULE*>( item->GetParent() );
318  }
319  break;
320 
321  case PCB_MODULE_T:
322  module = static_cast<MODULE*>( item );
323  break;
324 
325  case PCB_MARKER_T:
326  marker = static_cast<MARKER_PCB*>( item );
327  break;
328 
329  default:
330  break;
331  }
332 
333  // common tests:
334 
335  if( module ) // true from case PCB_PAD_T, PCB_MODULE_TEXT_T, or PCB_MODULE_T
336  {
337  if( m_Guide->IgnoreModulesOnBack() && (module->GetLayer() == B_Cu) )
338  goto exit;
339 
340  if( m_Guide->IgnoreModulesOnFront() && (module->GetLayer() == F_Cu) )
341  goto exit;
342  }
343 
344  // Pads are not sensitive to the layer visibility controls.
345  // They all have their own separate visibility controls
346  // skip them if not visible
347  if( pad )
348  {
349  if( m_Guide->IgnorePads() )
350  goto exit;
351 
352  if( ! pad_through )
353  {
354  if( m_Guide->IgnorePadsOnFront() && pad->IsOnLayer(F_Cu ) )
355  goto exit;
356 
357  if( m_Guide->IgnorePadsOnBack() && pad->IsOnLayer(B_Cu ) )
358  goto exit;
359  }
360  }
361 
362  if( marker )
363  {
364  // Markers are not sensitive to the layer
365  if( marker->HitTest( m_RefPos ) )
366  Append( item );
367 
368  goto exit;
369  }
370 
371  if( via )
372  {
373  auto type = via->GetViaType();
374 
375  if( ( m_Guide->IgnoreThroughVias() && type == VIA_THROUGH ) ||
376  ( m_Guide->IgnoreBlindBuriedVias() && type == VIA_BLIND_BURIED ) ||
377  ( m_Guide->IgnoreMicroVias() && type == VIA_MICROVIA ) )
378  {
379  goto exit;
380  }
381  }
382 
383  if( item->IsOnLayer( m_Guide->GetPreferredLayer() ) ||
385  {
386  PCB_LAYER_ID layer = item->GetLayer();
387 
388  /* Modules and their subcomponents: reference, value and pads
389  * are not sensitive to the layer visibility controls. They all
390  * have their own separate visibility controls for vias,
391  * GetLayer() has no meaning, but IsOnLayer() works fine. User
392  * text in module *is* sensitive to layer visibility but that
393  * was already handled */
394 
395  if( via || module || pad || m_Guide->IsLayerVisible( layer )
397  {
398  if( !m_Guide->IsLayerLocked( layer ) || !m_Guide->IgnoreLockedLayers() )
399  {
400  if( !item->IsLocked() || !m_Guide->IgnoreLockedItems() )
401  {
402  if( item->HitTest( m_RefPos ) )
403  {
404  if( !module || module->HitTestAccurate( m_RefPos ) )
405  Append( item );
406  goto exit;
407  }
408  }
409  }
410  }
411  }
412 
413 
414  if( m_Guide->IncludeSecondary() )
415  {
416  // for now, "secondary" means "tolerate any layer". It has
417  // no effect on other criteria, since there is a separate "ignore" control for
418  // those in the COLLECTORS_GUIDE
419 
420  PCB_LAYER_ID layer = item->GetLayer();
421 
422  /* Modules and their subcomponents: reference, value and pads
423  * are not sensitive to the layer visibility controls. They all
424  * have their own separate visibility controls. User texts
425  * follows layer visibility controls (but that was already
426  * checked) */
427 
428  if( via || module || pad || m_Guide->IsLayerVisible( layer )
430  {
431  if( !m_Guide->IsLayerLocked( layer ) || !m_Guide->IgnoreLockedLayers() )
432  {
433  if( !item->IsLocked() || !m_Guide->IgnoreLockedItems() )
434  {
435  if( item->HitTest( m_RefPos ) )
436  {
437  Append2nd( item );
438  goto exit;
439  }
440  }
441  }
442  }
443  }
444 
445 exit:
446  return SEARCH_CONTINUE; // always when collecting
447 }
virtual bool IsLayerLocked(PCB_LAYER_ID layer) const =0
KICAD_T Type() const
Function Type()
Definition: base_struct.h:209
BOARD_ITEM_CONTAINER * GetParent() const
virtual bool IgnoreBlindBuriedVias() const =0
virtual bool IgnoreModulesOnFront() const =0
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:405
virtual bool IsOnLayer(PCB_LAYER_ID aLayer) const
Function IsOnLayer tests to see if this object is on the given layer.
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
TEXT_TYPE GetType() const
virtual PCB_LAYER_ID GetLayer() const
Function GetLayer returns the primary layer this item is on.
bool IsBackLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it&#39;s a back layer.
virtual bool IgnoreNonVisibleLayers() const =0
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:61
class ZONE_CONTAINER, a zone area
Definition: typeinfo.h:102
void Append2nd(BOARD_ITEM *item)
Definition: collectors.h:322
bool HitTest(const wxPoint &aPosition) const override
Function HitTest tests if aPosition is contained within or on the bounding area of an item...
class TEXTE_PCB, text on a layer
Definition: typeinfo.h:92
virtual PCB_LAYER_ID GetPreferredLayer() const =0
virtual bool IgnoreTracks() const =0
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
virtual bool IgnoreMicroVias() const =0
virtual bool IgnoreModulesVals() const =0
virtual bool IgnorePads() const
Definition: collectors.h:151
virtual bool IgnorePreferredLayer() const =0
Provide wildcard behavior regarding the preferred layer.
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
virtual bool IgnorePadsOnFront() const =0
void Append(EDA_ITEM *item)
Function Append adds an item to the end of the list.
Definition: collector.h:125
class MODULE, a footprint
Definition: typeinfo.h:89
PCB_LAYER_ID
A quick note on layer IDs:
VIATYPE_T GetViaType() const
Definition: class_track.h:455
virtual bool IgnoreMTextsOnBack() const =0
const wxString & GetText() const
Function GetText returns the string associated with the text object.
Definition: eda_text.h:128
class SEGZONE, a segment used to fill a zone area (segment on a copper layer)
Definition: typeinfo.h:97
const COLLECTORS_GUIDE * m_Guide
Determines which items are to be collected by Inspect()
Definition: collectors.h:246
virtual bool IgnoreMTextsMarkedNoShow() const =0
Like smd, does not appear on the solder paste layer (default) note also has a special attribute in Ge...
Definition: pad_shapes.h:62
class DIMENSION, a dimension (graphic item)
Definition: typeinfo.h:100
virtual bool IgnoreThroughVias() const =0
class PCB_TARGET, a target (graphic item)
Definition: typeinfo.h:101
virtual bool IgnoreModulesRefs() const =0
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:93
bool IsFrontLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it&#39;s a front layer.
virtual bool HitTest(const wxPoint &aPosition) const override
Function HitTest tests if aPosition is contained within or on the bounding area of an item...
bool HitTestAccurate(const wxPoint &aPosition) const
Tests if a point is inside the bounding polygon of the module.
class MARKER_PCB, a marker used to show something
Definition: typeinfo.h:99
const wxString & GetReference() const
Function GetReference.
Definition: class_module.h:458
virtual bool IsLocked() const
Function IsLocked.
bool IsVisible() const
Definition: eda_text.h:174
virtual bool IsLayerVisible(PCB_LAYER_ID layer) const =0
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
virtual bool IgnorePadsOnBack() const =0
wxPoint m_RefPos
A point to test against, and that was used to make the collection.
Definition: collector.h:68
virtual bool IgnoreLockedItems() const =0
virtual bool IgnoreLockedLayers() const =0
bool IsOnLayer(PCB_LAYER_ID aLayer) const override
Function IsOnLayer tests to see if this object is on the given layer.
Definition: class_pad.h:644
virtual bool IgnoreModulesOnBack() const =0
virtual bool IgnoreMTextsOnFront() const =0
class DRAWSEGMENT, a segment not on copper layers
Definition: typeinfo.h:91
virtual bool IncludeSecondary() const =0
Determine if the secondary criteria or 2nd choice items should be included.
bool COLLECTOR::IsSimilarPointAndTime ( const wxPoint aRefPos)
inlineinherited

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

References abs, GetNewTimeStamp(), wxPoint::x, and wxPoint::y.

238  {
239  const int distMax = 2; // adjust these here
240  const timestamp_t timeMax = 3; // seconds
241 
242  int dx = abs( aRefPos.x - m_RefPos.x );
243  int dy = abs( aRefPos.y - m_RefPos.y );
244 
245  if( dx <= distMax && dy <= distMax &&
246  GetNewTimeStamp() - m_TimeAtCollection <= timeMax )
247  return true;
248  else
249  return false;
250  }
long timestamp_t
timestamp_t is our type to represent unique IDs for all kinds of elements; historically simply the ti...
Definition: base_struct.h:155
#define abs(a)
Definition: auxiliary.h:84
timestamp_t GetNewTimeStamp()
Definition: common.cpp:167
wxPoint m_RefPos
A point to test against, and that was used to make the collection.
Definition: collector.h:68
timestamp_t m_TimeAtCollection
The time at which the collection was made.
Definition: collector.h:74
bool COLLECTOR::IsValidIndex ( int  aIndex)
inlineinherited

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

Referenced by SCH_FIND_COLLECTOR::GetText(), and SCH_FIND_COLLECTOR::ReplaceItem().

98  {
99  return ( (unsigned) aIndex < m_List.size() );
100  }
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
BOARD_ITEM* PCB_COLLECTOR::operator[] ( int  ndx) const
inlineinherited

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

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

Definition at line 213 of file collectors.h.

214  {
215  if( (unsigned)ndx < (unsigned)GetCount() )
216  return (BOARD_ITEM*) m_List[ ndx ];
217 
218  return NULL;
219  }
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:106
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
void COLLECTOR::Remove ( int  aIndex)
inlineinherited

Function Remove removes the item at aIndex (first position is 0);.

Parameters
aIndexThe index into the list.

Definition at line 135 of file collector.h.

Referenced by connectedItemFilter(), connectedTrackFilter(), EDIT_TOOL::FootprintFilter(), SELECTION_TOOL::guessSelectionCandidates(), ROUTER_TOOL::NeighboringSegmentFilter(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), GERBVIEW_SELECTION_TOOL::selectPoint(), and SELECTION_TOOL::selectPoint().

136  {
137  m_List.erase( m_List.begin() + aIndex );
138  }
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
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 145 of file collector.h.

References i.

146  {
147  for( size_t i = 0; i < m_List.size(); i++ )
148  {
149  if( m_List[i] == aItem )
150  {
151  m_List.erase( m_List.begin() + i);
152  return;
153  }
154  }
155  }
size_t i
Definition: json11.cpp:597
std::vector< EDA_ITEM * > m_List
A place to hold collected objects without taking ownership of their memory.
Definition: collector.h:65
void COLLECTOR::SetBoundingBox ( const EDA_RECT aRefBox)
inlineinherited

Definition at line 225 of file collector.h.

225 { m_RefBox = aRefBox; }
EDA_RECT m_RefBox
A bounding box to test against, and that was used to make the collection.
Definition: collector.h:71
void GENERAL_COLLECTOR::SetGuide ( const COLLECTORS_GUIDE aGuide)
inline

Record which COLLECTORS_GUIDE to use.

Parameters
aGuideWhich guide to use in the collection.

Definition at line 332 of file collectors.h.

Referenced by Collect().

332 { m_Guide = aGuide; }
const COLLECTORS_GUIDE * m_Guide
Determines which items are to be collected by Inspect()
Definition: collectors.h:246
void COLLECTOR::SetRefPos ( const wxPoint aRefPos)
inlineinherited

Definition at line 222 of file collector.h.

Referenced by GERBER_COLLECTOR::Collect(), LIB_COLLECTOR::Collect(), SCH_COLLECTOR::Collect(), and Collect().

222 { m_RefPos = aRefPos; }
wxPoint m_RefPos
A point to test against, and that was used to make the collection.
Definition: collector.h:68
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 207 of file collector.h.

Referenced by GERBER_COLLECTOR::Collect(), LIB_COLLECTOR::Collect(), SCH_COLLECTOR::Collect(), Collect(), SCH_TYPE_COLLECTOR::Collect(), GERBER_COLLECTOR::GERBER_COLLECTOR(), SCH_COLLECTOR::SCH_COLLECTOR(), and SCH_FIND_COLLECTOR::SCH_FIND_COLLECTOR().

208  {
209  m_ScanTypes = scanTypes;
210  }
const KICAD_T * m_ScanTypes
Which object types to scan.
Definition: collector.h:62
void COLLECTOR::SetTimeNow ( )
inlineinherited

Definition at line 212 of file collector.h.

References GetNewTimeStamp().

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

213  {
215  }
timestamp_t GetNewTimeStamp()
Definition: common.cpp:167
timestamp_t m_TimeAtCollection
The time at which the collection was made.
Definition: collector.h:74

Member Data Documentation

const KICAD_T GENERAL_COLLECTOR::AllBoardItems
static
Initial value:

A scan list for all editable board items, like PcbGeneralLocateAndDisplay()

Definition at line 259 of file collectors.h.

Referenced by PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), and SELECTION_TOOL::selectPoint().

const KICAD_T GENERAL_COLLECTOR::AllButZones
static
Initial value:

A scan list for all editable board items, except zones.

Definition at line 264 of file collectors.h.

Referenced by PCB_BASE_FRAME::PcbGeneralLocateAndDisplay().

const KICAD_T GENERAL_COLLECTOR::BoardLevelItems
static
Initial value:

A scan list for all primary board items, omitting items which are subordinate to a MODULE, such as D_PAD and TEXTEMODULE.

Definition at line 275 of file collectors.h.

Referenced by DIALOG_LAYERS_SETUP::getRemovedLayersWithItems(), and DIALOG_LAYERS_SETUP::TransferDataFromWindow().

const COLLECTORS_GUIDE* GENERAL_COLLECTOR::m_Guide
protected

Determines which items are to be collected by Inspect()

Definition at line 246 of file collectors.h.

Referenced by Inspect().

std::vector<EDA_ITEM*> COLLECTOR::m_List
protectedinherited
std::vector<BOARD_ITEM*> GENERAL_COLLECTOR::m_List2nd
protected

A place to hold collected objects which don't match precisely the search criteria, but would be acceptable if nothing else is found.

"2nd" choice, which will be appended to the end of COLLECTOR's prime "list" at the end of the search.

Definition at line 241 of file collectors.h.

Referenced by Collect().

int GENERAL_COLLECTOR::m_PrimaryLength
protected

The number of items that were originally in the primary list before the m_List2nd was concatenated onto the end of it.

Definition at line 252 of file collectors.h.

Referenced by Collect().

EDA_RECT COLLECTOR::m_RefBox
protectedinherited

A bounding box to test against, and that was used to make the collection.

Definition at line 71 of file collector.h.

Referenced by COLLECTOR::GetBoundingBox().

wxPoint COLLECTOR::m_RefPos
protectedinherited

A point to test against, and that was used to make the collection.

Definition at line 68 of file collector.h.

Referenced by COLLECTOR::GetRefPos(), GERBER_COLLECTOR::Inspect(), LIB_COLLECTOR::Inspect(), SCH_COLLECTOR::Inspect(), and Inspect().

const KICAD_T* COLLECTOR::m_ScanTypes
protectedinherited
timestamp_t COLLECTOR::m_TimeAtCollection
protectedinherited

The time at which the collection was made.

Definition at line 74 of file collector.h.

Referenced by COLLECTOR::GetTime().

const KICAD_T GENERAL_COLLECTOR::ModuleItems
static
Initial value:

A scan list for primary module items.

Definition at line 300 of file collectors.h.

Referenced by DIALOG_LAYERS_SETUP::getNonRemovableLayers(), and SELECTION_TOOL::selectPoint().

const KICAD_T GENERAL_COLLECTOR::Modules
static
Initial value:

A scan list for only MODULEs.

Definition at line 280 of file collectors.h.

Referenced by PCB_BASE_FRAME::PcbGeneralLocateAndDisplay().

const KICAD_T GENERAL_COLLECTOR::ModulesAndTheirItems
static
Initial value:

A scan list for MODULEs and their items (for Modedit)

Definition at line 295 of file collectors.h.

Referenced by FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay().

const KICAD_T GENERAL_COLLECTOR::PadsOrModules
static
Initial value:

A scan list for PADs or MODULEs.

Definition at line 285 of file collectors.h.

Referenced by PCB_BASE_FRAME::PcbGeneralLocateAndDisplay().

const KICAD_T GENERAL_COLLECTOR::PadsTracksOrZones
static
Initial value:

A scan list for PADs, TRACKs, VIAs, or ZONEs.

Definition at line 290 of file collectors.h.

Referenced by highlightNet(), and PCB_EDIT_FRAME::SelectHighLight().

const KICAD_T GENERAL_COLLECTOR::Tracks
static
Initial value:

A scan list for only TRACKS.

Definition at line 305 of file collectors.h.

Referenced by PCB_EDITOR_CONTROL::Init(), EDIT_TOOL::Init(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), EDIT_TOOL::Properties(), and BOARD::TracksInNet().

const KICAD_T GENERAL_COLLECTOR::Zones
static
Initial value:

A scan list for zones outlines only.

Definition at line 269 of file collectors.h.

Referenced by PCB_BASE_FRAME::PcbGeneralLocateAndDisplay().


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