bool DIALOG_GEN_MODULE_POSITION::CreateFiles() { BOARD * brd = m_parent->GetBoard(); wxFileName fn; wxString msg; bool singleFile = OneFileOnly(); int fullcount = 0; // Count the footprints to place, do not yet create a file int fpcount = m_parent->DoGenFootprintsPositionFile( wxEmptyString, UnitsMM(), ForceAllSmd(), 2 ); if( fpcount == 0) { wxMessageBox( _( "No modules for automated placement." ) ); return false; } // Create output directory if it does not exist (also transform it in // absolute form). Bail if it fails wxFileName outputDir = wxFileName::DirName( m_plotOpts.GetOutputDirectory() ); wxString boardFilename = m_parent->GetBoard()->GetFileName(); m_reporter = &m_messagesPanel->Reporter(); if( !EnsureFileDirectoryExists( &outputDir, boardFilename, m_reporter ) ) { msg.Printf( _( "Could not write plot files to folder \"%s\"." ), GetChars( outputDir.GetPath() ) ); DisplayError( this, msg ); return false; } fn = m_parent->GetBoard()->GetFileName(); fn.SetPath( outputDir.GetPath() ); // Create the the Front or Top side placement file, // or the single file int side = 1; if( singleFile ) { side = 2; fn.SetName( fn.GetName() + wxT( "-" ) + wxT("all") ); } else fn.SetName( fn.GetName() + wxT( "-" ) + frontSideName ); fn.SetExt( FootprintPlaceFileExtension ); fpcount = m_parent->DoGenFootprintsPositionFile( fn.GetFullPath(), UnitsMM(), ForceAllSmd(), side ); if( fpcount < 0 ) { msg.Printf( _( "Unable to create '%s'." ), GetChars( fn.GetFullPath() ) ); wxMessageBox( msg ); m_reporter->Report( msg, REPORTER::RPT_ERROR ); return false; } if( singleFile ) msg.Printf( _( "Place file: '%s'." ), GetChars( fn.GetFullPath() ) ); else msg.Printf( _( "Front side (top side) place file: '%s'." ), GetChars( fn.GetFullPath() ) ); m_reporter->Report( msg, REPORTER::RPT_INFO ); msg.Printf( _( "Component count: %d." ), fpcount ); m_reporter->Report( msg, REPORTER::RPT_INFO ); if( singleFile ) { m_reporter->Report( _( "Componment Placement File generation OK." ), REPORTER::RPT_ACTION ); return true; } // Create the Back or Bottom side placement file fullcount = fpcount; side = 0; fn = brd->GetFileName(); fn.SetPath( outputDir.GetPath() ); fn.SetName( fn.GetName() + wxT( "-" ) + backSideName ); fn.SetExt( wxT( "pos" ) ); fpcount = m_parent->DoGenFootprintsPositionFile( fn.GetFullPath(), UnitsMM(), ForceAllSmd(), side ); if( fpcount < 0 ) { msg.Printf( _( "Unable to create file '%s'." ), GetChars( fn.GetFullPath() ) ); m_reporter->Report( msg, REPORTER::RPT_ERROR ); wxMessageBox( msg ); return false; } // Display results if( !singleFile ) { msg.Printf( _( "Back side (bottom side) place file: '%s'." ), GetChars( fn.GetFullPath() ) ); m_reporter->Report( msg, REPORTER::RPT_INFO ); msg.Printf( _( "Component count: %d." ), fpcount ); m_reporter->Report( msg, REPORTER::RPT_INFO ); } if( !singleFile ) { fullcount += fpcount; msg.Printf( _( "Full component count: %d\n" ), fullcount ); m_reporter->Report( msg, REPORTER::RPT_INFO ); } m_reporter->Report( _( "Componment Placement File generation OK." ), REPORTER::RPT_ACTION ); return true; }
bool DIALOG_GEN_MODULE_POSITION::CreateFiles() { BOARD * brd = m_parent->GetBoard(); wxFileName fn; wxString msg; wxString frontLayerName; wxString backLayerName; bool singleFile = OneFileOnly(); int fullcount = 0; // Count the footprints to place, do not yet create a file int fpcount = m_parent->DoGenFootprintsPositionFile( wxEmptyString, UnitsMM(), ForceAllSmd(), 2 ); if( fpcount == 0) { wxMessageBox( _( "No modules for automated placement." ) ); return false; } fn = m_parent->GetBoard()->GetFileName(); fn.SetPath( GetOutputDirectory() ); frontLayerName = brd->GetLayerName( LAYER_N_FRONT ); backLayerName = brd->GetLayerName( LAYER_N_BACK ); // Create the the Front or Top side placement file, // or the single file int side = 1; if( singleFile ) { side = 2; fn.SetName( fn.GetName() + wxT( "-" ) + wxT("all") ); } else fn.SetName( fn.GetName() + wxT( "-" ) + frontLayerName ); fn.SetExt( FootprintPlaceFileExtension ); fpcount = m_parent->DoGenFootprintsPositionFile( fn.GetFullPath(), UnitsMM(), ForceAllSmd(), side ); if( fpcount < 0 ) { msg.Printf( _( "Unable to create <%s>" ), GetChars( fn.GetFullPath() ) ); AddMessage( msg + wxT("\n") ); wxMessageBox( msg ); return false; } if( singleFile ) msg.Printf( _( "Place file: <%s>\n" ), GetChars( fn.GetFullPath() ) ); else msg.Printf( _( "Front side (top side) place file: <%s>\n" ), GetChars( fn.GetFullPath() ) ); AddMessage( msg ); msg.Printf( _( "Footprint count %d\n" ), fpcount ); AddMessage( msg ); if( singleFile ) return true; // Create the Back or Bottom side placement file fullcount = fpcount; side = 0; fn = brd->GetFileName(); fn.SetPath( GetOutputDirectory() ); fn.SetName( fn.GetName() + wxT( "-" ) + backLayerName ); fn.SetExt( wxT( "pos" ) ); fpcount = m_parent->DoGenFootprintsPositionFile( fn.GetFullPath(), UnitsMM(), ForceAllSmd(), side ); if( fpcount < 0 ) { msg.Printf( _( "Unable to create <%s>" ), GetChars( fn.GetFullPath() ) ); AddMessage( msg + wxT("\n") ); wxMessageBox( msg ); return false; } // Display results if( !singleFile ) { msg.Printf( _( "Back side (bottom side) place file: <%s>\n" ), GetChars( fn.GetFullPath() ) ); AddMessage( msg ); msg.Printf( _( "Footprint count %d\n" ), fpcount ); AddMessage( msg ); } if( !singleFile ) { fullcount += fpcount; msg.Printf( _( "Full footprint count %d\n" ), fullcount ); AddMessage( msg ); } return true; }