KiCad PCB EDA Suite
DRC_RTREE Class Reference

DRC_RTREE - Implements an R-tree for fast spatial and layer indexing of connectable items. More...

#include <drc_rtree.h>

Classes

struct  DRC_LAYER
 The DRC_LAYER struct provides a layer-specific auto-range iterator to the RTree. More...
 
struct  ITEM_WITH_SHAPE
 
struct  PAIR_INFO
 

Public Types

typedef std::pair< PCB_LAYER_ID, PCB_LAYER_IDLAYER_PAIR
 
using iterator = typename drc_rtree::Iterator
 

Public Member Functions

 DRC_RTREE ()
 
 ~DRC_RTREE ()
 
void Insert (BOARD_ITEM *aItem, int aWorstClearance=0, int aLayer=UNDEFINED_LAYER)
 Function Insert() Inserts an item into the tree. More...
 
void clear ()
 Function RemoveAll() Removes all items from the RTree. More...
 
bool CheckColliding (SHAPE *aRefShape, PCB_LAYER_ID aTargetLayer, int aClearance=0, std::function< bool(BOARD_ITEM *)> aFilter=nullptr) const
 
int QueryColliding (BOARD_ITEM *aRefItem, PCB_LAYER_ID aRefLayer, PCB_LAYER_ID aTargetLayer, std::function< bool(BOARD_ITEM *)> aFilter=nullptr, std::function< bool(BOARD_ITEM *)> aVisitor=nullptr, int aClearance=0) const
 This is a fast test which essentially does bounding-box overlap given a worst-case clearance. More...
 
bool QueryColliding (EDA_RECT aBox, SHAPE *aRefShape, PCB_LAYER_ID aLayer, int aClearance, int *aActual=nullptr, VECTOR2I *aPos=nullptr) const
 This one is for tessellated items. More...
 
int QueryCollidingPairs (DRC_RTREE *aRefTree, std::vector< LAYER_PAIR > aLayerPairs, std::function< bool(const LAYER_PAIR &, ITEM_WITH_SHAPE *, ITEM_WITH_SHAPE *, bool *aCollision)> aVisitor, int aMaxClearance, std::function< bool(int, int)> aProgressReporter) const
 
size_t size () const
 Returns the number of items in the tree. More...
 
bool empty () const
 
DRC_LAYER OnLayer (PCB_LAYER_ID aLayer) const
 
DRC_LAYER Overlapping (PCB_LAYER_ID aLayer, const wxPoint &aPoint, int aAccuracy=0) const
 
DRC_LAYER Overlapping (PCB_LAYER_ID aLayer, const EDA_RECT &aRect) const
 

Private Types

using drc_rtree = RTree< ITEM_WITH_SHAPE *, int, 2, double >
 

Private Attributes

drc_rtreem_tree [PCB_LAYER_ID_COUNT]
 
size_t m_count
 

Detailed Description

DRC_RTREE - Implements an R-tree for fast spatial and layer indexing of connectable items.

Non-owning.

Definition at line 43 of file drc_rtree.h.

Member Typedef Documentation

◆ drc_rtree

using DRC_RTREE::drc_rtree = RTree<ITEM_WITH_SHAPE*, int, 2, double>
private

Definition at line 64 of file drc_rtree.h.

◆ iterator

using DRC_RTREE::iterator = typename drc_rtree::Iterator

Definition at line 414 of file drc_rtree.h.

◆ LAYER_PAIR

Definition at line 311 of file drc_rtree.h.

Constructor & Destructor Documentation

◆ DRC_RTREE()

DRC_RTREE::DRC_RTREE ( )
inline

Definition at line 68 of file drc_rtree.h.

69  {
70  for( int layer : LSET::AllLayersMask().Seq() )
71  m_tree[layer] = new drc_rtree();
72 
73  m_count = 0;
74  }
RTree< ITEM_WITH_SHAPE *, int, 2, double > drc_rtree
Definition: drc_rtree.h:64
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470
size_t m_count
Definition: drc_rtree.h:471
static LSET AllLayersMask()
Definition: lset.cpp:787

References LSET::AllLayersMask(), m_count, and m_tree.

◆ ~DRC_RTREE()

DRC_RTREE::~DRC_RTREE ( )
inline

Definition at line 76 of file drc_rtree.h.

77  {
78  for( auto tree : m_tree )
79  delete tree;
80  }
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470

References m_tree.

Member Function Documentation

◆ CheckColliding()

