Added a ImportSpecctraSession overload that doesn't require a PCB_EDIT_FRAME

This commit is contained in:
snhobbs 2023-11-20 03:06:27 +00:00 committed by Seth Hillbrand
parent d620cb8a6e
commit 5cf244dd90
5 changed files with 63 additions and 26 deletions

View File

@ -359,7 +359,7 @@ bool ExportSpecctraDSN( BOARD* aBoard, wxString& aFullFilename )
{
try
{
ExportBoardToSpecctraFile( aBoard, aFullFilename );
DSN::ExportBoardToSpecctraFile( aBoard, aFullFilename );
}
catch( ... )
{
@ -399,6 +399,20 @@ bool ImportSpecctraSES( wxString& aFullFilename )
}
}
bool ImportSpecctraSES( BOARD* aBoard, wxString& aFullFilename )
{
try
{
DSN::ImportSpecctraSession( aBoard, aFullFilename );
}
catch( ... )
{
return false;
}
return true;
}
bool ExportFootprintsToLibrary( bool aStoreInNewLib, const wxString& aLibName, wxString* aLibPath )
{

View File

@ -137,6 +137,17 @@ bool ExportVRML( const wxString& aFullFileName, double aMMtoWRMLunit, bool aExpo
*/
bool ImportSpecctraSES( wxString& aFullFilename );
/**
* Import a specctra *.ses file and use it to relocate MODULEs and to replace all vias and
* Unlike first overload doesn't need a valid PCB_EDIT_FRAME set and can be used
* in a standalone python script.
*
* See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the specification.
*
* @return true if OK
*/
bool ImportSpecctraSES( BOARD* aBoard, wxString& aFullFilename );
/**
* Save footprints in a library:
*

View File

@ -48,15 +48,6 @@ class SHAPE_POLY_SET;
typedef DSN::T DSN_T;
/**
* @brief Helper method to export board to DSN file
*
* @param aBoard board object
* @param aFullFilename specctra file name
*/
void ExportBoardToSpecctraFile( BOARD* aBoard, const wxString& aFullFilename );
/**
* This source file implements export and import capabilities to the
* specctra dsn file format. The grammar for that file format is documented
@ -85,6 +76,14 @@ namespace DSN {
class SPECCTRA_DB;
/**
* @brief Helper method to export board to DSN file
* @param aBoard board object
* @param aFullFilename specctra file name
*/
void ExportBoardToSpecctraFile( BOARD* aBoard, const wxString& aFullFilename );
/**
* The DSN namespace and returns the C string representing a SPECCTRA_DB::keyword.
*
@ -4003,6 +4002,14 @@ private:
int m_bot_via_layer;
};
/**
* @brief Helper method to import SES file to a board
*
* @param aBoard board object
* @param aFullFilename specctra file name
*/
bool ImportSpecctraSession( BOARD* aBoard, const wxString& fullFileName );
} // namespace DSN

View File

@ -79,7 +79,7 @@ bool PCB_EDIT_FRAME::ExportSpecctraFile( const wxString& aFullFilename )
try
{
ExportBoardToSpecctraFile( GetBoard(), aFullFilename );
DSN::ExportBoardToSpecctraFile( GetBoard(), aFullFilename );
}
catch( const IO_ERROR& ioe )
{
@ -102,6 +102,9 @@ bool PCB_EDIT_FRAME::ExportSpecctraFile( const wxString& aFullFilename )
return ok;
}
namespace DSN
{
void ExportBoardToSpecctraFile( BOARD* aBoard, const wxString& aFullFilename )
{
@ -138,8 +141,6 @@ void ExportBoardToSpecctraFile( BOARD* aBoard, const wxString& aFullFilename )
}
namespace DSN {
// "specctra reported units" are what we tell the external router that our exported lengths are in
/**
@ -1836,4 +1837,4 @@ void SPECCTRA_DB::RevertFOOTPRINTs( BOARD* aBoard )
m_footprintsAreFlipped = false;
}
} // namespace DSN
} // namespace DSN

View File

@ -50,28 +50,23 @@
using namespace DSN;
bool PCB_EDIT_FRAME::ImportSpecctraSession( const wxString& fullFileName )
{
// To avoid issues with undo/redo lists (dangling pointers) clear the lists
// todo: use undo/redo feature
ClearUndoRedoList();
// Remove existing tracks from view. They will be readded later after loading new tracks.
if( GetCanvas() ) // clear view:
{
for( PCB_TRACK* track : GetBoard()->Tracks() )
GetCanvas()->GetView()->Remove( track );
}
SPECCTRA_DB db;
LOCALE_IO toggle;
try
{
db.LoadSESSION( fullFileName );
db.FromSESSION( GetBoard() );
DSN::ImportSpecctraSession( GetBoard(), fullFileName );
}
catch( const IO_ERROR& ioe )
{
wxString msg = _( "Board may be corrupted, do not save it.\n Fix problem and try again" );
@ -82,20 +77,16 @@ bool PCB_EDIT_FRAME::ImportSpecctraSession( const wxString& fullFileName )
return false;
}
GetBoard()->GetConnectivity()->ClearRatsnest();
GetBoard()->BuildConnectivity();
OnModify();
if( GetCanvas() ) // Update view:
{
// Update footprint positions
GetCanvas()->GetView()->RecacheAllItems();
// add imported tracks (previous tracks are removed, therefore all are new)
for( auto track : GetBoard()->Tracks() )
GetCanvas()->GetView()->Add( track );
}
}
SetStatusText( wxString( _( "Session file imported and merged OK." ) ) );
@ -545,4 +536,17 @@ void SPECCTRA_DB::FromSESSION( BOARD* aBoard )
}
bool ImportSpecctraSession( BOARD* aBoard, const wxString& fullFileName )
{
SPECCTRA_DB db;
LOCALE_IO toggle;
db.LoadSESSION( fullFileName );
db.FromSESSION( aBoard );
aBoard->GetConnectivity()->ClearRatsnest();
aBoard->BuildConnectivity();
return true;
}
} // namespace DSN