46 if(
path.LastScreen() )
49 index.emplace( std::move( key ), std::move(
path ) );
66 std::erase( names, wxString() );
70 std::set<wxString> names;
72 for(
const auto& [key, subgraphs] :
m_schematic.ConnectionGraph()->GetNetMap() )
74 if( !key.Name.IsEmpty() )
75 names.insert( key.Name );
78 return { names.begin(), names.end() };
85 std::set<wxString> names;
92 if(
const auto name = seed->GetConnectionName( &aSheet );
name && !
name->IsEmpty() )
93 names.insert( *
name );
96 std::unordered_set<SCH_ITEM*> items;
98 for(
const wxString&
name : names )
101 return { items.begin(), items.end() };
110 std::set<wxString> names;
119 const auto& view =
group->instances.front();
122 names.insert(
group->name );
124 for(
const auto& member : view.Members().leaves )
127 names.insert( member.Name() );
134 const SCH_CONNECTION* connection = subgraph->GetDriverConnection();
139 if( connection->
IsNet() )
140 names.insert( connection->
Name() );
142 for(
const auto& member : connection->
AllMembers() )
144 if( member && member->IsNet() )
145 names.insert( member->Name() );
150 names.erase( wxString() );
151 return { names.begin(), names.end() };
156 bool aIncludeBusParents,
157 bool aIncludeBusMembers )
const
162 const auto& graph = *
m_schematic.ConnectionGraph();
163 std::set<const CONNECTION_SUBGRAPH*> subgraphs;
164 std::vector<const CONNECTION_SUBGRAPH*> pending;
165 auto add = [&](
const wxString&
name )
169 if( subgraph && subgraphs.insert( subgraph ).second )
170 pending.push_back( subgraph );
175 if( aIncludeBusMembers )
177 for(
const wxString& member :
SignalNames( aName ) )
181 if( aIncludeBusParents )
183 for(
const wxString&
equivalent : graph.GetEquivalentBusNames( aName ) )
186 for(
size_t i = 0; i < pending.size(); ++i )
188 for(
const auto& [member, parents] : pending[i]->GetBusParents() )
193 add( parent->GetNetName() );
199 std::erase_if( subgraphs,
210 bool aIncludeBusMembers )
const
214 std::set<NODE_ID> visited;
215 std::vector<NET_GROUP> pending;
218 if( !
group.instances.empty() && visited.insert(
group.instances.front().Component() ).second )
219 pending.push_back( std::move(
group ) );
222 if(
auto group = facade.NetByName( aName ) )
223 add( std::move( *
group ) );
225 if( aIncludeBusMembers )
227 for(
auto&
group : facade.BusWithMembers( aName ) )
228 add( std::move(
group ) );
231 if( aIncludeBusParents )
233 for(
const wxString&
equivalent : facade.GetEquivalentBusNames( aName ) )
236 add( std::move( *
group ) );
239 for(
size_t i = 0; i < pending.size(); ++i )
241 for(
auto& parent : facade.BundlesOf( pending[i].instances.front().Component() ) )
242 add( std::move( parent ) );
250 const auto items = view.
Items();
261 collected.insert( collected.end(), items.begin(), items.end() );
281 std::set<KIID_PATH> sheets;
286 sheets.insert( sheet.PathRef() );
292 sheets.insert( subgraph->GetSheet().PathRef() );
299 bool aIncludeBusMembers )
const
311 auto& items =
result[subgraph->GetSheet()];
312 items.insert( items.end(), subgraph->GetItems().begin(), subgraph->GetItems().end() );
319 items.erase( std::unique( items.begin(), items.end() ), items.end() );
327 std::unordered_set<SCH_ITEM*>& aItems,
bool aIncludeBusParents,
328 bool aIncludeBusMembers )
const
333 auto it =
result.find( aSheet );
336 aItems.insert( it->second.begin(), it->second.end() );
343 if( subgraph->GetSheet() == aSheet )
344 aItems.insert( subgraph->GetItems().begin(), subgraph->GetItems().end() );
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
A subgraph is a set of items that are electrically connected on a single sheet.
const std::set< SCH_ITEM * > & GetItems() const
Provide a read-only reference to the items in the subgraph.
const SCH_SHEET_PATH & GetSheet() const
Holds all the data relating to one schematic.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
const std::vector< std::shared_ptr< SCH_CONNECTION > > AllMembers() const
wxString Name(bool aIgnoreSheet=false) const
std::optional< PATH_INDEX > m_paths
void CollectNetItems(const wxString &aName, const SCH_SHEET_PATH &aSheet, std::unordered_set< SCH_ITEM * > &aItems, bool aIncludeBusParents=false, bool aIncludeBusMembers=false) const
bool HasNet(const wxString &aName) const
std::vector< wxString > SignalNames(const wxString &aName) const
std::set< const CONNECTION_SUBGRAPH * > netSubgraphs(const wxString &aName, bool aIncludeBusParents, bool aIncludeBusMembers) const
NET_ITEMS_BY_SHEET NetItems(const wxString &aName, bool aIncludeBusParents, bool aIncludeBusMembers=false) const
std::map< KIID_PATH, SCH_SHEET_PATH > PATH_INDEX
const SCHEMATIC & m_schematic
NAVIGATION_QUERY(const SCHEMATIC &aSchematic)
NET_ITEMS_BY_SHEET netItemsByEngine(const wxString &aName, bool aIncludeBusParents, bool aIncludeBusMembers) const
std::vector< SCH_ITEM * > WholeNetItems(const std::vector< SCH_ITEM * > &aSeeds, const SCH_SHEET_PATH &aSheet) const
const PATH_INDEX & paths() const
std::set< KIID_PATH > NetSheets(const wxString &aName) const
std::vector< wxString > NetNames() const
std::vector< SCH_ITEM * > Items() const
KIID_PATH Instance() const
Base class for any item which can be embedded within the SCHEMATIC container class,...
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SCH_SCREEN * LastScreen()
bool equivalent(SIM_MODEL::DEVICE_T a, SIM_MODEL::DEVICE_T b)
Value keys and the key session of the schematic connectivity engine.
std::map< SCH_SHEET_PATH, std::vector< SCH_ITEM * >, SHEET_PATH_CMP > NET_ITEMS_BY_SHEET
wxString result
Test unit parsing edge cases and error handling.