Move FixupJunctions to SCHEMATIC
This commit is contained in:
parent
c4bde9c7e8
commit
d063eb431b
|
@ -102,7 +102,6 @@ static std::unique_ptr<SCHEMATIC> readSchematicFromFile( const std::string& aFil
|
||||||
sheets.AnnotatePowerSymbols();
|
sheets.AnnotatePowerSymbols();
|
||||||
|
|
||||||
// NOTE: This is required for multi-unit symbols to be correct
|
// NOTE: This is required for multi-unit symbols to be correct
|
||||||
// Normally called from SCH_EDIT_FRAME::FixupJunctions() but could be refactored
|
|
||||||
for( SCH_SHEET_PATH& sheet : sheets )
|
for( SCH_SHEET_PATH& sheet : sheets )
|
||||||
sheet.UpdateAllScreenReferences();
|
sheet.UpdateAllScreenReferences();
|
||||||
|
|
||||||
|
|
|
@ -487,12 +487,16 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
|
||||||
RecomputeIntersheetRefs();
|
RecomputeIntersheetRefs();
|
||||||
GetCurrentSheet().UpdateAllScreenReferences();
|
GetCurrentSheet().UpdateAllScreenReferences();
|
||||||
|
|
||||||
// re-create junctions if needed. Eeschema optimizes wires by merging
|
// Re-create junctions if needed. Eeschema optimizes wires by merging
|
||||||
// colinear segments. If a schematic is saved without a valid
|
// colinear segments. If a schematic is saved without a valid
|
||||||
// cache library or missing installed libraries, this can cause connectivity errors
|
// cache library or missing installed libraries, this can cause connectivity errors
|
||||||
// unless junctions are added.
|
// unless junctions are added.
|
||||||
|
//
|
||||||
|
// TODO: (RFB) This really needs to be put inside the Load() function of the SCH_LEGACY_PLUGIN
|
||||||
|
// I can't put it right now because of the extra code that is above to convert legacy bus-bus
|
||||||
|
// entries to bus wires
|
||||||
if( schFileType == SCH_IO_MGR::SCH_LEGACY )
|
if( schFileType == SCH_IO_MGR::SCH_LEGACY )
|
||||||
FixupJunctions();
|
Schematic().FixupJunctions();
|
||||||
|
|
||||||
SyncView();
|
SyncView();
|
||||||
GetScreen()->ClearDrawingState();
|
GetScreen()->ClearDrawingState();
|
||||||
|
@ -1254,13 +1258,6 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
|
||||||
GetScreen()->SetFileName( newfilename.GetFullPath() );
|
GetScreen()->SetFileName( newfilename.GetFullPath() );
|
||||||
GetScreen()->SetContentModified();
|
GetScreen()->SetContentModified();
|
||||||
|
|
||||||
// Only fix junctions for CADSTAR importer for now as it may cause issues with
|
|
||||||
// other importers
|
|
||||||
if( fileType == SCH_IO_MGR::SCH_CADSTAR_ARCHIVE )
|
|
||||||
{
|
|
||||||
FixupJunctions();
|
|
||||||
}
|
|
||||||
|
|
||||||
RecalculateConnections( GLOBAL_CLEANUP );
|
RecalculateConnections( GLOBAL_CLEANUP );
|
||||||
|
|
||||||
// Only perform the dangling end test on root sheet.
|
// Only perform the dangling end test on root sheet.
|
||||||
|
|
|
@ -1651,42 +1651,6 @@ const BOX2I SCH_EDIT_FRAME::GetDocumentExtents( bool aIncludeAllVisible ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_EDIT_FRAME::FixupJunctions()
|
|
||||||
{
|
|
||||||
// Save the current sheet, to retrieve it later
|
|
||||||
SCH_SHEET_PATH oldsheetpath = GetCurrentSheet();
|
|
||||||
|
|
||||||
SCH_SHEET_LIST sheetList = Schematic().GetSheets();
|
|
||||||
|
|
||||||
for( const SCH_SHEET_PATH& sheet : sheetList )
|
|
||||||
{
|
|
||||||
size_t num_undos = m_undoList.m_CommandsList.size();
|
|
||||||
|
|
||||||
SetCurrentSheet( sheet );
|
|
||||||
GetCurrentSheet().UpdateAllScreenReferences();
|
|
||||||
|
|
||||||
SCH_SCREEN* screen = GetCurrentSheet().LastScreen();
|
|
||||||
|
|
||||||
EE_SELECTION allItems;
|
|
||||||
|
|
||||||
for( auto item : screen->Items() )
|
|
||||||
allItems.Add( item );
|
|
||||||
|
|
||||||
m_toolManager->GetTool<SCH_LINE_WIRE_BUS_TOOL>()->AddJunctionsIfNeeded( &allItems );
|
|
||||||
|
|
||||||
// Check if we modified anything during this routine
|
|
||||||
// Needs to happen for every sheet to set the proper modified flag
|
|
||||||
if( m_undoList.m_CommandsList.size() > num_undos )
|
|
||||||
OnModify();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reselect the initial sheet:
|
|
||||||
SetCurrentSheet( oldsheetpath );
|
|
||||||
GetCurrentSheet().UpdateAllScreenReferences();
|
|
||||||
SetScreen( GetCurrentSheet().LastScreen() );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool SCH_EDIT_FRAME::IsContentModified() const
|
bool SCH_EDIT_FRAME::IsContentModified() const
|
||||||
{
|
{
|
||||||
return Schematic().GetSheets().IsModified();
|
return Schematic().GetSheets().IsModified();
|
||||||
|
|
|
@ -770,8 +770,6 @@ public:
|
||||||
|
|
||||||
const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const override;
|
const BOX2I GetDocumentExtents( bool aIncludeAllVisible = true ) const override;
|
||||||
|
|
||||||
void FixupJunctions();
|
|
||||||
|
|
||||||
int GetSchematicJunctionSize();
|
int GetSchematicJunctionSize();
|
||||||
|
|
||||||
void FocusOnItem( SCH_ITEM* aItem );
|
void FocusOnItem( SCH_ITEM* aItem );
|
||||||
|
|
|
@ -140,6 +140,9 @@ SCH_SHEET* CADSTAR_SCH_ARCHIVE_PLUGIN::Load( const wxString& aFileName, SCHEMATI
|
||||||
|
|
||||||
sch_plugin->SaveLibrary( libFileName.GetFullPath() );
|
sch_plugin->SaveLibrary( libFileName.GetFullPath() );
|
||||||
|
|
||||||
|
// Need to fix up junctions after import to retain connectivity
|
||||||
|
aSchematic->FixupJunctions();
|
||||||
|
|
||||||
return rootSheet;
|
return rootSheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#include <project/project_file.h>
|
#include <project/project_file.h>
|
||||||
#include <project/net_settings.h>
|
#include <project/net_settings.h>
|
||||||
#include <schematic.h>
|
#include <schematic.h>
|
||||||
|
#include <sch_junction.h>
|
||||||
|
#include <sch_line.h>
|
||||||
#include <sch_screen.h>
|
#include <sch_screen.h>
|
||||||
#include <sim/spice_settings.h>
|
#include <sim/spice_settings.h>
|
||||||
#include <sch_label.h>
|
#include <sch_label.h>
|
||||||
|
@ -558,4 +560,32 @@ void SCHEMATIC::RecomputeIntersheetRefs( const std::function<void( SCH_GLOBALLAB
|
||||||
aItemCallback( globalLabel );
|
aItemCallback( globalLabel );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SCHEMATIC::FixupJunctions()
|
||||||
|
{
|
||||||
|
for( const SCH_SHEET_PATH& sheet : GetSheets() )
|
||||||
|
{
|
||||||
|
SCH_SCREEN* screen = sheet.LastScreen();
|
||||||
|
|
||||||
|
std::deque<EDA_ITEM*> allItems;
|
||||||
|
|
||||||
|
for( auto item : screen->Items() )
|
||||||
|
allItems.push_back( item );
|
||||||
|
|
||||||
|
// Add missing junctions and breakup wires as needed
|
||||||
|
for( const VECTOR2I& point : screen->GetNeededJunctions( allItems ) )
|
||||||
|
{
|
||||||
|
SCH_JUNCTION* junction = new SCH_JUNCTION( point );
|
||||||
|
screen->Append( junction );
|
||||||
|
|
||||||
|
// Breakup wires
|
||||||
|
for( SCH_LINE* wire : screen->GetBusesAndWires( point, true ) )
|
||||||
|
{
|
||||||
|
SCH_LINE* newSegment = wire->BreakAt( point );
|
||||||
|
screen->Append( newSegment );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -202,6 +202,12 @@ public:
|
||||||
*/
|
*/
|
||||||
void RecomputeIntersheetRefs( const std::function<void( SCH_GLOBALLABEL* )>& aItemCallback );
|
void RecomputeIntersheetRefs( const std::function<void( SCH_GLOBALLABEL* )>& aItemCallback );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add junctions to this schematic where required. This function is needed for some plugins
|
||||||
|
* (e.g. Legacy and Cadstar) in order to retain connectivity after loading.
|
||||||
|
*/
|
||||||
|
void FixupJunctions();
|
||||||
|
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
void Show( int nestLevel, std::ostream& os ) const override {}
|
void Show( int nestLevel, std::ostream& os ) const override {}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -107,7 +107,6 @@ void KI_TEST::SCHEMATIC_TEST_FIXTURE::LoadSchematic( const wxString& aBaseName )
|
||||||
sheets.AnnotatePowerSymbols();
|
sheets.AnnotatePowerSymbols();
|
||||||
|
|
||||||
// NOTE: This is required for multi-unit symbols to be correct
|
// NOTE: This is required for multi-unit symbols to be correct
|
||||||
// Normally called from SCH_EDIT_FRAME::FixupJunctions() but could be refactored
|
|
||||||
for( SCH_SHEET_PATH& sheet : sheets )
|
for( SCH_SHEET_PATH& sheet : sheets )
|
||||||
sheet.UpdateAllScreenReferences();
|
sheet.UpdateAllScreenReferences();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue