summaryrefslogtreecommitdiff
path: root/pcbnew/pcb_plot_params.h
diff options
context:
space:
mode:
Diffstat (limited to 'pcbnew/pcb_plot_params.h')
-rw-r--r--pcbnew/pcb_plot_params.h292
1 files changed, 292 insertions, 0 deletions
diff --git a/pcbnew/pcb_plot_params.h b/pcbnew/pcb_plot_params.h
new file mode 100644
index 0000000..def8b5c
--- /dev/null
+++ b/pcbnew/pcb_plot_params.h
@@ -0,0 +1,292 @@
+#ifndef PCB_PLOT_PARAMS_H_
+#define PCB_PLOT_PARAMS_H_
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2015 KiCad Developers, see change_log.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <wx/wx.h>
+#include <eda_text.h> // EDA_DRAW_MODE_T
+#include <plot_common.h>
+#include <layers_id_colors_and_visibility.h>
+
+class PCB_PLOT_PARAMS_PARSER;
+
+/**
+ * Class PCB_PLOT_PARAMS
+ * handles plot parameters and options when plotting/printing a board.
+ */
+class PCB_PLOT_PARAMS
+{
+ friend class PCB_PLOT_PARAMS_PARSER;
+public:
+ enum DrillMarksType {
+ NO_DRILL_SHAPE = 0,
+ SMALL_DRILL_SHAPE = 1,
+ FULL_DRILL_SHAPE = 2
+ };
+
+private:
+ // If true, do not plot NPTH pads
+ // (mainly used to disable NPTH pads plotting on copper layers)
+ bool m_skipNPTH_Pads;
+
+ /** FILLED or SKETCH selects how to plot filled objects.
+ * FILLED or SKETCH not available with all drivers: some have fixed mode
+ */
+ EDA_DRAW_MODE_T m_plotMode;
+
+ /** DXF format: Plot items in outline (polygon) mode
+ * In polygon mode, each item to plot is converted to a polygon, and all
+ * polygons are merged.
+ */
+ bool m_DXFplotPolygonMode;
+
+ /// Plot format type (chooses the driver to be used)
+ PlotFormat m_format;
+
+ /// Holes can be not plotted, have a small mark or plotted in actual size
+ DrillMarksType m_drillMarks;
+
+ /// Choose how represent text with PS, PDF and DXF drivers
+ PlotTextMode m_textMode;
+
+ /// The default line width (used to draw items having no defined width)
+ int m_lineWidth;
+
+ /// When true set the scale to fit the board in the page
+ bool m_autoScale;
+
+ /// Global scale factor, 1.0 plots a board with its actual size.
+ double m_scale;
+
+ /// Mirror the plot around the X axis
+ bool m_mirror;
+
+ /// Plot in negative color (supported only by some drivers)
+ bool m_negative;
+
+ /// True if vias are drawn on Mask layer (ie untented, *exposed* by mask)
+ bool m_plotViaOnMaskLayer;
+
+ /// True to plot/print frame references
+ bool m_plotFrameRef;
+
+ /// If false always plot (merge) the pcb edge layer on other layers
+ bool m_excludeEdgeLayer;
+
+ /// Set of layers to plot
+ LSET m_layerSelection;
+
+ /** When plotting gerber files, use a conventional set of Protel extensions
+ * instead of .gbr, that is now the offical gerber file extension
+ * this is a deprecated feature
+ */
+ bool m_useGerberProtelExtensions;
+
+ /// Include attributes from the Gerber X2 format (chapter 5 in revision J2)
+ bool m_useGerberAttributes;
+
+ /// precision of coordinates in Gerber files: accepted 5 or 6
+ /// when units are in mm (6 or 7 in inches, but Pcbnew uses mm).
+ /// 6 is the internal resolution of Pcbnew, but not alwys accepted by board maker
+ /// 5 is the minimal value for professional boards.
+ int m_gerberPrecision;
+
+ /// Plot gerbers using auxiliary (drill) origin instead of absolute coordinates
+ bool m_useAuxOrigin;
+
+ /// On gerbers 'scrape' away the solder mask from silkscreen (trim silks)
+ bool m_subtractMaskFromSilk;
+
+ /// Autoscale the plot to fit an A4 (landscape?) sheet
+ bool m_A4Output;
+
+ /// Scale ratio index (UI only)
+ int m_scaleSelection;
+
+ /// Output directory for plot files (usually relative to the board file)
+ wxString m_outputDirectory;
+
+ /// Enable plotting of part references
+ bool m_plotReference;
+
+ /// Enable plotting of part values
+ bool m_plotValue;
+
+ /// Force plotting of fields marked invisible
+ bool m_plotInvisibleText;
+
+ /// Allows pads outlines on silkscreen layer
+ /// (when pads are also on silk screen)
+ bool m_plotPadsOnSilkLayer;
+
+ /* These next two scale factors are intended to compensate plotters
+ * (mainly printers) X and Y scale error. Therefore they are expected very
+ * near 1.0; only X and Y dimensions are adjusted: circles are plotted as
+ * circles, even if X and Y fine scale differ; because of this it is mostly
+ * useful for printers: postscript plots would be best adjusted using
+ * the prologue (that would change the whole output matrix
+ */
+ double m_fineScaleAdjustX; ///< fine scale adjust X axis
+ double m_fineScaleAdjustY; ///< fine scale adjust Y axis
+
+ /** This width factor is intended to compensate PS printers/ plotters that do
+ * not strictly obey line width settings. Only used to plot pads and tracks
+ */
+ int m_widthAdjust;
+
+ int m_HPGLPenNum; ///< HPGL only: pen number selection(1 to 9)
+ int m_HPGLPenSpeed; ///< HPGL only: pen speed, always in cm/s (1 to 99 cm/s)
+ int m_HPGLPenDiam; ///< HPGL only: pen diameter in MILS, useful to fill areas
+ int m_HPGLPenOvr; ///< HPGL only: pen overlay in MILS, useful only to fill areas
+ EDA_COLOR_T m_color; ///< Color for plotting the current layer
+
+public:
+ PCB_PLOT_PARAMS();
+
+ void SetSkipPlotNPTH_Pads( bool aSkip ) { m_skipNPTH_Pads = aSkip; }
+ bool GetSkipPlotNPTH_Pads() const { return m_skipNPTH_Pads; }
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControl=0 )
+ const throw( IO_ERROR );
+ void Parse( PCB_PLOT_PARAMS_PARSER* aParser ) throw( PARSE_ERROR, IO_ERROR );
+
+ /**
+ * Compare current settings to aPcbPlotParams, including not saved parameters in brd file
+ * @param aPcbPlotParams = the PCB_PLOT_PARAMS to compare
+ * @param aCompareOnlySavedPrms = true to compare only saved in file parameters,
+ * and false to compare the full set of parameters.
+ * @return true is parameters are same, false if one (or more) parameter does not match
+ */
+ bool IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams, bool aCompareOnlySavedPrms ) const;
+
+ void SetColor( EDA_COLOR_T aVal ) { m_color = aVal; }
+ EDA_COLOR_T GetColor() const { return m_color; }
+
+ void SetTextMode( PlotTextMode aVal ) { m_textMode = aVal; }
+ PlotTextMode GetTextMode() const { return m_textMode; }
+
+ void SetPlotMode( EDA_DRAW_MODE_T aPlotMode ) { m_plotMode = aPlotMode; }
+ EDA_DRAW_MODE_T GetPlotMode() const { return m_plotMode; }
+
+ void SetDXFPlotPolygonMode( bool aFlag ) { m_DXFplotPolygonMode = aFlag; }
+ bool GetDXFPlotPolygonMode() const { return m_DXFplotPolygonMode; }
+
+ void SetDrillMarksType( DrillMarksType aVal ) { m_drillMarks = aVal; }
+ DrillMarksType GetDrillMarksType() const { return m_drillMarks; }
+
+ void SetScale( double aVal ) { m_scale = aVal; }
+ double GetScale() const { return m_scale; }
+
+ void SetFineScaleAdjustX( double aVal ) { m_fineScaleAdjustX = aVal; }
+ double GetFineScaleAdjustX() const { return m_fineScaleAdjustX; }
+ void SetFineScaleAdjustY( double aVal ) { m_fineScaleAdjustY = aVal; }
+ double GetFineScaleAdjustY() const { return m_fineScaleAdjustY; }
+ void SetWidthAdjust( int aVal ) { m_widthAdjust = aVal; }
+ int GetWidthAdjust() const { return m_widthAdjust; }
+
+ void SetAutoScale( bool aFlag ) { m_autoScale = aFlag; }
+ bool GetAutoScale() const { return m_autoScale; }
+
+ void SetMirror( bool aFlag ) { m_mirror = aFlag; }
+ bool GetMirror() const { return m_mirror; }
+
+ void SetPlotPadsOnSilkLayer( bool aFlag ) { m_plotPadsOnSilkLayer = aFlag; }
+ bool GetPlotPadsOnSilkLayer() const { return m_plotPadsOnSilkLayer; }
+
+ void SetPlotInvisibleText( bool aFlag ) { m_plotInvisibleText = aFlag; }
+ bool GetPlotInvisibleText() const { return m_plotInvisibleText; }
+ void SetPlotValue( bool aFlag ) { m_plotValue = aFlag; }
+ bool GetPlotValue() const { return m_plotValue; }
+ void SetPlotReference( bool aFlag ) { m_plotReference = aFlag; }
+ bool GetPlotReference() const { return m_plotReference; }
+
+ void SetNegative( bool aFlag ) { m_negative = aFlag; }
+ bool GetNegative() const { return m_negative; }
+
+ void SetPlotViaOnMaskLayer( bool aFlag ) { m_plotViaOnMaskLayer = aFlag; }
+ bool GetPlotViaOnMaskLayer() const { return m_plotViaOnMaskLayer; }
+
+ void SetPlotFrameRef( bool aFlag ) { m_plotFrameRef = aFlag; }
+ bool GetPlotFrameRef() const { return m_plotFrameRef; }
+
+ void SetExcludeEdgeLayer( bool aFlag ) { m_excludeEdgeLayer = aFlag; }
+ bool GetExcludeEdgeLayer() const { return m_excludeEdgeLayer; }
+
+ void SetFormat( PlotFormat aFormat ) { m_format = aFormat; }
+ PlotFormat GetFormat() const { return m_format; }
+
+ void SetOutputDirectory( wxString aDir ) { m_outputDirectory = aDir; }
+ wxString GetOutputDirectory() const { return m_outputDirectory; }
+
+ void SetUseGerberAttributes( bool aUse ) { m_useGerberAttributes = aUse; }
+ bool GetUseGerberAttributes() const { return m_useGerberAttributes; }
+
+ void SetUseGerberProtelExtensions( bool aUse ) { m_useGerberProtelExtensions = aUse; }
+ bool GetUseGerberProtelExtensions() const { return m_useGerberProtelExtensions; }
+
+ void SetGerberPrecision( int aPrecision );
+ int GetGerberPrecision() const { return m_gerberPrecision; }
+
+ /** Default precision of coordinates in Gerber files.
+ * when units are in mm (7 in inches, but Pcbnew uses mm).
+ * 6 is the internal resolution of Pcbnew, so the default is 6
+ */
+ static int GetGerberDefaultPrecision() { return 6; }
+
+ void SetSubtractMaskFromSilk( bool aSubtract ) { m_subtractMaskFromSilk = aSubtract; };
+ bool GetSubtractMaskFromSilk() const { return m_subtractMaskFromSilk; }
+
+ void SetLayerSelection( LSET aSelection ) { m_layerSelection = aSelection; };
+ LSET GetLayerSelection() const { return m_layerSelection; };
+
+ void SetUseAuxOrigin( bool aAux ) { m_useAuxOrigin = aAux; };
+ bool GetUseAuxOrigin() const { return m_useAuxOrigin; };
+
+ void SetScaleSelection( int aSelection ) { m_scaleSelection = aSelection; };
+ int GetScaleSelection() const { return m_scaleSelection; };
+
+ void SetA4Output( int aForce ) { m_A4Output = aForce; };
+ bool GetA4Output() const { return m_A4Output; };
+
+ int GetHPGLPenDiameter() const { return m_HPGLPenDiam; };
+ bool SetHPGLPenDiameter( int aValue );
+ int GetHPGLPenSpeed() const { return m_HPGLPenSpeed; };
+ bool SetHPGLPenSpeed( int aValue );
+ int GetHPGLPenOverlay() const { return m_HPGLPenOvr; };
+ bool SetHPGLPenOverlay( int aValue );
+ void SetHPGLPenNum( int aVal ) { m_HPGLPenNum = aVal; }
+ int GetHPGLPenNum() const { return m_HPGLPenNum; }
+
+ int GetLineWidth() const { return m_lineWidth; };
+ bool SetLineWidth( int aValue );
+};
+
+
+/**
+ * Default line thickness in PCnew units used to draw or plot items having a
+ * default thickness line value (Frame references) (i.e. = 0 ).
+ * 0 = single pixel line width.
+ */
+extern int g_DrawDefaultLineThickness;
+
+#endif // PCB_PLOT_PARAMS_H_