From bb95fcccfc7335dc62e5019a488fe73ea7cc7684 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Mon, 26 Oct 2015 18:51:41 +0100 Subject: [PATCH] plotcontroller: add method to get the current plot full file name and the current plot folder full path from Python script. gen_gerber_and_drill_files_board.py: * fix to make it compatible with rev 6280. * allow this script to create files in the current plot folder defined from the board forder, no more only in current working directory. --- .../gen_gerber_and_drill_files_board.py | 13 ++++++---- pcbnew/pcbplot.cpp | 9 ++++--- pcbnew/plotcontroller.h | 26 ++++++++++++++++++- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py b/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py index 8a9b2c4a04..12e00ff777 100644 --- a/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py +++ b/demos/python_scripts_examples/gen_gerber_and_drill_files_board.py @@ -72,7 +72,9 @@ plot_plan = [ for layer_info in plot_plan: pctl.SetLayer(layer_info[1]) pctl.OpenPlotfile(layer_info[0], PLOT_FORMAT_GERBER, layer_info[2]) - pctl.PlotLayer() + print 'plot %s' % pctl.GetPlotFileName() + if pctl.PlotLayer() == False: + print "plot error" #generate internal copper layers, if any lyrcnt = board.GetCopperLayerCount(); @@ -81,7 +83,9 @@ for innerlyr in range ( 1, lyrcnt-1 ): pctl.SetLayer(innerlyr) lyrname = 'inner%s' % innerlyr pctl.OpenPlotfile(lyrname, PLOT_FORMAT_GERBER, "inner") - pctl.PlotLayer() + print 'plot %s' % pctl.GetPlotFileName() + if pctl.PlotLayer() == False: + print "plot error" # At the end you have to close the last plot, otherwise you don't know when @@ -96,8 +100,7 @@ drlwriter.SetMapFileFormat( PLOT_FORMAT_PDF ) mirror = False minimalHeader = False offset = wxPoint(0,0) -mergeNPTH = False -drlwriter.SetOptions( mirror, minimalHeader, offset, mergeNPTH ) +drlwriter.SetOptions( mirror, minimalHeader, offset ) metricFmt = True drlwriter.SetFormat( metricFmt ) @@ -107,5 +110,5 @@ genMap = True drlwriter.CreateDrillandMapFilesSet( plotDir, genDrl, genMap ); # One can create a text file to report drill statistics -rptfn = plotDir + '/drill_report.txt' +rptfn = pctl.GetPlotDirName() + 'drill_report.txt' drlwriter.GenDrillReportFile( rptfn ); diff --git a/pcbnew/pcbplot.cpp b/pcbnew/pcbplot.cpp index 77b5d61df2..6d1b1c3137 100644 --- a/pcbnew/pcbplot.cpp +++ b/pcbnew/pcbplot.cpp @@ -371,7 +371,9 @@ bool PLOT_CONTROLLER::OpenPlotfile( const wxString &aSuffix, if( EnsureFileDirectoryExists( &outputDir, boardFilename ) ) { - wxFileName fn( boardFilename ); + // outputDir contains now the full path of plot files + m_plotFile = boardFilename; + m_plotFile.SetPath( outputDir.GetPath() ); wxString fileExt = GetDefaultPlotExtension( aFormat ); // Gerber format can use specific file ext, depending on layers @@ -380,10 +382,11 @@ bool PLOT_CONTROLLER::OpenPlotfile( const wxString &aSuffix, GetPlotOptions().GetUseGerberProtelExtensions() ) fileExt = GetGerberProtelExtension( GetLayer() ); - BuildPlotFileName( &fn, outputDirName, aSuffix, fileExt ); + // Build plot filenames from the board name and layer names: + BuildPlotFileName( &m_plotFile, outputDir.GetPath(), aSuffix, fileExt ); m_plotter = StartPlotBoard( m_board, &GetPlotOptions(), ToLAYER_ID( GetLayer() ), - fn.GetFullPath(), aSheetDesc ); + m_plotFile.GetFullPath(), aSheetDesc ); } return( m_plotter != NULL ); diff --git a/pcbnew/plotcontroller.h b/pcbnew/plotcontroller.h index 480644649e..013afed20c 100644 --- a/pcbnew/plotcontroller.h +++ b/pcbnew/plotcontroller.h @@ -40,6 +40,7 @@ class BOARD; /** * Batch plotter state object. Keeps the plot options and handles multiple * plot requests + * Especially useful in Python scripts */ class PLOT_CONTROLLER { @@ -83,7 +84,27 @@ public: */ bool PlotLayer(); - void SetColorMode( bool aColorMode ); + /** + * @return the current plot full filename, set by OpenPlotfile + */ + const wxString GetPlotFileName() { return m_plotFile.GetFullPath(); } + + /** + * @return the current plot full filename, set by OpenPlotfile + */ + const wxString GetPlotDirName() { return m_plotFile.GetPathWithSep(); } + + /** + * Plotters can plot in Black and White mode or Color mode + * SetColorMode activate/de-actiavte the Color mode. + * @param aColorMode = true to activate the plot color mode + */ + void SetColorMode( bool ); + + /** + * @return true if the current plot color mode is Color, + * false if the current plot color mode is Black and White + */ bool GetColorMode(); private: @@ -99,6 +120,9 @@ private: /// The board we're plotting BOARD* m_board; + + /// The current plot filename, set by OpenPlotfile + wxFileName m_plotFile; }; #endif