84 if( !symbol || aProperty->
Name() !=
_HKI(
"Text" ) )
90 wxString newValue = aItem->
Get<wxString>( aProperty );
94 symbol->
SetRef( &sheetPath, newValue );
102 wxString ref = symbol->
GetRef( &sheetPath );
108 std::vector<SCH_SYMBOL*> otherUnits;
114 switch( field->
GetId() )
121 aCommit->
Modify( otherUnit, sheet.LastScreen() );
123 otherUnit->GetField( field->
GetId() )->SetText( newValue );
168 project.m_ErcSettings =
nullptr;
171 delete project.m_SchematicSettings;
172 project.m_SchematicSettings =
nullptr;
183 project.m_SchematicSettings->LoadFromFile();
184 project.m_SchematicSettings->m_NgspiceSettings->LoadFromFile();
185 project.m_ErcSettings->LoadFromFile();
197 std::shared_ptr<REFDES_TRACKER> refdesTracker =
m_project->GetProjectFile().m_SchematicSettings->m_refDesTracker;
206 refdesTracker->Insert( ref.GetFullRef(
false ).ToStdString() );
222 return std::any_of( references.
begin(), references.
end(),
225 return ref.GetFullRef( true ) == aRef.GetFullRef( true );
232 wxCHECK_RET( aRootSheet, wxS(
"Call to SetRoot with null SCH_SHEET!" ) );
271 [&](
const wxString& aVar )
274 aVars->push_back( aVar );
279 add( wxT(
"SHEETPATH" ) );
280 add( wxT(
"SHEETNAME" ) );
281 add( wxT(
"FILENAME" ) );
282 add( wxT(
"FILEPATH" ) );
283 add( wxT(
"PROJECTNAME" ) );
288 for( std::pair<wxString, wxString> entry :
m_project->GetTextVars() )
296 wxCHECK( aSheetPath,
false );
298 if( token->IsSameAs( wxT(
"#" ) ) )
303 else if( token->IsSameAs( wxT(
"##" ) ) )
305 *token = wxString::Format(
"%i",
Root().CountSheets() );
308 else if( token->IsSameAs( wxT(
"SHEETPATH" ) ) )
313 else if( token->IsSameAs( wxT(
"SHEETNAME" ) ) )
318 else if( token->IsSameAs( wxT(
"FILENAME" ) ) )
321 *token = fn.GetFullName();
324 else if( token->IsSameAs( wxT(
"FILEPATH" ) ) )
327 *token = fn.GetFullPath();
330 else if( token->IsSameAs( wxT(
"PROJECTNAME" ) ) )
340 if(
m_project->TextVarResolver( token ) )
349 return IsValid() ?
m_rootSheet->GetScreen()->GetFileName() : wxString( wxEmptyString );
356 return *
m_project->GetProjectFile().m_SchematicSettings;
363 return *
m_project->GetProjectFile().m_ErcSettings;
377 std::set<wxString> migratedExclusions;
393 if( settingsKey != wxT(
"pin_to_pin" )
394 && settingsKey != wxT(
"hier_label_mismatch" )
395 && settingsKey != wxT(
"different_unit_net" ) )
410 settings.
m_ErcExclusions.insert( migratedExclusions.begin(), migratedExclusions.end() );
420 std::set<wxString>::iterator it = settings.
m_ErcExclusions.find( serialized );
430 std::vector<SCH_MARKER*> newMarkers;
439 newMarkers.push_back( marker );
451 for(
const std::shared_ptr<BUS_ALIAS>& alias :
m_busAliases )
453 if( alias && alias->GetName() == aLabel )
466 auto sameDefinition = [&](
const std::shared_ptr<BUS_ALIAS>& candidate ) ->
bool
468 return candidate && candidate->GetName() == aAlias->GetName()
469 && candidate->Members() == aAlias->Members();
487 for(
const std::shared_ptr<BUS_ALIAS>& alias : aAliases )
492 std::shared_ptr<BUS_ALIAS> clone = alias->Clone();
494 auto sameDefinition = [&](
const std::shared_ptr<BUS_ALIAS>& candidate ) ->
bool
496 return candidate && candidate->GetName() == clone->GetName()
497 && candidate->Members() == clone->Members();
517 const auto& projectAliases =
m_project->GetProjectFile().m_BusAliases;
519 for(
const auto& alias : projectAliases )
521 std::shared_ptr<BUS_ALIAS> busAlias = std::make_shared<BUS_ALIAS>();
523 busAlias->SetName( alias.first );
524 busAlias->Members() = alias.second;
536 auto& projectAliases =
m_project->GetProjectFile().m_BusAliases;
538 projectAliases.clear();
540 std::set<wxString> seen;
542 for(
const std::shared_ptr<BUS_ALIAS>& alias :
m_busAliases )
547 if( !seen.insert( alias->GetName() ).second )
550 projectAliases.emplace( alias->GetName(), alias->Members() );
557 std::set<wxString> names;
566 names.insert( key.Name );
577 wxString ref = token->BeforeFirst(
':', &remainder );
583 if(
path.size() > 1 )
593 if( refSymbol->
ResolveTextVar( &sheetPath, &remainder, aDepth + 1 ) )
594 *token = std::move( remainder );
596 *token = refSymbol->
GetRef( &sheetPath,
true ) + wxS(
":" ) + remainder;
606 if( refSheet->
ResolveTextVar( &sheetPath, &remainder, aDepth + 1 ) )
607 *token = std::move( remainder );
618 std::map<int, wxString> namesMap;
622 if( sheet.size() == 1 )
623 namesMap[sheet.GetVirtualPageNumber()] =
_(
"<root sheet>" );
625 namesMap[sheet.GetVirtualPageNumber()] = sheet.Last()->GetName();
634 std::map<int, wxString> pagesMap;
637 pagesMap[sheet.GetVirtualPageNumber()] = sheet.GetPageNumber();
646 size_t sourceLen = aSource.length();
648 for(
size_t i = 0; i < sourceLen; ++i )
650 if( aSource[i] ==
'$' && i + 1 < sourceLen && aSource[i+1] ==
'{' )
653 bool isCrossRef =
false;
656 for( i = i + 2; i < sourceLen; ++i )
658 if( aSource[i] ==
'{'
659 && ( aSource[i-1] ==
'_' || aSource[i-1] ==
'^' || aSource[i-1] ==
'~' ) )
664 if( aSource[i] ==
'}' )
672 if( aSource[i] ==
':' )
675 token.append( aSource[i] );
681 wxString ref = token.BeforeFirst(
':', &remainder );
686 for(
size_t jj = 0; jj < references.
GetCount(); jj++ )
688 SCH_SYMBOL* refSymbol = references[ jj ].GetSymbol();
690 if( ref == refSymbol->
GetRef( &references[ jj ].GetSheetPath(),
true ) )
695 token =
path.AsString() + wxS(
":" ) + remainder;
701 newbuf.append( wxS(
"${" ) + token + wxS(
"}" ) );
705 newbuf.append( aSource[i] );
716 size_t sourceLen = aSource.length();
718 for(
size_t i = 0; i < sourceLen; ++i )
720 if( aSource[i] ==
'$' && i + 1 < sourceLen && aSource[i+1] ==
'{' )
723 bool isCrossRef =
false;
725 for( i = i + 2; i < sourceLen; ++i )
727 if( aSource[i] ==
'}' )
730 if( aSource[i] ==
':' )
733 token.append( aSource[i] );
739 wxString ref = token.BeforeFirst(
':', &remainder );
745 if(
path.size() > 1 )
754 token = refSymbol->
GetRef( &sheetPath,
true ) + wxS(
":" ) + remainder;
758 newbuf.append( wxS(
"${" ) + token + wxS(
"}" ) );
762 newbuf.append( aSource[i] );
785 wxString filename = rootFn.GetName();
801 int sheet_number = 1;
808 if( sheet.Path() == current_sheetpath )
814 for( screen = s_list.
GetFirst(); screen !=
nullptr; screen = s_list.
GetNext() )
825 std::map<wxString, std::set<int>>& pageRefsMap =
GetPageRefsMap();
834 wxString resolvedLabel = global->
GetShownText( &sheet,
false );
836 pageRefsMap[ resolvedLabel ].insert( sheet.GetVirtualPageNumber() );
845 std::vector<SCH_GLOBALLABEL*> currentSheetGlobalLabels;
848 currentSheetGlobalLabels.push_back(
static_cast<SCH_GLOBALLABEL*
>( item ) );
852 std::vector<SCH_FIELD>& fields = globalLabel->GetFields();
854 fields[0].SetVisible( show );
858 if( fields.size() == 1 && fields[0].GetTextPos() == globalLabel->GetPosition() )
863 for(
SCH_FIELD& field : globalLabel->GetFields() )
864 field.ClearBoundingBoxCache();
866 globalLabel->ClearBoundingBoxCache();
876 const wxString& aRange )
878 wxString spiceNetName( aNetName.Lower() );
881 if( spiceNetName == wxS(
"gnd" ) || spiceNetName == wxS(
"0" ) )
882 return wxEmptyString;
901 std::deque<EDA_ITEM*> allItems;
903 for(
SCH_ITEM* item : screen->Items() )
904 allItems.push_back( item );
907 for(
const VECTOR2I& point : screen->GetNeededJunctions( allItems ) )
910 screen->Append( junction );
913 for(
SCH_LINE* wire : screen->GetBusesAndWires( point,
true ) )
916 screen->Append( newSegment );
981 for(
unsigned i = 0; i < sheetList.size(); i++ )
1037 for(
auto& [
name, libSym] : screen->GetLibSymbols() )
1038 aFunction( libSym->GetEmbeddedFiles() );
1045 std::set<KIFONT::OUTLINE_FONT*>
fonts;
1051 for(
SCH_ITEM* item : sheet.LastScreen()->Items() )
1063 if( outline->GetEmbeddingPermission() == EMBEDDING_PERMISSION::EDITABLE
1064 || outline->GetEmbeddingPermission() == EMBEDDING_PERMISSION::INSTALLABLE )
1066 fonts.insert( outline );
1086 wxLogTrace(
"EMBED",
"Failed to add font file: %s", font->GetFileName() );
1097 std::set<const SCH_SCREEN*> retv;
1110 const std::vector<SCH_SYMBOL_INSTANCE> symbolInstances = symbol->
GetInstances();
1114 if( !hierarchy.
HasPath( instance.m_Path ) )
1116 retv.insert( screen );
1121 if( retv.count( screen ) )
1138 wxCHECK2( screen,
continue );
1140 if( screen->GetRefCount() > 1 )
1151 std::vector<SCH_LINE*> lines;
1152 std::vector<SCH_JUNCTION*> junctions;
1153 std::vector<SCH_NO_CONNECT*> ncs;
1154 std::vector<SCH_ITEM*> items_to_remove;
1155 bool changed =
true;
1157 if( aScreen ==
nullptr )
1160 auto remove_item = [&](
SCH_ITEM* aItem ) ->
void
1168 if( aItem->IsSelected() && selectionTool )
1175 aCommit->
Removed( aItem, aScreen );
1183 items_to_remove.push_back( item );
1185 junctions.push_back(
static_cast<SCH_JUNCTION*
>( item ) );
1188 for(
SCH_ITEM* item : items_to_remove )
1189 remove_item( item );
1197 if( ( aFirst->GetEditFlags() & STRUCT_DELETED )
1198 || ( aSecond->GetEditFlags() & STRUCT_DELETED ) )
1204 remove_item( aSecond );
1210 if( ( aFirst->GetEditFlags() & STRUCT_DELETED )
1211 || ( aSecond->GetEditFlags() & STRUCT_DELETED ) )
1217 remove_item( aSecond );
1221 auto minX = [](
const SCH_LINE* l )
1223 return std::min( l->GetStartPoint().x, l->GetEndPoint().x );
1226 auto maxX = [](
const SCH_LINE* l )
1228 return std::max( l->GetStartPoint().x, l->GetEndPoint().x );
1231 auto minY = [](
const SCH_LINE* l )
1233 return std::min( l->GetStartPoint().y, l->GetEndPoint().y );
1236 auto maxY = [](
const SCH_LINE* l )
1238 return std::max( l->GetStartPoint().y, l->GetEndPoint().y );
1251 lines.push_back(
static_cast<SCH_LINE*
>( item ) );
1255 std::sort( lines.begin(), lines.end(),
1258 return minX( a ) < minX( b );
1261 for(
auto it1 = lines.begin(); it1 != lines.end(); ++it1 )
1268 if( firstLine->
IsNull() )
1270 remove_item( firstLine );
1274 int firstRightXEdge = maxX( firstLine );
1277 for( ++it2; it2 != lines.end(); ++it2 )
1280 int secondLeftXEdge = minX( secondLine );
1283 if( secondLeftXEdge > firstRightXEdge )
1287 if( !( std::max( minY( firstLine ), minY( secondLine ) )
1288 <= std::min( maxY( firstLine ), maxY( secondLine ) ) ) )
1307 remove_item( secondLine );
1315 if( mergedLine !=
nullptr )
1317 remove_item( firstLine );
1318 remove_item( secondLine );
1320 if( m_schematicHolder )
1322 m_schematicHolder->AddToScreen( mergedLine, aScreen );
1325 aCommit->Added( mergedLine, aScreen );
1328 selectionTool->AddItemToSel( mergedLine,
true );
1342 std::function<
void(
SCH_ITEM* )>* aChangedItemHandler,
1351 aCommit = &localCommit;
1363 CleanUp( aCommit, sheet.LastScreen() );
1367 wxLogTrace(
"CONN_PROFILE",
"SchematicCleanUp() %0.4f ms", timer.
msecs() );
1374 || aLastChangeList ==
nullptr
1378 m_project->GetProjectFile().NetSettings()->ClearAllCaches();
1381 std::unordered_set<SCH_SCREEN*> all_screens;
1384 all_screens.insert(
path.LastScreen() );
1401 std::set<SCH_ITEM*> changed_items;
1402 std::set<VECTOR2I> pts;
1403 std::set<std::pair<SCH_SHEET_PATH, SCH_ITEM*>> item_paths;
1406 std::unordered_set<SCH_SCREEN*> changed_screens;
1407 std::set<std::pair<SCH_RULE_AREA*, SCH_SCREEN*>> changed_rule_areas;
1408 std::vector<CHANGED_ITEM> changed_connectable_items;
1411 auto addItemToChangeSet = [&changed_items, &pts, &item_paths]( CHANGED_ITEM itemData )
1413 std::vector<SCH_SHEET_PATH>& paths = itemData.screen->GetClientSheetPaths();
1415 std::vector<VECTOR2I> tmp_pts = itemData.item->GetConnectionPoints();
1416 pts.insert( tmp_pts.begin(), tmp_pts.end() );
1417 changed_items.insert( itemData.item );
1420 item_paths.insert( std::make_pair(
path, itemData.item ) );
1422 if( !itemData.linked_item || !itemData.linked_item->IsConnectable() )
1425 tmp_pts = itemData.linked_item->GetConnectionPoints();
1426 pts.insert( tmp_pts.begin(), tmp_pts.end() );
1427 changed_items.insert( itemData.linked_item );
1433 std::vector<SCH_PIN*> pins = symbol->GetPins();
1434 changed_items.insert( pins.begin(), pins.end() );
1438 item_paths.insert( std::make_pair(
path, itemData.linked_item ) );
1442 for(
unsigned ii = 0; ii < aLastChangeList->
GetCount(); ++ii )
1462 changed_screens.insert( screen );
1467 changed_rule_areas.insert( { ruleArea, screen } );
1472 changed_connectable_items.push_back( { item, linked_item, screen } );
1478 std::vector<std::pair<SCH_RULE_AREA*, SCH_SCREEN*>> forceUpdateRuleAreas =
1481 std::for_each( forceUpdateRuleAreas.begin(), forceUpdateRuleAreas.end(),
1482 [&]( std::pair<SCH_RULE_AREA*, SCH_SCREEN*>& updatedRuleArea )
1484 changed_rule_areas.insert( updatedRuleArea );
1489 std::map<KIID, EDA_ITEM*> itemMap;
1490 list.FillItemMap( itemMap );
1492 auto addPastAndPresentContainedItems =
1497 if( itemMap.contains( pastItem ) )
1498 addItemToChangeSet( {
static_cast<SCH_ITEM*
>( itemMap[pastItem] ),
nullptr, screen } );
1502 addItemToChangeSet( { containedItem,
nullptr, screen } );
1505 for(
const auto& [changedRuleArea, screen] : changed_rule_areas )
1506 addPastAndPresentContainedItems( changedRuleArea, screen );
1509 for( CHANGED_ITEM& changed_item_data : changed_connectable_items )
1511 addItemToChangeSet( changed_item_data );
1517 const std::vector<VECTOR2I> labelConnectionPoints =
1518 changed_item_data.item->GetConnectionPoints();
1520 auto candidateRuleAreas =
1522 changed_item_data.item->GetBoundingBox() );
1524 for(
SCH_ITEM* candidateRuleArea : candidateRuleAreas )
1530 addPastAndPresentContainedItems( ruleArea, changed_item_data.screen );
1540 if( !item->IsConnectable() )
1545 if( item->HitTest( pt ) )
1546 changed_items.insert( item );
1548 else if( item->Type() ==
SCH_SYMBOL_T && item->IsConnected( pt ) )
1551 std::vector<SCH_PIN*> pins = symbol->
GetPins();
1553 changed_items.insert( pins.begin(), pins.end() );
1559 wxCHECK2( sheet,
continue );
1561 std::vector<SCH_SHEET_PIN*> sheetPins = sheet->
GetPins();
1562 changed_items.insert( sheetPins.begin(), sheetPins.end() );
1566 if( item->IsConnected( pt ) )
1567 changed_items.insert( item );
1572 std::set<std::pair<SCH_SHEET_PATH, SCH_ITEM*>> all_items =
1575 all_items.insert( item_paths.begin(), item_paths.end() );
1581 std::shared_ptr<NET_SETTINGS> netSettings =
m_project->GetProjectFile().NetSettings();
1583 std::set<wxString> affectedNets;
1585 for(
auto&[
path, item ] : all_items )
1587 wxCHECK2( item,
continue );
1588 item->SetConnectivityDirty();
1592 affectedNets.insert( conn->
Name() );
1596 for(
const wxString& netName : affectedNets )
1597 netSettings->ClearCacheForNet( netName );
1599 new_graph.
Recalculate( list,
false, aChangedItemHandler, aProgressReporter );
1603 if( !localCommit.
Empty() )
1604 localCommit.
Push(
_(
"Schematic Cleanup" ) );
1635 wxArrayString variantNames;
1641 variantNames.Add(
name );
1643 return variantNames;
1650 return wxEmptyString;
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
void SetPageCount(int aPageCount)
void SetPageNumber(const wxString &aPageNumber)
void SetVirtualPageNumber(int aPageNumber)
Represent a set of changes (additions, deletions or modifications) of a data model (e....
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
COMMIT & Removed(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Calculate the connectivity of a schematic and generates netlists.
void Recalculate(const SCH_SHEET_LIST &aSheetList, bool aUnconditional=false, std::function< void(SCH_ITEM *)> *aChangedItemHandler=nullptr, PROGRESS_REPORTER *aProgressReporter=nullptr)
Update the connection graph for the given list of sheets.
std::set< std::pair< SCH_SHEET_PATH, SCH_ITEM * > > ExtractAffectedItems(const std::set< SCH_ITEM * > &aItems)
For a set of items, this will remove the connected items and their associated data including subgraph...
void SetLastCodes(const CONNECTION_GRAPH *aOther)
void Merge(CONNECTION_GRAPH &aGraph)
Combine the input graph contents into the current graph.
A subgraph is a set of items that are electrically connected on a single sheet.
static PRIORITY GetDriverPriority(SCH_ITEM *aDriver)
Return the priority (higher is more important) of a candidate driver.
const SCH_CONNECTION * GetDriverConnection() const
EDA_ITEM_FLAGS GetEditFlags() const
KICAD_T Type() const
Returns the type of object.
EDA_ITEM * GetParent() const
EDA_ITEM_FLAGS GetFlags() const
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
SHAPE_POLY_SET & GetPolyShape()
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
EE_TYPE OfType(KICAD_T aType) const
EMBEDDED_FILE * AddFile(const wxFileName &aName, bool aOverwrite)
Load a file from disk and adds it to the collection.
Container for ERC settings.
std::map< wxString, wxString > m_ErcExclusionComments
std::set< wxString > m_ErcExclusions
Class that other classes need to inherit from, in order to be inspectable.
wxAny Get(PROPERTY_BASE *aProperty) const
FONT is an abstract base class for both outline and stroke fonts.
virtual bool IsStroke() const
Class OUTLINE_FONT implements outline font drawing.
A logical library item identifier and consists of various portions much like a URI.
std::shared_ptr< RC_ITEM > GetRCItem() const
void SetExcluded(bool aExcluded, const wxString &aComment=wxEmptyString)
wxString GetComment() const
static void ConvertToSpiceMarkup(wxString *aNetName)
Remove formatting wrappers and replace illegal spice net name characters with underscores.
A holder to handle information on schematic or board items.
UNDO_REDO GetPickedItemStatus(unsigned int aIdx) const
EDA_ITEM * GetPickedItemLink(unsigned int aIdx) const
unsigned GetCount() const
BASE_SCREEN * GetScreenForItem(unsigned int aIdx) const
EDA_ITEM * GetPickedItem(unsigned int aIdx) const
A small class to help profiling.
void Stop()
Save the time when this function was called, and set the counter stane to stop.
double msecs(bool aSinceLast=false)
A progress reporter interface for use in multi-threaded environments.
The backing store for a PROJECT, in JSON format.
Container for project specific data.
const wxString & Name() const
static PROPERTY_MANAGER & Instance()
void UnregisterListeners(TYPE_ID aType)
void RegisterListener(TYPE_ID aType, PROPERTY_LISTENER aListenerFunc)
Registers a listener for the given type.
wxString GetSettingsKey() const
virtual void OnSchItemsRemoved(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem)
virtual void OnSchItemsChanged(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem)
virtual void OnSchSheetChanged(SCHEMATIC &aSch)
virtual void OnSchItemsAdded(SCHEMATIC &aSch, std::vector< SCH_ITEM * > &aSchItem)
These are loaded from Eeschema settings but then overwritten by the project settings.
bool m_IntersheetRefsShow
void Reset()
Initialize this schematic to a blank one, unloading anything existing.
std::set< const SCH_SCREEN * > GetSchematicsSharedByMultipleProjects() const
Return a list of schematic files in the current project that contain instance data for multiple proje...
void CreateDefaultScreens()
void SetLegacySymbolInstanceData()
Update the symbol value and footprint instance data for legacy designs.
void OnItemsAdded(std::vector< SCH_ITEM * > &aNewItems)
Must be used if Add() is used using a BULK_x ADD_MODE to generate a change event for listeners.
CONNECTION_GRAPH * m_connectionGraph
Hold and calculate connectivity information of this schematic.
void loadBusAliasesFromProject()
SCH_SHEET_LIST m_hierarchy
Cache of the entire schematic hierarchy sorted by sheet page number.
void ResolveERCExclusionsPostUpdate()
Update markers to match recorded exclusions.
void RecomputeIntersheetRefs()
Update the schematic's page reference map for all global labels, and refresh the labels so that they ...
void CacheExistingAnnotation()
Store all existing annotations in the REFDES_TRACKER.
SCH_SHEET_LIST BuildSheetListSortedByPageNumbers() const
void RemoveListener(SCHEMATIC_LISTENER *aListener)
Remove the specified listener.
bool IsComplexHierarchy() const
Test if the schematic is a complex hierarchy.
void OnSchSheetChanged()
Notify the schematic and its listeners that the current sheet has been changed.
wxString GetFileName() const
Helper to retrieve the filename from the root sheet screen.
SCH_SHEET_PATH * m_currentSheet
The sheet path of the sheet currently being edited or displayed.
wxString GetOperatingPoint(const wxString &aNetName, int aPrecision, const wxString &aRange)
void CleanUp(SCH_COMMIT *aCommit, SCH_SCREEN *aScreen=nullptr)
Perform routine schematic cleaning including breaking wire and buses and deleting identical objects s...
void OnItemsRemoved(std::vector< SCH_ITEM * > &aRemovedItems)
Must be used if Remove() is used using a BULK_x REMOVE_MODE to generate a change event for listeners.
std::shared_ptr< BUS_ALIAS > GetBusAlias(const wxString &aLabel) const
Return a pointer to a bus alias object for the given label, or null if one doesn't exist.
std::vector< SCH_MARKER * > ResolveERCExclusions()
void EmbedFonts() override
Embed fonts in the schematic.
SCHEMATIC_SETTINGS & Settings() const
SCH_SCREEN * GetCurrentScreen() const
wxString ConvertKIIDsToRefs(const wxString &aSource) const
SCH_ITEM * ResolveItem(const KIID &aID, SCH_SHEET_PATH *aPathOut=nullptr, bool aAllowNullptrReturn=false) const
void RecordERCExclusions()
Scan existing markers and record data from any that are Excluded.
SCH_SHEET_LIST Hierarchy() const
Return the full schematic flattened hierarchical sheet list.
wxString m_currentVariant
std::map< wxString, std::set< int > > & GetPageRefsMap()
void DeleteVariant(const wxString &aVariantName)
Delete all information for aVariantName.
void FixupJunctionsAfterImport()
Add junctions to this schematic where required.
std::set< KIFONT::OUTLINE_FONT * > GetFonts() const override
Get a set of fonts used in the schematic.
bool Contains(const SCH_REFERENCE &aRef) const
Check if the schematic contains the specified reference.
wxString ConvertRefsToKIIDs(const wxString &aSource) const
void SetRoot(SCH_SHEET *aRootSheet)
Initialize the schematic with a new root sheet.
void SetProject(PROJECT *aPrj)
wxString GetCurrentVariant() const
Return the current variant being edited.
void AddListener(SCHEMATIC_LISTENER *aListener)
Add a listener to the schematic to receive calls whenever something on the schematic has been modifie...
std::map< int, wxString > GetVirtualPageToSheetPagesMap() const
EMBEDDED_FILES * GetEmbeddedFiles() override
CONNECTION_GRAPH * ConnectionGraph() const
SCH_SCREEN * RootScreen() const
Helper to retrieve the screen of the root sheet.
bool ResolveTextVar(const SCH_SHEET_PATH *aSheetPath, wxString *token, int aDepth) const
std::set< wxString > GetNetClassAssignmentCandidates()
Return the set of netname candidates for netclass assignment.
std::vector< std::shared_ptr< BUS_ALIAS > > m_busAliases
void InvokeListeners(Func &&aFunc, Args &&... args)
bool IsValid() const
A simple test if the schematic is loaded, not a complete one.
void updateProjectBusAliases()
static bool m_IsSchematicExists
True if a SCHEMATIC exists, false if not.
void RemoveAllListeners()
Remove all listeners.
void GetContextualTextVars(wxArrayString *aVars) const
std::map< int, wxString > GetVirtualPageToSheetNamesMap() const
void AddBusAlias(std::shared_ptr< BUS_ALIAS > aAlias)
wxArrayString GetVariantNamesForUI() const
Return an array of variant names for using in wxWidgets UI controls.
void RunOnNestedEmbeddedFiles(const std::function< void(EMBEDDED_FILES *)> &aFunction) override
Provide access to nested embedded files, such as symbols in schematics and footprints in boards.
SCHEMATIC_HOLDER * m_schematicHolder
What currently "Holds" the schematic, i.e.
wxString GetUniqueFilenameForCurrentSheet()
Get the unique file name for the current sheet.
void SetSheetNumberAndCount()
Set the m_ScreenNumber and m_NumberOfScreens members for screens.
void SetBusAliases(const std::vector< std::shared_ptr< BUS_ALIAS > > &aAliases)
std::vector< SCHEMATIC_LISTENER * > m_listeners
Currently installed listeners.
SCH_SHEET_PATH & CurrentSheet() const
bool ResolveCrossReference(wxString *token, int aDepth) const
Resolves text vars that refer to other items.
void RecalculateConnections(SCH_COMMIT *aCommit, SCH_CLEANUP_FLAGS aCleanupFlags, TOOL_MANAGER *aToolManager, PROGRESS_REPORTER *aProgressReporter=nullptr, KIGFX::SCH_VIEW *aSchView=nullptr, std::function< void(SCH_ITEM *)> *aChangedItemHandler=nullptr, PICKED_ITEMS_LIST *aLastChangeList=nullptr)
Generate the connection data for the entire schematic hierarchy.
std::map< wxString, double > m_operatingPoints
Simulation operating points for text variable substitution.
ERC_SETTINGS & ErcSettings() const
std::set< wxString > m_variantNames
void OnItemsChanged(std::vector< SCH_ITEM * > &aItems)
Notify the schematic and its listeners that an item on the schematic has been modified in some way.
SCH_SHEET * m_rootSheet
The top-level sheet in this schematic hierarchy (or potentially the only one)
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Execute the changes.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
wxString Name(bool aIgnoreSheet=false) const
Base class for any item which can be embedded within the SCHEMATIC container class,...
virtual bool IsConnectable() const
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
VECTOR2I GetPosition() const override
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const override
Segment description base class to describe items which have 2 end points (track, wire,...
SCH_LINE * NonGroupAware_BreakAt(const VECTOR2I &aPoint)
This version should only be used when importing files.
bool IsParallel(const SCH_LINE *aLine) const
VECTOR2I GetEndPoint() const
VECTOR2I GetStartPoint() const
SCH_LINE * MergeOverlap(SCH_SCREEN *aScreen, SCH_LINE *aLine, bool aCheckJunctions)
Check line against aLine to see if it overlaps and merge if it does.
bool IsStrokeEquivalent(const SCH_LINE *aLine)
bool IsEndPoint(const VECTOR2I &aPoint) const override
Test if aPt is an end point of this schematic object.
static SCH_MARKER * DeserializeFromString(const SCH_SHEET_LIST &aSheetList, const wxString &data)
wxString SerializeToString() const
bool IsLegacyMarker() const
Determine if this marker is legacy (i.e.
VECTOR2I GetPosition() const override
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
A helper to define a symbol's reference designator in a schematic.
virtual std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const override
Make a set of SHAPE objects representing the EDA_SHAPE.
const std::unordered_set< SCH_ITEM * > & GetContainedItems() const
Return a set of all items contained within the rule area.
static std::vector< std::pair< SCH_RULE_AREA *, SCH_SCREEN * > > UpdateRuleAreasInScreens(std::unordered_set< SCH_SCREEN * > &screens, KIGFX::SCH_VIEW *view)
Update all rule area connectvity / caches in the given sheet paths.
const std::unordered_set< KIID > & GetPastContainedItems() const
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
void DeleteVariant(const wxString &aVariantName)
std::set< wxString > GetVariantNames() const
void SetLegacySymbolInstanceData()
Update the symbol value and footprint instance data for legacy designs.
void Append(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
bool IsExplicitJunction(const VECTOR2I &aPosition) const
Indicate that a junction dot is necessary at the given location.
EE_RTREE & Items()
Get the full RTree, usually for iterating.
const KIID & GetUuid() const
void SetFileName(const wxString &aFileName)
Set the file name for this screen to aFileName.
const TITLE_BLOCK & GetTitleBlock() const
void Update(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Update aItem's bounding box in the tree.
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
std::optional< SCH_SHEET_PATH > GetSheetPathByKIIDPath(const KIID_PATH &aPath, bool aIncludeLastSheet=true) const
Finds a SCH_SHEET_PATH that matches the provided KIID_PATH.
SCH_ITEM * ResolveItem(const KIID &aID, SCH_SHEET_PATH *aPathOut=nullptr, bool aAllowNullptrReturn=false) const
Fetch a SCH_ITEM by ID.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
bool HasPath(const KIID_PATH &aPath) const
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
wxString PathHumanReadable(bool aUseShortRootName=true, bool aStripTrailingSeparator=false) const
Return the sheet path in a human readable form made from the sheet names.
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
SCH_SCREEN * LastScreen()
wxString GetPageNumber() const
SCH_SHEET * at(size_t aIndex) const
Forwarded method from std::vector.
void SetVirtualPageNumber(int aPageNumber)
Set the sheet instance virtual page number.
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
size_t size() const
Forwarded method from std::vector.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
int CountSheets() const
Count the number of sheets found in "this" sheet including all of the subsheets.
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
std::vector< SCH_SHEET_PIN * > & GetPins()
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the sheet.
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the symbol.
std::vector< SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
const LIB_ID & GetLibId() const override
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
bool CollideEdge(const VECTOR2I &aPoint, VERTEX_INDEX *aClosestVertex=nullptr, int aClearance=0) const
Check whether aPoint collides with any edge of any of the contours of the polygon.
Helper class to recognize Spice formatted values.
wxString ToString() const
Return string value as when converting double to string (e.g.
bool TextVarResolver(wxString *aToken, const PROJECT *aProject, int aFlags=0) const
static void GetContextualTextVars(wxArrayString *aVars)
static bool empty(const wxTextEntryBase *aCtrl)
#define STRUCT_DELETED
flag indication structures to be erased
void ignore_unused(const T &)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
void for_all_pairs(_InputIterator __first, _InputIterator __last, _Function __f)
Apply a function to every possible pair of elements of a sequence.
void CollectOtherUnits(const wxString &aRef, int aUnit, const LIB_ID &aLibId, SCH_SHEET_PATH &aSheet, std::vector< SCH_SYMBOL * > *otherUnits)
wxString GetDefaultVariantName()
A simple container for schematic symbol instance information.
@ FOOTPRINT
Field Name Module PCB, i.e. "16DIP300".
@ DATASHEET
name of datasheet
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
VECTOR2< int32_t > VECTOR2I