KiCad PCB EDA Suite
plotter_dxf.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2016-2021 KiCad Developers, see AUTHORS.txt for contributors.
5  *
6  * This program is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the
8  * Free Software Foundation, either version 3 of the License, or (at your
9  * option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
26 #pragma once
27 
28 #include "plotter.h"
29 
30 
31 class DXF_PLOTTER : public PLOTTER
32 {
33 public:
35  {
36  m_textAsLines = true;
40  }
41 
42  virtual PLOT_FORMAT GetPlotterType() const override
43  {
44  return PLOT_FORMAT::DXF;
45  }
46 
47  static wxString GetDefaultFileExtension()
48  {
49  return wxString( wxT( "dxf" ) );
50  }
51 
55  virtual void SetTextMode( PLOT_TEXT_MODE mode ) override
56  {
57  if( mode != PLOT_TEXT_MODE::DEFAULT )
59  }
60 
64  virtual bool StartPlot() override;
65  virtual bool EndPlot() override;
66 
67  // For now we don't use 'thick' primitives, so no line width
68  virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override
69  {
71  }
72 
73  virtual void SetDash( PLOT_DASH_TYPE dashed ) override;
74 
78  virtual void SetColor( const COLOR4D& color ) override;
79 
86  virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
87  double aScale, bool aMirror ) override;
88 
92  virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
93  int width = USE_DEFAULT_LINE_WIDTH ) override;
94 
101  virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
102  int width = USE_DEFAULT_LINE_WIDTH ) override;
103 
111  virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, FILL_T aFill,
112  int aWidth = USE_DEFAULT_LINE_WIDTH, void* aData = nullptr ) override;
113  virtual void ThickSegment( const wxPoint& start, const wxPoint& end, int width,
114  OUTLINE_MODE tracemode, void* aData ) override;
115  virtual void Arc( const wxPoint& centre, double StAngle, double EndAngle,
116  int rayon, FILL_T fill, int width = USE_DEFAULT_LINE_WIDTH ) override;
117  virtual void PenTo( const wxPoint& pos, char plume ) override;
118 
123  virtual void FlashPadCircle( const wxPoint& pos, int diametre,
124  OUTLINE_MODE trace_mode, void* aData ) override;
125 
129  virtual void FlashPadOval( const wxPoint& pos, const wxSize& size, double orient,
130  OUTLINE_MODE trace_mode, void* aData ) override;
131 
135  virtual void FlashPadRect( const wxPoint& pos, const wxSize& size,
136  double orient, OUTLINE_MODE trace_mode, void* aData ) override;
137  virtual void FlashPadRoundRect( const wxPoint& aPadPos, const wxSize& aSize,
138  int aCornerRadius, double aOrient,
139  OUTLINE_MODE aTraceMode, void* aData ) override;
140  virtual void FlashPadCustom( const wxPoint& aPadPos, const wxSize& aSize, double aOrient,
141  SHAPE_POLY_SET* aPolygons,
142  OUTLINE_MODE aTraceMode, void* aData ) override;
143 
147  virtual void FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
148  double aPadOrient, OUTLINE_MODE aTraceMode, void* aData ) override;
149  virtual void FlashRegularPolygon( const wxPoint& aShapePos, int aDiameter, int aCornerCount,
150  double aOrient, OUTLINE_MODE aTraceMode, void* aData ) override;
151 
152  virtual void Text( const wxPoint& aPos,
153  const COLOR4D& aColor,
154  const wxString& aText,
155  double aOrient,
156  const wxSize& aSize,
157  enum EDA_TEXT_HJUSTIFY_T aH_justify,
158  enum EDA_TEXT_VJUSTIFY_T aV_justify,
159  int aWidth,
160  bool aItalic,
161  bool aBold,
162  bool aMultilineAllowed = false,
163  void* aData = nullptr ) override;
164 
165 
171  void SetUnits( DXF_UNITS aUnit );
172 
179  {
180  return m_plotUnits;
181  }
182 
189  double GetUnitScaling() const
190  {
191  return m_unitScalingFactor;
192  }
193 
199  unsigned int GetMeasurementDirective() const
200  {
201  return m_measurementDirective;
202  }
203 
204 protected:
208 
212 };
OUTLINE_MODE
Definition: outline_mode.h:24
double m_unitScalingFactor
Definition: plotter_dxf.h:210
Plot settings, and plotting engines (PostScript, Gerber, HPGL and DXF)
EDA_TEXT_HJUSTIFY_T
Definition: eda_text.h:82
virtual void Text(const wxPoint &aPos, const COLOR4D &aColor, const wxString &aText, double aOrient, const wxSize &aSize, enum EDA_TEXT_HJUSTIFY_T aH_justify, enum EDA_TEXT_VJUSTIFY_T aV_justify, int aWidth, bool aItalic, bool aBold, bool aMultilineAllowed=false, void *aData=nullptr) override
Draw text with the plotter.
virtual void FlashPadRect(const wxPoint &pos, const wxSize &size, double orient, OUTLINE_MODE trace_mode, void *aData) override
DXF rectangular pad: always done in sketch mode.
unsigned int m_measurementDirective
Definition: plotter_dxf.h:211
virtual void SetDash(PLOT_DASH_TYPE dashed) override
virtual void SetViewport(const wxPoint &aOffset, double aIusPerDecimil, double aScale, bool aMirror) override
Set the scale/position for the DXF plot.
DXF_UNITS m_plotUnits
Definition: plotter_dxf.h:209
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_T aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr) override
DXF polygon: doesn't fill it but at least it close the filled ones DXF does not know thick outline.
virtual void SetCurrentLineWidth(int width, void *aData=nullptr) override
Set the line width for the next drawing.
Definition: plotter_dxf.h:68
int color
Definition: DXF_plotter.cpp:57
virtual void FlashPadCircle(const wxPoint &pos, int diametre, OUTLINE_MODE trace_mode, void *aData) override
DXF round pad: always done in sketch mode; it could be filled but it isn't pretty if other kinds of p...
virtual void FlashRegularPolygon(const wxPoint &aShapePos, int aDiameter, int aCornerCount, double aOrient, OUTLINE_MODE aTraceMode, void *aData) override
Flash a regular polygon.
bool m_textAsLines
Definition: plotter_dxf.h:205
virtual void PenTo(const wxPoint &pos, char plume) override
Moveto/lineto primitive, moves the 'pen' to the specified direction.
void SetUnits(DXF_UNITS aUnit)
Set the units to use for plotting the DXF file.
Definition: color4d.h:44
COLOR4D m_currentColor
Definition: plotter_dxf.h:206
virtual void SetTextMode(PLOT_TEXT_MODE mode) override
DXF handles NATIVE text emitting TEXT entities.
Definition: plotter_dxf.h:55
FILL_T
Definition: eda_shape.h:53
virtual void FlashPadOval(const wxPoint &pos, const wxSize &size, double orient, OUTLINE_MODE trace_mode, void *aData) override
DXF oval pad: always done in sketch mode.
double GetUnitScaling() const
Get the scale factor to apply to convert the device units to be in the currently set units.
Definition: plotter_dxf.h:189
static wxString GetDefaultFileExtension()
Definition: plotter_dxf.h:47
virtual void FlashPadCustom(const wxPoint &aPadPos, const wxSize &aSize, double aOrient, SHAPE_POLY_SET *aPolygons, OUTLINE_MODE aTraceMode, void *aData) override
static const int USE_DEFAULT_LINE_WIDTH
Definition: plotter.h:126
virtual bool StartPlot() override
Open the DXF plot with a skeleton header.
int m_currentPenWidth
Definition: plotter.h:595
Represent a set of closed polygons.
PLOT_FORMAT
The set of supported output plot formats.
Definition: plotter.h:67
virtual void FlashPadTrapez(const wxPoint &aPadPos, const wxPoint *aCorners, double aPadOrient, OUTLINE_MODE aTraceMode, void *aData) override
DXF trapezoidal pad: only sketch mode is supported.
virtual bool EndPlot() override
virtual void Rect(const wxPoint &p1, const wxPoint &p2, FILL_T fill, int width=USE_DEFAULT_LINE_WIDTH) override
DXF rectangle: fill not supported.
virtual void Circle(const wxPoint &pos, int diametre, FILL_T fill, int width=USE_DEFAULT_LINE_WIDTH) override
DXF circle: full functionality; it even does 'fills' drawing a circle with a dual-arc polyline wide a...
PLOT_DASH_TYPE
Dashed line types.
Definition: plotter.h:104
EDA_TEXT_VJUSTIFY_T
Definition: eda_text.h:89
virtual PLOT_FORMAT GetPlotterType() const override
Returns the effective plot engine in use.
Definition: plotter_dxf.h:42
Base plotter engine class.
Definition: plotter.h:121
unsigned int GetMeasurementDirective() const
Get the correct value for the $MEASUREMENT field given the current units.
Definition: plotter_dxf.h:199
PLOT_DASH_TYPE m_currentLineType
Definition: plotter_dxf.h:207
DXF_UNITS
Definition: plotter.h:55
virtual void ThickSegment(const wxPoint &start, const wxPoint &end, int width, OUTLINE_MODE tracemode, void *aData) override
PLOT_TEXT_MODE
Which kind of text to output with the PSLIKE plotters.
Definition: plotter.h:93
virtual void Arc(const wxPoint &centre, double StAngle, double EndAngle, int rayon, FILL_T fill, int width=USE_DEFAULT_LINE_WIDTH) override
Generic fallback: arc rendered as a polyline.
virtual void FlashPadRoundRect(const wxPoint &aPadPos, const wxSize &aSize, int aCornerRadius, double aOrient, OUTLINE_MODE aTraceMode, void *aData) override
DXF_UNITS GetUnits() const
The units currently enabled for plotting.
Definition: plotter_dxf.h:178
virtual void SetColor(const COLOR4D &color) override
The DXF exporter handles 'colors' as layers...
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103