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 <vector>
29 #include <math/box2.h>
30 #include <plotter.h>
31 
32 
33 class DXF_PLOTTER : public PLOTTER
34 {
35 public:
37  {
38  m_textAsLines = true;
42  }
43 
44  virtual PLOT_FORMAT GetPlotterType() const override
45  {
46  return PLOT_FORMAT::DXF;
47  }
48 
49  static wxString GetDefaultFileExtension()
50  {
51  return wxString( wxT( "dxf" ) );
52  }
53 
57  virtual void SetTextMode( PLOT_TEXT_MODE mode ) override
58  {
59  if( mode != PLOT_TEXT_MODE::DEFAULT )
61  }
62 
66  virtual bool StartPlot() override;
67  virtual bool EndPlot() override;
68 
69  // For now we don't use 'thick' primitives, so no line width
70  virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override
71  {
73  }
74 
75  virtual void SetDash( PLOT_DASH_TYPE dashed ) override;
76 
80  virtual void SetColor( const COLOR4D& color ) override;
81 
88  virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
89  double aScale, bool aMirror ) override;
90 
94  virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_TYPE fill,
95  int width = USE_DEFAULT_LINE_WIDTH ) override;
96 
103  virtual void Circle( const wxPoint& pos, int diametre, FILL_TYPE fill,
104  int width = USE_DEFAULT_LINE_WIDTH ) override;
105 
113  virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, FILL_TYPE aFill,
114  int aWidth = USE_DEFAULT_LINE_WIDTH, void* aData = nullptr ) override;
115  virtual void ThickSegment( const wxPoint& start, const wxPoint& end, int width,
116  OUTLINE_MODE tracemode, void* aData ) override;
117  virtual void Arc( const wxPoint& centre, double StAngle, double EndAngle,
118  int rayon, FILL_TYPE fill, int width = USE_DEFAULT_LINE_WIDTH ) override;
119  virtual void PenTo( const wxPoint& pos, char plume ) override;
120 
125  virtual void FlashPadCircle( const wxPoint& pos, int diametre,
126  OUTLINE_MODE trace_mode, void* aData ) override;
127 
131  virtual void FlashPadOval( const wxPoint& pos, const wxSize& size, double orient,
132  OUTLINE_MODE trace_mode, void* aData ) override;
133 
137  virtual void FlashPadRect( const wxPoint& pos, const wxSize& size,
138  double orient, OUTLINE_MODE trace_mode, void* aData ) override;
139  virtual void FlashPadRoundRect( const wxPoint& aPadPos, const wxSize& aSize,
140  int aCornerRadius, double aOrient,
141  OUTLINE_MODE aTraceMode, void* aData ) override;
142  virtual void FlashPadCustom( const wxPoint& aPadPos, const wxSize& aSize, double aOrient,
143  SHAPE_POLY_SET* aPolygons,
144  OUTLINE_MODE aTraceMode, void* aData ) override;
145 
149  virtual void FlashPadTrapez( const wxPoint& aPadPos, const wxPoint *aCorners,
150  double aPadOrient, OUTLINE_MODE aTraceMode, void* aData ) override;
151  virtual void FlashRegularPolygon( const wxPoint& aShapePos, int aDiameter, int aCornerCount,
152  double aOrient, OUTLINE_MODE aTraceMode, void* aData ) override;
153 
154  virtual void Text( const wxPoint& aPos,
155  const COLOR4D& aColor,
156  const wxString& aText,
157  double aOrient,
158  const wxSize& aSize,
159  enum EDA_TEXT_HJUSTIFY_T aH_justify,
160  enum EDA_TEXT_VJUSTIFY_T aV_justify,
161  int aWidth,
162  bool aItalic,
163  bool aBold,
164  bool aMultilineAllowed = false,
165  void* aData = nullptr ) override;
166 
167 
173  void SetUnits( DXF_UNITS aUnit );
174 
181  {
182  return m_plotUnits;
183  }
184 
191  double GetUnitScaling() const
192  {
193  return m_unitScalingFactor;
194  }
195 
201  unsigned int GetMeasurementDirective() const
202  {
203  return m_measurementDirective;
204  }
205 
206 protected:
210 
214 };
OUTLINE_MODE
Definition: outline_mode.h:24
double m_unitScalingFactor
Definition: plotter_dxf.h:212
Plot settings, and plotting engines (PostScript, Gerber, HPGL and DXF)
EDA_TEXT_HJUSTIFY_T
Definition: eda_text.h:61
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.
FILL_TYPE
The set of fill types used in plotting or drawing enclosed areas.
Definition: fill_type.h:28
unsigned int m_measurementDirective
Definition: plotter_dxf.h:213
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:211
virtual void SetCurrentLineWidth(int width, void *aData=nullptr) override
Set the line width for the next drawing.
Definition: plotter_dxf.h:70
int color
Definition: DXF_plotter.cpp:60
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:207
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:208
virtual void Arc(const wxPoint &centre, double StAngle, double EndAngle, int rayon, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH) override
Generic fallback: arc rendered as a polyline.
virtual void SetTextMode(PLOT_TEXT_MODE mode) override
DXF handles NATIVE text emitting TEXT entities.
Definition: plotter_dxf.h:57
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:191
static wxString GetDefaultFileExtension()
Definition: plotter_dxf.h:49
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
Opens 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
PLOT_DASH_TYPE
Dashed line types.
Definition: plotter.h:104
EDA_TEXT_VJUSTIFY_T
Definition: eda_text.h:68
virtual PLOT_FORMAT GetPlotterType() const override
Returns the effective plot engine in use.
Definition: plotter_dxf.h:44
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:201
virtual void Circle(const wxPoint &pos, int diametre, FILL_TYPE 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 m_currentLineType
Definition: plotter_dxf.h:209
DXF_UNITS
Definition: plotter.h:55
virtual void ThickSegment(const wxPoint &start, const wxPoint &end, int width, OUTLINE_MODE tracemode, void *aData) override
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE 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.
PLOT_TEXT_MODE
Which kind of text to output with the PSLIKE plotters.
Definition: plotter.h:93
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:180
virtual void SetColor(const COLOR4D &color) override
The DXF exporter handles 'colors' as layers...
virtual void Rect(const wxPoint &p1, const wxPoint &p2, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH) override
DXF rectangle: fill not supported.
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:103