KiCad PCB EDA Suite
|
Implements an R-tree for fast spatial and type indexing of schematic items. More...
#include <sch_rtree.h>
Classes | |
struct | EE_TYPE |
The EE_TYPE struct provides a type-specific auto-range iterator to the RTree. More... | |
Public Types | |
using | iterator = typename ee_rtree::Iterator |
Public Member Functions | |
EE_RTREE () | |
~EE_RTREE () | |
void | insert (SCH_ITEM *aItem) |
Insert an item into the tree. | |
bool | remove (SCH_ITEM *aItem) |
Remove an item from the tree. | |
void | clear () |
Remove all items from the RTree. | |
bool | contains (const SCH_ITEM *aItem, bool aRobust=false) const |
Determine if a given item exists in the tree. | |
size_t | size () const |
Return the number of items in the tree. | |
bool | empty () const |
EE_TYPE | OfType (KICAD_T aType) const |
EE_TYPE | Overlapping (const BOX2I &aRect) const |
EE_TYPE | Overlapping (const VECTOR2I &aPoint, int aAccuracy=0) const |
EE_TYPE | Overlapping (KICAD_T aType, const VECTOR2I &aPoint, int aAccuracy=0) const |
EE_TYPE | Overlapping (KICAD_T aType, const BOX2I &aRect) const |
iterator | begin () |
Returns a read/write iterator that points to the first element in the EE_RTREE N.B. | |
iterator | end () |
Returns a read/write iterator that points to one past the last element in the EE_RTREE. | |
const iterator | begin () const |
const iterator | end () const |
Private Types | |
using | ee_rtree = RTree< SCH_ITEM *, int, 3, double > |
Private Attributes | |
ee_rtree * | m_tree |
size_t | m_count |
Implements an R-tree for fast spatial and type indexing of schematic items.
Non-owning.
Definition at line 39 of file sch_rtree.h.
|
private |
Definition at line 42 of file sch_rtree.h.
using EE_RTREE::iterator = typename ee_rtree::Iterator |
Definition at line 181 of file sch_rtree.h.
|
inline |
Definition at line 45 of file sch_rtree.h.
|
inline |
Definition at line 51 of file sch_rtree.h.
References m_tree.
|
inline |
Returns a read/write iterator that points to the first element in the EE_RTREE N.B.
The iteration order of the RTree is not readily apparent and will change if/when you add or move items and the RTree is re-balanced. Any exposure of the RTree contents to the user MUST be sorted before being presented. See SCH_IO_KICAD_SEXPR::Format or SCH_EDITOR_CONTROL::nextMatch for examples.
Definition at line 276 of file sch_rtree.h.
References m_tree.
Referenced by SCH_SCREEN::FreeDrawList(), API_HANDLER_SCH::handleCreateUpdateItemsInternal(), CADSTAR_SCH_ARCHIVE_LOADER::Load(), and SCH_IO_EAGLE::loadSheet().
|
inline |
Definition at line 291 of file sch_rtree.h.
References m_tree.
|
inline |
Remove all items from the RTree.
Definition at line 111 of file sch_rtree.h.
References m_count, and m_tree.
Referenced by SCH_SCREEN::Clear(), and SCH_SCREEN::FreeDrawList().
|
inline |
Determine if a given item exists in the tree.
Note that this does not search the full tree so if the item has been moved, this will return false when it should be true.
aItem | Item that may potentially exist in the tree. |
aRobust | If true, search the whole tree, not just the bounding box. |
Definition at line 125 of file sch_rtree.h.
References BOX2< Vec >::GetBottom(), EDA_ITEM::GetBoundingBox(), SCH_ITEM::GetPenWidth(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), BOX2< Vec >::Inflate(), m_tree, and EDA_ITEM::Type().
Referenced by SCH_SCREEN::CheckIfOnDrawList(), and SCH_EDIT_FRAME::onNetNavigatorSelection().
|
inline |
Definition at line 176 of file sch_rtree.h.
References m_count.
Referenced by SCH_EDIT_TOOL::Init(), SCH_SCREEN::IsEmpty(), and SCH_EDIT_FRAME::setupUIConditions().
|
inline |
Returns a read/write iterator that points to one past the last element in the EE_RTREE.
Definition at line 285 of file sch_rtree.h.
References m_tree.
Referenced by SCH_SCREEN::FreeDrawList(), API_HANDLER_SCH::handleCreateUpdateItemsInternal(), CADSTAR_SCH_ARCHIVE_LOADER::Load(), and SCH_IO_EAGLE::loadSheet().
|
inline |
Definition at line 296 of file sch_rtree.h.
References m_tree.
|
inline |
Insert an item into the tree.
Item's bounding box is taken via its BBox() method.
Definition at line 59 of file sch_rtree.h.
References BOX2< Vec >::GetBottom(), EDA_ITEM::GetBoundingBox(), SCH_ITEM::GetPenWidth(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), BOX2< Vec >::Inflate(), m_count, m_tree, and EDA_ITEM::Type().
Referenced by SCH_SCREEN::Append(), and SCH_SCREEN::UpdateLocalLibSymbolLinks().
Definition at line 238 of file sch_rtree.h.
References m_tree.
Referenced by SCH_IO_EAGLE::addBusEntries(), SCH_SHEET_LIST::AnnotatePowerSymbols(), SCH_EDIT_FRAME::AutoRotateItem(), BOOST_AUTO_TEST_CASE(), SCH_EDIT_FRAME::BreakSegmentsOnJunctions(), CONNECTION_GRAPH::buildConnectionGraph(), SCH_SCREENS::buildScreenList(), SCH_SCREENS::ChangeSymbolLibNickname(), SCH_SHEET::CleanupSheet(), SCH_SHEET::CountSheets(), findItemsFromSyncSelection(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), SCH_SCREEN::HasItems(), SCH_SHEET::HasUndefinedPins(), SCH_IO_KICAD_SEXPR::loadHierarchy(), SCH_IO_KICAD_LEGACY::loadHierarchy(), KI_TEST::LoadHierarchy(), SCH_IO_EAGLE::loadSheet(), SCH_SHEET::LocatePathOfScreen(), LINE_POINT_EDIT_BEHAVIOR::MakePoints(), DIALOG_SHEET_PIN_PROPERTIES::onComboBox(), DIALOG_ERC::OnERCItemRClick(), SCH_IO_ALTIUM::ParseAltiumSch(), DIALOG_CHANGE_SYMBOLS::processMatchingSymbols(), DIALOG_SYMBOL_REMAP::remapSymbolsToLibTable(), SCH_SCREEN::Remove(), SCH_EDITOR_CONTROL::RepairSchematic(), SCH_EDIT_FRAME::SaveProject(), SCH_EDIT_FRAME::SchematicCleanUp(), SCH_SHEET::SearchHierarchy(), SCH_SHEET::SymbolCount(), DIALOG_ERC::testErc(), ERC_TESTER::TestFourWayJunction(), ERC_TESTER::TestTextVars(), DIALOG_SHEET_PROPERTIES::TransferDataFromWindow(), DIALOG_SHEET_PIN_PROPERTIES::TransferDataToWindow(), DIALOG_CHANGE_SYMBOLS::updateFieldsList(), PANEL_SYNC_SHEET_PINS::UpdateForms(), and SCH_SHEET_LIST::UpdateSymbolInstanceData().
Definition at line 243 of file sch_rtree.h.
References m_tree, and SCH_LOCATE_ANY_T.
Referenced by JUNCTION_HELPERS::AnalyzePoint(), EE_COLLECTOR::Collect(), SCH_EDIT_FRAME::DeleteJunction(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), SCH_DRAWING_TOOLS::findWire(), SCH_MOVE_TOOL::getConnectedDragItems(), SCH_MOVE_TOOL::getConnectedItems(), AUTOPLACER::getPossibleCollisions(), SCH_LINE_WIRE_BUS_TOOL::getSheetPin(), SCH_IO_EAGLE::moveLabels(), SCH_SCREEN::Plot(), SCH_EDIT_FRAME::RecalculateConnections(), SCH_RULE_AREA::RefreshContainedItemsAndDirectives(), SCH_LINE_WIRE_BUS_TOOL::TrimOverLappingWires(), and SCH_EDIT_FRAME::TrimWire().
Definition at line 248 of file sch_rtree.h.
References BOX2< Vec >::Inflate(), m_tree, and SCH_LOCATE_ANY_T.
Definition at line 262 of file sch_rtree.h.
References m_tree.
|
inline |
Definition at line 255 of file sch_rtree.h.
References BOX2< Vec >::Inflate(), and m_tree.
|
inline |
Remove an item from the tree.
Removal is done by comparing pointers, attempting to remove a copy of the item will fail.
Definition at line 78 of file sch_rtree.h.
References BOX2< Vec >::GetBottom(), EDA_ITEM::GetBoundingBox(), SCH_ITEM::GetPenWidth(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), BOX2< Vec >::Inflate(), m_count, m_tree, and EDA_ITEM::Type().
Referenced by SCH_SCREEN::Remove(), and SCH_SCREEN::UpdateLocalLibSymbolLinks().
|
inline |
Return the number of items in the tree.
Definition at line 171 of file sch_rtree.h.
References m_count.
|
private |
Definition at line 304 of file sch_rtree.h.
Referenced by clear(), EE_RTREE(), empty(), insert(), remove(), and size().
|
private |
Definition at line 303 of file sch_rtree.h.
Referenced by begin(), clear(), contains(), EE_RTREE(), end(), insert(), OfType(), Overlapping(), remove(), and ~EE_RTREE().