void DIALOG_PLOT_SCHEMATIC::createHPGLFile( bool aPlotAll, bool aPlotFrameRef ) { wxString plotFileName; SCH_SCREEN* screen = m_parent->GetScreen(); SCH_SHEET_PATH* sheetpath; SCH_SHEET_PATH oldsheetpath = m_parent->GetCurrentSheet(); /* When printing all pages, the printed page is not the current page. * In complex hierarchies, we must setup references and other parameters * in the printed SCH_SCREEN * because in complex hierarchies a SCH_SCREEN (a schematic drawings) * is shared between many sheets */ SCH_SHEET_LIST SheetList( NULL ); sheetpath = SheetList.GetFirst(); SCH_SHEET_PATH list; SetHPGLPenWidth(); while( true ) { if( aPlotAll ) { if( sheetpath == NULL ) break; list.Clear(); if( list.BuildSheetPathInfoFromSheetPathValue( sheetpath->Path() ) ) { m_parent->SetCurrentSheet( list ); m_parent->GetCurrentSheet().UpdateAllScreenReferences(); m_parent->SetSheetNumberAndCount(); screen = m_parent->GetCurrentSheet().LastScreen(); if( !screen ) // LastScreen() may return NULL screen = m_parent->GetScreen(); } else // Should not happen return; sheetpath = SheetList.GetNext(); } const PAGE_INFO& curPage = screen->GetPageSettings(); PAGE_INFO plotPage = curPage; // if plotting on a page size other than curPage if( m_HPGLPaperSizeOption->GetSelection() != PAGE_DEFAULT ) plotPage.SetType( plot_sheet_list( m_HPGLPaperSizeOption->GetSelection() ) ); // Calculation of conversion scales. double plot_scale = (double) plotPage.GetWidthMils() / curPage.GetWidthMils(); // Calculate offsets wxPoint plotOffset; if( GetPlotOriginCenter() ) { plotOffset.x = plotPage.GetWidthIU() / 2; plotOffset.y = -plotPage.GetHeightIU() / 2; } plotFileName = m_parent->GetUniqueFilenameForCurrentSheet() + wxT( "." ) + HPGL_PLOTTER::GetDefaultFileExtension(); plotFileName = Prj().AbsolutePath( plotFileName ); LOCALE_IO toggle; wxString msg; if( Plot_1_Page_HPGL( plotFileName, screen, plotPage, plotOffset, plot_scale, aPlotFrameRef ) ) msg.Printf( _( "Plot: <%s> OK\n" ), GetChars( plotFileName ) ); else // Error msg.Printf( _( "Unable to create <%s>\n" ), GetChars( plotFileName ) ); m_MessagesBox->AppendText( msg ); if( !aPlotAll ) break; } m_parent->SetCurrentSheet( oldsheetpath ); m_parent->GetCurrentSheet().UpdateAllScreenReferences(); m_parent->SetSheetNumberAndCount(); }
void DIALOG_PLOT_SCHEMATIC::CreateDXFFile( bool aPlotAll, bool aPlotFrameRef ) { SCH_EDIT_FRAME* schframe = (SCH_EDIT_FRAME*) m_parent; SCH_SCREEN* screen = schframe->GetScreen(); SCH_SHEET_PATH* sheetpath; SCH_SHEET_PATH oldsheetpath = schframe->GetCurrentSheet(); wxString plotFileName; /* When printing all pages, the printed page is not the current page. * In complex hierarchies, we must setup references and others parameters * in the printed SCH_SCREEN * because in complex hierarchies a SCH_SCREEN (a schematic drawings) * is shared between many sheets */ SCH_SHEET_LIST SheetList( NULL ); sheetpath = SheetList.GetFirst(); SCH_SHEET_PATH list; while( true ) { if( aPlotAll ) { if( sheetpath == NULL ) break; list.Clear(); if( list.BuildSheetPathInfoFromSheetPathValue( sheetpath->Path() ) ) { schframe->SetCurrentSheet( list ); schframe->GetCurrentSheet().UpdateAllScreenReferences(); schframe->SetSheetNumberAndCount(); screen = schframe->GetCurrentSheet().LastScreen(); } else // Should not happen { return; } sheetpath = SheetList.GetNext(); } wxPoint plot_offset; plotFileName = schframe->GetUniqueFilenameForCurrentSheet() + wxT(".") + DXF_PLOTTER::GetDefaultFileExtension(); wxString msg; if( PlotOneSheetDXF( plotFileName, screen, plot_offset, 1.0, aPlotFrameRef ) ) msg.Printf( _( "Plot: <%s> OK\n" ), GetChars( plotFileName ) ); else // Error msg.Printf( _( "Unable to create <%s>\n" ), GetChars( plotFileName ) ); m_MessagesBox->AppendText( msg ); if( !aPlotAll ) break; } schframe->SetCurrentSheet( oldsheetpath ); schframe->GetCurrentSheet().UpdateAllScreenReferences(); schframe->SetSheetNumberAndCount(); }