51 bool aForceDefaultProject,
PROJECT* aProject,
bool aCalculateConnectivity )
54 return LoadSchematic( aFileName, SCH_IO_MGR::SCH_KICAD, aSetActive, aForceDefaultProject,
55 aProject, aCalculateConnectivity );
57 return LoadSchematic( aFileName, SCH_IO_MGR::SCH_LEGACY, aSetActive, aForceDefaultProject,
58 aProject, aCalculateConnectivity );
61 return LoadSchematic( aFileName, SCH_IO_MGR::SCH_LEGACY, aSetActive, aForceDefaultProject, aProject,
62 aCalculateConnectivity );
67 SCH_IO_MGR::SCH_FILE_T aFormat,
69 bool aForceDefaultProject,
71 bool aCalculateConnectivity )
73 wxFileName pro = aFileName;
76 wxString projectPath = pro.GetFullPath();
90 if( !aForceDefaultProject )
94 if( wxFileExists( projectPath ) )
108 if( !
project || aForceDefaultProject )
113 std::unique_ptr<SCHEMATIC> schematic = std::make_unique<SCHEMATIC>(
project );
114 schematic->CreateDefaultScreens();
116 wxFileName schFile = aFileName;
117 schFile.MakeAbsolute();
121 SCH_SHEET* rootSheet = pi->LoadSchematicFile( schFile.GetFullPath(), schematic.get() );
125 schematic->SetProject(
nullptr );
129 std::vector<SCH_SHEET*> topLevelSheets = schematic->GetTopLevelSheets();
130 bool rootIsTopLevel = std::find( topLevelSheets.begin(), topLevelSheets.end(), rootSheet )
131 != topLevelSheets.end();
132 bool rootIsVirtualRoot = rootSheet == &schematic->Root() || rootSheet->
IsVirtualRootSheet();
134 if( !rootIsTopLevel && !rootIsVirtualRoot )
135 schematic->SetTopLevelSheets( { rootSheet } );
140 if( rootSheet->
GetName().IsEmpty() )
142 wxString rootName =
_(
"Root" );
146 wxFileName candidate(
project->GetProjectPath(),
info.filename );
148 if( candidate.SameAs( schFile ) && !
info.name.IsEmpty() )
150 rootName =
info.name;
155 rootSheet->
SetName( rootName );
160 schematic->SetProject(
nullptr );
164 SCH_SHEET_LIST sheetList = schematic->BuildSheetListSortedByPageNumbers();
168 screen->UpdateLocalLibSymbolLinks();
170 if( schematic->RootScreen()->GetFileFormatVersionAtLoad() < 20221002 )
175 if( schematic->RootScreen()->GetFileFormatVersionAtLoad() < 20230221 )
179 screen->MigrateSimModels();
181 schematic->LoadVariants();
183 wxString projectName =
project->GetProjectName();
185 if( projectName.IsEmpty() )
186 projectName = schFile.GetName();
196 schematic->ConnectionGraph()->Reset();
199 toolManager->
SetEnvironment( schematic.get(),
nullptr,
nullptr,
Kiface().KifaceSettings(),
nullptr );
201 if( aCalculateConnectivity )
204 schematic->RecalculateConnections( &dummyCommit,
GLOBAL_CLEANUP, toolManager );
207 schematic->ResolveERCExclusionsPostUpdate();
209 schematic->SetSheetNumberAndCount();
210 schematic->RecomputeIntersheetRefs();
214 sheet.UpdateAllScreenReferences();
215 sheet.LastScreen()->TestDanglingEnds(
nullptr,
nullptr );
218 if( aCalculateConnectivity )
219 schematic->ConnectionGraph()->Recalculate( sheetList,
true );
221 return schematic.release();
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.