bool DRC_RTREE::CheckColliding ( SHAPE aRefShape,
PCB_LAYER_ID  aTargetLayer,
int  aClearance = 0,
std::function< bool(BOARD_ITEM *)>  aFilter = nullptr 
) const
inline

Definition at line 153 of file drc_rtree.h.

155  {
156  BOX2I box = aRefShape->BBox();
157  box.Inflate( aClearance );
158 
159  int min[2] = { box.GetX(), box.GetY() };
160  int max[2] = { box.GetRight(), box.GetBottom() };
161 
162  int count = 0;
163 
164  auto visit =
165  [&] ( ITEM_WITH_SHAPE* aItem ) -> bool
166  {
167  if( !aFilter || aFilter( aItem->parent ) )
168  {
169  int actual;
170 
171  if( aRefShape->Collide( aItem->shape, aClearance, &actual ) )
172  {
173  count++;
174  return false;
175  }
176  }
177 
178  return true;
179  };
180 
181  this->m_tree[aTargetLayer]->Search( min, max, visit );
182  return count > 0;
183  }
coord_type GetX() const
Definition: box2.h:190
coord_type GetRight() const
Definition: box2.h:199
coord_type GetBottom() const
Definition: box2.h:200
virtual bool Collide(const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const
Check if the boundary of shape (this) lies closer to the point aP than aClearance,...
Definition: shape.h:165
virtual const BOX2I BBox(int aClearance=0) const =0
Compute a bounding box of the shape, with a margin of aClearance a collision.
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470
coord_type GetY() const
Definition: box2.h:191
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:302

References SHAPE::BBox(), SHAPE::Collide(), BOX2< Vec >::GetBottom(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), BOX2< Vec >::Inflate(), and m_tree.

Referenced by extractDiffPairCoupledItems().

◆ clear()

void DRC_RTREE::clear ( )
inline

Function RemoveAll() Removes all items from the RTree.

Definition at line 145 of file drc_rtree.h.

146  {
147  for( auto tree : m_tree )
148  tree->RemoveAll();
149 
150  m_count = 0;
151  }
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470
size_t m_count
Definition: drc_rtree.h:471

References m_count, and m_tree.

Referenced by DRC_TEST_PROVIDER_HOLE_CLEARANCE::Run(), and DRC_TEST_PROVIDER_COPPER_CLEARANCE::Run().

◆ empty()

bool DRC_RTREE::empty ( ) const
inline

Definition at line 409 of file drc_rtree.h.

410  {
411  return m_count == 0;
412  }
size_t m_count
Definition: drc_rtree.h:471

References m_count.

◆ Insert()

void DRC_RTREE::Insert ( BOARD_ITEM aItem,
int  aWorstClearance = 0,
int  aLayer = UNDEFINED_LAYER 
)
inline

Function Insert() Inserts an item into the tree.

Definition at line 86 of file drc_rtree.h.

87  {
88  std::vector<SHAPE*> subshapes;
89 
90  auto addLayer =
91  [&]( PCB_LAYER_ID layer )
92  {
93  std::shared_ptr<SHAPE> shape = aItem->GetEffectiveShape( layer );
94  subshapes.clear();
95 
96  if( shape->HasIndexableSubshapes() )
97  shape->GetIndexableSubshapes( subshapes );
98  else
99  subshapes.push_back( shape.get() );
100 
101  for( SHAPE* subshape : subshapes )
102  {
103  BOX2I bbox = subshape->BBox();
104 
105  bbox.Inflate( aWorstClearance );
106 
107  const int mmin[2] = { bbox.GetX(), bbox.GetY() };
108  const int mmax[2] = { bbox.GetRight(), bbox.GetBottom() };
109 
110  m_tree[layer]->Insert( mmin, mmax, new ITEM_WITH_SHAPE( aItem, subshape,
111  shape ) );
112  m_count++;
113  }
114  };
115 
116  if( aItem->Type() == PCB_FP_TEXT_T && !static_cast<FP_TEXT*>( aItem )->IsVisible() )
117  return;
118 
119  if( aLayer != UNDEFINED_LAYER )
120  {
121  addLayer( (PCB_LAYER_ID) aLayer );
122  }
123  else
124  {
125  LSET layers = aItem->GetLayerSet();
126 
127  // Special-case pad holes which pierce all the copper layers
128  if( aItem->Type() == PCB_PAD_T )
129  {
130  PAD* pad = static_cast<PAD*>( aItem );
131 
132  if( pad->GetDrillSizeX() > 0 && pad->GetDrillSizeY() > 0 )
133  layers |= LSET::AllCuMask();
134  }
135 
136  for( int layer : layers.Seq() )
137  addLayer( (PCB_LAYER_ID) layer );
138  }
139  }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:750
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
coord_type GetX() const
Definition: box2.h:190
coord_type GetRight() const
Definition: box2.h:199
class PAD, a pad in a footprint
Definition: typeinfo.h:89
coord_type GetBottom() const
Definition: box2.h:200
LSEQ Seq(const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
Return an LSEQ from the union of this LSET and a desired sequence.
Definition: lset.cpp:411
PCB_LAYER_ID
A quick note on layer IDs:
LSET is a set of PCB_LAYER_IDs.
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470
size_t m_count
Definition: drc_rtree.h:471
An abstract shape on 2D plane.
Definition: shape.h:116
coord_type GetY() const
Definition: box2.h:191
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:302
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER) const
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
Definition: board_item.cpp:153
Definition: pad.h:60
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
Definition: board_item.h:178
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:163

References LSET::AllCuMask(), BOX2< Vec >::GetBottom(), BOARD_ITEM::GetEffectiveShape(), BOARD_ITEM::GetLayerSet(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), BOX2< Vec >::Inflate(), m_count, m_tree, pad, PCB_FP_TEXT_T, PCB_PAD_T, LSET::Seq(), EDA_ITEM::Type(), and UNDEFINED_LAYER.

Referenced by TRACKS_CLEANER::cleanup(), DRC_TEST_PROVIDER_SILK_TO_MASK::Run(), DRC_TEST_PROVIDER_HOLE_CLEARANCE::Run(), DRC_TEST_PROVIDER_SILK_CLEARANCE::Run(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::Run(), and test::DRC_TEST_PROVIDER_DIFF_PAIR_COUPLING::Run().

◆ OnLayer()

DRC_LAYER DRC_RTREE::OnLayer ( PCB_LAYER_ID  aLayer) const
inline

Definition at line 451 of file drc_rtree.h.

452  {
453  return DRC_LAYER( m_tree[int( aLayer )] );
454  }
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470

References m_tree.

Referenced by QueryCollidingPairs().

◆ Overlapping() [1/2]

DRC_LAYER DRC_RTREE::Overlapping ( PCB_LAYER_ID  aLayer,
const wxPoint &  aPoint,
int  aAccuracy = 0 
) const
inline

Definition at line 456 of file drc_rtree.h.

457  {
458  EDA_RECT rect( aPoint, wxSize( 0, 0 ) );
459  rect.Inflate( aAccuracy );
460  return DRC_LAYER( m_tree[int( aLayer )], rect );
461  }
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470
Handle the component boundary box.
Definition: eda_rect.h:42

References EDA_RECT::Inflate(), and m_tree.

◆ Overlapping() [2/2]

DRC_LAYER DRC_RTREE::Overlapping ( PCB_LAYER_ID  aLayer,
const EDA_RECT aRect 
) const
inline

Definition at line 463 of file drc_rtree.h.

464  {
465  return DRC_LAYER( m_tree[int( aLayer )], aRect );
466  }
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470

References m_tree.

◆ QueryColliding() [1/2]

int DRC_RTREE::QueryColliding ( BOARD_ITEM aRefItem,
PCB_LAYER_ID  aRefLayer,
PCB_LAYER_ID  aTargetLayer,
std::function< bool(BOARD_ITEM *)>  aFilter = nullptr,
std::function< bool(BOARD_ITEM *)>  aVisitor = nullptr,
int  aClearance = 0 
) const
inline

This is a fast test which essentially does bounding-box overlap given a worst-case clearance.

It's used when looking up the specific item-to-item clearance might be expensive and should be deferred till we know we have a possible hit.

Definition at line 190 of file drc_rtree.h.

196  {
197  // keep track of BOARD_ITEMs that have been already found to collide (some items
198  // might be build of COMPOUND/triangulated shapes and a single subshape collision
199  // means we have a hit)
200  std::unordered_set<BOARD_ITEM*> collidingCompounds;
201 
202  // keep track of results of client filter so we don't ask more than once for compound
203  // shapes
204  std::map<BOARD_ITEM*, bool> filterResults;
205 
206  EDA_RECT box = aRefItem->GetBoundingBox();
207  box.Inflate( aClearance );
208 
209  int min[2] = { box.GetX(), box.GetY() };
210  int max[2] = { box.GetRight(), box.GetBottom() };
211 
212  std::shared_ptr<SHAPE> refShape = aRefItem->GetEffectiveShape( aRefLayer );
213 
214  int count = 0;
215 
216  auto visit =
217  [&]( ITEM_WITH_SHAPE* aItem ) -> bool
218  {
219  if( aItem->parent == aRefItem )
220  return true;
221 
222  if( collidingCompounds.find( aItem->parent ) != collidingCompounds.end() )
223  return true;
224 
225  bool filtered;
226  auto it = filterResults.find( aItem->parent );
227 
228  if( it == filterResults.end() )
229  {
230  filtered = aFilter && !aFilter( aItem->parent );
231  filterResults[ aItem->parent ] = filtered;
232  }
233  else
234  {
235  filtered = it->second;
236  }
237 
238  if( filtered )
239  return true;
240 
241  if( refShape->Collide( aItem->shape, aClearance ) )
242  {
243  collidingCompounds.insert( aItem->parent );
244  count++;
245 
246  if( aVisitor )
247  return aVisitor( aItem->parent );
248  }
249 
250  return true;
251  };
252 
253  this->m_tree[aTargetLayer]->Search( min, max, visit );
254  return count;
255  }
int GetX() const
Definition: eda_rect.h:103
int GetBottom() const
Definition: eda_rect.h:119
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470
int GetRight() const
Definition: eda_rect.h:116
Handle the component boundary box.
Definition: eda_rect.h:42
int GetY() const
Definition: eda_rect.h:104
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER) const
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
Definition: board_item.cpp:153
virtual const EDA_RECT GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
Definition: eda_item.cpp:73
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Inflate the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:363

References EDA_RECT::GetBottom(), EDA_ITEM::GetBoundingBox(), BOARD_ITEM::GetEffectiveShape(), EDA_RECT::GetRight(), EDA_RECT::GetX(), EDA_RECT::GetY(), EDA_RECT::Inflate(), and m_tree.

Referenced by TRACKS_CLEANER::cleanup(), insideArea(), DRC_TEST_PROVIDER_HOLE_CLEARANCE::Run(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testItemAgainstZones(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testPadClearances(), and DRC_TEST_PROVIDER_COPPER_CLEARANCE::testTrackClearances().

◆ QueryColliding() [2/2]

bool DRC_RTREE::QueryColliding ( EDA_RECT  aBox,
SHAPE aRefShape,
PCB_LAYER_ID  aLayer,
int  aClearance,
int *  aActual = nullptr,
VECTOR2I aPos = nullptr 
) const
inline

This one is for tessellated items.

(All shapes in the tree will be from a single BOARD_ITEM.) It checks all items in the bbox overlap to find the minimal actual distance and position.

Definition at line 263 of file drc_rtree.h.

265  {
266  aBox.Inflate( aClearance );
267 
268  int min[2] = { aBox.GetX(), aBox.GetY() };
269  int max[2] = { aBox.GetRight(), aBox.GetBottom() };
270 
271  bool collision = false;
272  int actual = INT_MAX;
273  VECTOR2I pos;
274 
275  auto visit =
276  [&]( ITEM_WITH_SHAPE* aItem ) -> bool
277  {
278  int curActual;
279  VECTOR2I curPos;
280 
281  if( aRefShape->Collide( aItem->shape, aClearance, &curActual, &curPos ) )
282  {
283  collision = true;
284 
285  if( curActual < actual )
286  {
287  actual = curActual;
288  pos = curPos;
289  }
290  }
291 
292  return true;
293  };
294 
295  this->m_tree[aLayer]->Search( min, max, visit );
296 
297  if( collision )
298  {
299  if( aActual )
300  *aActual = std::max( 0, actual );
301 
302  if( aPos )
303  *aPos = pos;
304 
305  return true;
306  }
307 
308  return false;
309  }
int GetX() const
Definition: eda_rect.h:103
virtual bool Collide(const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const
Check if the boundary of shape (this) lies closer to the point aP than aClearance,...
Definition: shape.h:165
int GetBottom() const
Definition: eda_rect.h:119
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470
int GetRight() const
Definition: eda_rect.h:116
int GetY() const
Definition: eda_rect.h:104
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Inflate the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:363

References SHAPE::Collide(), EDA_RECT::GetBottom(), EDA_RECT::GetRight(), EDA_RECT::GetX(), EDA_RECT::GetY(), EDA_RECT::Inflate(), and m_tree.

◆ QueryCollidingPairs()

int DRC_RTREE::QueryCollidingPairs ( DRC_RTREE aRefTree,
std::vector< LAYER_PAIR aLayerPairs,
std::function< bool(const LAYER_PAIR &, ITEM_WITH_SHAPE *, ITEM_WITH_SHAPE *, bool *aCollision)>  aVisitor,
int  aMaxClearance,
std::function< bool(int, int)>  aProgressReporter 
) const
inline

Definition at line 326 of file drc_rtree.h.

333  {
334  std::vector<PAIR_INFO> pairsToVisit;
335 
336  for( LAYER_PAIR& layerPair : aLayerPairs )
337  {
338  const PCB_LAYER_ID refLayer = layerPair.first;
339  const PCB_LAYER_ID targetLayer = layerPair.second;
340 
341  for( ITEM_WITH_SHAPE* refItem : aRefTree->OnLayer( refLayer ) )
342  {
343  BOX2I box = refItem->shape->BBox();
344  box.Inflate( aMaxClearance );
345 
346  int min[2] = { box.GetX(), box.GetY() };
347  int max[2] = { box.GetRight(), box.GetBottom() };
348 
349  auto visit =
350  [&]( ITEM_WITH_SHAPE* aItemToTest ) -> bool
351  {
352  // don't collide items against themselves
353  if( aItemToTest->parent == refItem->parent )
354  return true;
355 
356  pairsToVisit.emplace_back( layerPair, refItem, aItemToTest );
357  return true;
358  };
359 
360  this->m_tree[targetLayer]->Search( min, max, visit );
361  };
362  }
363 
364  // keep track of BOARD_ITEMs pairs that have been already found to collide (some items
365  // might be build of COMPOUND/triangulated shapes and a single subshape collision
366  // means we have a hit)
367  std::map< std::pair<BOARD_ITEM*, BOARD_ITEM*>, int> collidingCompounds;
368 
369  int progress = 0;
370  int count = pairsToVisit.size();
371 
372  for( const PAIR_INFO& pair : pairsToVisit )
373  {
374  if( !aProgressReporter( progress++, count ) )
375  break;
376 
377  BOARD_ITEM* a = pair.refItem->parent;
378  BOARD_ITEM* b = pair.testItem->parent;
379 
380  // store canonical order so we don't collide in both directions (a:b and b:a)
381  if( static_cast<void*>( a ) > static_cast<void*>( b ) )
382  std::swap( a, b );
383 
384  // don't report multiple collisions for compound or triangulated shapes
385  if( collidingCompounds.count( { a, b } ) )
386  continue;
387 
388  bool collisionDetected = false;
389 
390  if( !aVisitor( pair.layerPair, pair.refItem, pair.testItem, &collisionDetected ) )
391  break;
392 
393  if( collisionDetected )
394  collidingCompounds[ { a, b } ] = 1;
395  }
396 
397  return 0;
398  }
coord_type GetX() const
Definition: box2.h:190
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:82
coord_type GetRight() const
Definition: box2.h:199
std::pair< PCB_LAYER_ID, PCB_LAYER_ID > LAYER_PAIR
Definition: drc_rtree.h:311
coord_type GetBottom() const
Definition: box2.h:200
PCB_LAYER_ID
A quick note on layer IDs:
drc_rtree * m_tree[PCB_LAYER_ID_COUNT]
Definition: drc_rtree.h:470
coord_type GetY() const
Definition: box2.h:191
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:302
DRC_LAYER OnLayer(PCB_LAYER_ID aLayer) const
Definition: drc_rtree.h:451

References BOX2< Vec >::GetBottom(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), BOX2< Vec >::Inflate(), m_tree, and OnLayer().

Referenced by DRC_TEST_PROVIDER_SILK_TO_MASK::Run(), and DRC_TEST_PROVIDER_SILK_CLEARANCE::Run().

◆ size()

size_t DRC_RTREE::size ( ) const
inline

Returns the number of items in the tree.

Returns
number of elements in the tree;

Definition at line 404 of file drc_rtree.h.

405  {
406  return m_count;
407  }
size_t m_count
Definition: drc_rtree.h:471

References m_count.

Referenced by DRC_TEST_PROVIDER_SILK_CLEARANCE::Run().

Member Data Documentation

◆ m_count

size_t DRC_RTREE::m_count
private

Definition at line 471 of file drc_rtree.h.

Referenced by clear(), DRC_RTREE(), empty(), Insert(), and size().

◆ m_tree


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