52 bool aForceDefaultProject,
PROJECT* aProject,
bool aCalculateConnectivity )
55 return LoadSchematic( aFileName, SCH_IO_MGR::SCH_KICAD, aSetActive, aForceDefaultProject,
56 aProject, aCalculateConnectivity );
58 return LoadSchematic( aFileName, SCH_IO_MGR::SCH_LEGACY, aSetActive, aForceDefaultProject,
59 aProject, aCalculateConnectivity );
62 return LoadSchematic( aFileName, SCH_IO_MGR::SCH_LEGACY, aSetActive, aForceDefaultProject, aProject,
63 aCalculateConnectivity );
68 SCH_IO_MGR::SCH_FILE_T aFormat,
70 bool aForceDefaultProject,
72 bool aCalculateConnectivity )
74 wxFileName pro = aFileName;
77 wxString projectPath = pro.GetFullPath();
91 if( !aForceDefaultProject )
95 if( wxFileExists( projectPath ) )
109 if( !
project || aForceDefaultProject )
114 std::unique_ptr<SCHEMATIC> schematic = std::make_unique<SCHEMATIC>(
project );
115 schematic->CreateDefaultScreens();
117 wxFileName schFile = aFileName;
118 schFile.MakeAbsolute();
122 SCH_SHEET* rootSheet = pi->LoadSchematicFile( schFile.GetFullPath(), schematic.get() );
126 schematic->SetProject(
nullptr );
130 std::vector<SCH_SHEET*> topLevelSheets = schematic->GetTopLevelSheets();
131 bool rootIsTopLevel = std::find( topLevelSheets.begin(), topLevelSheets.end(), rootSheet )
132 != topLevelSheets.end();
133 bool rootIsVirtualRoot = rootSheet == &schematic->Root() || rootSheet->
IsVirtualRootSheet();
135 if( !rootIsTopLevel && !rootIsVirtualRoot )
136 schematic->SetTopLevelSheets( { rootSheet } );
141 if( rootSheet->
GetName().IsEmpty() )
143 wxString rootName =
_(
"Root" );
147 wxFileName candidate(
project->GetProjectPath(),
info.filename );
149 if( candidate.SameAs( schFile ) && !
info.name.IsEmpty() )
151 rootName =
info.name;
156 rootSheet->
SetName( rootName );
161 schematic->SetProject(
nullptr );
165 SCH_SHEET_LIST sheetList = schematic->BuildSheetListSortedByPageNumbers();
169 screen->UpdateLocalLibSymbolLinks();
171 if( schematic->RootScreen()->GetFileFormatVersionAtLoad() < 20221002 )
176 if( schematic->RootScreen()->GetFileFormatVersionAtLoad() < 20230221 )
180 screen->MigrateSimModels();
182 schematic->LoadVariants();
184 wxString projectName =
project->GetProjectName();
186 if( projectName.IsEmpty() )
187 projectName = schFile.GetName();
208 if( aCalculateConnectivity
210 schematic->FixupJunctionsAfterImport();
212 schematic->ConnectionGraph()->Reset();
215 toolManager->
SetEnvironment( schematic.get(),
nullptr,
nullptr,
Kiface().KifaceSettings(),
nullptr );
217 if( aCalculateConnectivity )
220 schematic->RecalculateConnections( &dummyCommit,
GLOBAL_CLEANUP, toolManager );
223 schematic->ResolveERCExclusionsPostUpdate();
225 schematic->SetSheetNumberAndCount();
226 schematic->RecomputeIntersheetRefs();
230 sheet.UpdateAllScreenReferences();
231 sheet.LastScreen()->TestDanglingEnds(
nullptr,
nullptr );
234 if( aCalculateConnectivity )
235 schematic->ConnectionGraph()->Recalculate( sheetList,
true );
237 return schematic.release();
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.