From aa35045840b78d3f48212db45da59a2e5c69b223 Mon Sep 17 00:00:00 2001 From: saurabhb17 Date: Wed, 26 Feb 2020 15:57:49 +0530 Subject: Added main execs --- eeschema/plot_schematic_HPGL.cpp | 260 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 eeschema/plot_schematic_HPGL.cpp (limited to 'eeschema/plot_schematic_HPGL.cpp') diff --git a/eeschema/plot_schematic_HPGL.cpp b/eeschema/plot_schematic_HPGL.cpp new file mode 100644 index 0000000..9b64ab0 --- /dev/null +++ b/eeschema/plot_schematic_HPGL.cpp @@ -0,0 +1,260 @@ +/** @file plot_schematic_HPGL.cpp + */ + +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2010 Jean-Pierre Charras +#include +#include +#include +#include +#include +#include + +#include +#include + +enum HPGL_PAGEZ_T { + PAGE_DEFAULT = 0, + HPGL_PAGE_SIZE_A4, + HPGL_PAGE_SIZE_A3, + HPGL_PAGE_SIZE_A2, + HPGL_PAGE_SIZE_A1, + HPGL_PAGE_SIZE_A0, + HPGL_PAGE_SIZE_A, + HPGL_PAGE_SIZE_B, + HPGL_PAGE_SIZE_C, + HPGL_PAGE_SIZE_D, + HPGL_PAGE_SIZE_E, +}; + + +static const wxChar* plot_sheet_list( int aSize ) +{ + const wxChar* ret; + + switch( aSize ) + { + default: + case PAGE_DEFAULT: + ret = NULL; break; + + case HPGL_PAGE_SIZE_A4: + ret = wxT( "A4" ); break; + + case HPGL_PAGE_SIZE_A3: + ret = wxT( "A3" ); break; + + case HPGL_PAGE_SIZE_A2: + ret = wxT( "A2" ); break; + + case HPGL_PAGE_SIZE_A1: + ret = wxT( "A1" ); break; + + case HPGL_PAGE_SIZE_A0: + ret = wxT( "A0" ); break; + + case HPGL_PAGE_SIZE_A: + ret = wxT( "A" ); break; + + case HPGL_PAGE_SIZE_B: + ret = wxT( "B" ); break; + + case HPGL_PAGE_SIZE_C: + ret = wxT( "C" ); break; + + case HPGL_PAGE_SIZE_D: + ret = wxT( "D" ); break; + + case HPGL_PAGE_SIZE_E: + ret = wxT( "E" ); break; + } + + return ret; +}; + + +void DIALOG_PLOT_SCHEMATIC::SetHPGLPenWidth() +{ + m_HPGLPenSize = ValueFromTextCtrl( *m_penHPGLWidthCtrl ); + + if( m_HPGLPenSize > Millimeter2iu( 2 ) ) + m_HPGLPenSize = Millimeter2iu( 2 ); + + if( m_HPGLPenSize < Millimeter2iu( 0.01 ) ) + m_HPGLPenSize = Millimeter2iu( 0.01 ); +} + + +void DIALOG_PLOT_SCHEMATIC::createHPGLFile( bool aPlotAll, bool aPlotFrameRef ) +{ + 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; + REPORTER& reporter = m_MessagesBox->Reporter(); + + 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; + wxString msg; + + if( GetPlotOriginCenter() ) + { + plotOffset.x = plotPage.GetWidthIU() / 2; + plotOffset.y = -plotPage.GetHeightIU() / 2; + } + + try + { + wxString fname = m_parent->GetUniqueFilenameForCurrentSheet(); + wxString ext = HPGL_PLOTTER::GetDefaultFileExtension(); + wxFileName plotFileName = createPlotFileName( m_outputDirectoryName, fname, + ext, &reporter ); + + LOCALE_IO toggle; + + if( Plot_1_Page_HPGL( plotFileName.GetFullPath(), screen, plotPage, plotOffset, + plot_scale, aPlotFrameRef ) ) + { + msg.Printf( _( "Plot: '%s' OK.\n" ), GetChars( plotFileName.GetFullPath() ) ); + reporter.Report( msg, REPORTER::RPT_ACTION ); + } + else + { + msg.Printf( _( "Unable to create file '%s'.\n" ), GetChars( plotFileName.GetFullPath() ) ); + reporter.Report( msg, REPORTER::RPT_ERROR ); + } + + if( !aPlotAll ) + break; + } + catch( IO_ERROR& e ) + { + msg.Printf( wxT( "HPGL Plotter exception: %s"), GetChars( e.errorText ) ); + reporter.Report( msg, REPORTER::RPT_ERROR ); + } + + } + + m_parent->SetCurrentSheet( oldsheetpath ); + m_parent->GetCurrentSheet().UpdateAllScreenReferences(); + m_parent->SetSheetNumberAndCount(); +} + + +bool DIALOG_PLOT_SCHEMATIC::Plot_1_Page_HPGL( const wxString& aFileName, + SCH_SCREEN* aScreen, + const PAGE_INFO& aPageInfo, + wxPoint aPlot0ffset, + double aScale, + bool aPlotFrameRef ) +{ + HPGL_PLOTTER* plotter = new HPGL_PLOTTER(); + + plotter->SetPageSettings( aPageInfo ); + plotter->SetViewport( aPlot0ffset, IU_PER_DECIMILS, aScale, false ); + + // Init : + plotter->SetCreator( wxT( "Eeschema-HPGL" ) ); + + if( ! plotter->OpenFile( aFileName ) ) + { + delete plotter; + return false; + } + + LOCALE_IO toggle; + + // Pen num and pen speed are not initialized here. + // Default HPGL driver values are used + plotter->SetPenDiameter( m_HPGLPenSize ); + plotter->SetPenOverlap( m_HPGLPenSize / 4 ); + plotter->StartPlot(); + + plotter->SetColor( BLACK ); + + if( getPlotFrameRef() ) + PlotWorkSheet( plotter, m_parent->GetTitleBlock(), + m_parent->GetPageSettings(), + aScreen->m_ScreenNumber, aScreen->m_NumberOfScreens, + m_parent->GetScreenDesc(), + aScreen->GetFileName() ); + + aScreen->Plot( plotter ); + + plotter->EndPlot(); + delete plotter; + + return true; +} -- cgit