KiCad PCB EDA Suite
HPGL_PLOTTER Class Reference

#include <plotter_hpgl.h>

Inheritance diagram for HPGL_PLOTTER:
PLOTTER

Classes

struct  HPGL_ITEM
 

Public Member Functions

 HPGL_PLOTTER ()
 
virtual PLOT_FORMAT GetPlotterType () const override
 Returns the effective plot engine in use. More...
 
void SetTargetChordLength (double chord_len)
 Set the target length of chords used to draw approximated circles and arcs. More...
 
void SetUserCoords (bool user_coords)
 Switch to the user coordinate system. More...
 
void SetUserCoordsFit (bool user_coords_fit)
 Set whether the user coordinate system is fit to content. More...
 
virtual bool StartPlot () override
 At the start of the HPGL plot pen speed and number are requested. More...
 
virtual bool EndPlot () override
 HPGL end of plot: sort and emit graphics, pen return and release. More...
 
virtual void SetCurrentLineWidth (int width, void *aData=nullptr) override
 HPGL doesn't handle line thickness or color. More...
 
virtual void SetDash (PLOT_DASH_TYPE dashed) override
 HPGL supports dashed lines. More...
 
virtual void SetColor (const COLOR4D &color) override
 
virtual void SetPenSpeed (int speed)
 
virtual void SetPenNumber (int number)
 
virtual void SetPenDiameter (double diameter)
 
virtual void SetViewport (const wxPoint &aOffset, double aIusPerDecimil, double aScale, bool aMirror) override
 Set the plot offset and scaling for the current plot. More...
 
virtual void Rect (const wxPoint &p1, const wxPoint &p2, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH) override
 
virtual void Circle (const wxPoint &pos, int diametre, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH) override
 
virtual void PlotPoly (const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr) override
 Draw a polygon ( filled or not ). More...
 
virtual void ThickSegment (const wxPoint &start, const wxPoint &end, int width, OUTLINE_MODE tracemode, void *aData) override
 
virtual void Arc (const wxPoint &centre, double StAngle, double EndAngle, int rayon, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH) override
 Plot an arc. More...
 
virtual void PenTo (const wxPoint &pos, char plume) override
 Moveto/lineto primitive, moves the 'pen' to the specified direction. More...
 
virtual void FlashPadCircle (const wxPoint &aPadPos, int aDiameter, OUTLINE_MODE aTraceMode, void *aData) override
 
virtual void FlashPadOval (const wxPoint &aPadPos, const wxSize &aSize, double aPadOrient, OUTLINE_MODE aTraceMode, void *aData) override
 
virtual void FlashPadRect (const wxPoint &aPadPos, const wxSize &aSize, double aOrient, OUTLINE_MODE aTraceMode, void *aData) override
 
virtual void FlashPadRoundRect (const wxPoint &aPadPos, const wxSize &aSize, int aCornerRadius, double aOrient, OUTLINE_MODE aTraceMode, void *aData) override
 
virtual void FlashPadCustom (const wxPoint &aPadPos, const wxSize &aSize, double aOrient, SHAPE_POLY_SET *aPolygons, OUTLINE_MODE aTraceMode, void *aData) override
 
virtual void FlashPadTrapez (const wxPoint &aPadPos, const wxPoint *aCorners, double aPadOrient, OUTLINE_MODE aTraceMode, void *aData) override
 Flash a trapezoidal pad. More...
 
virtual void FlashRegularPolygon (const wxPoint &aShapePos, int aDiameter, int aCornerCount, double aOrient, OUTLINE_MODE aTraceMode, void *aData) override
 Flash a regular polygon. More...
 
virtual void SetNegative (bool aNegative)
 
virtual void SetColorMode (bool aColorMode)
 Plot in B/W or color. More...
 
bool GetColorMode () const
 
void SetRenderSettings (RENDER_SETTINGS *aSettings)
 
RENDER_SETTINGSRenderSettings ()
 
virtual void SetPageSettings (const PAGE_INFO &aPageSettings)
 
PAGE_INFOPageSettings ()
 
virtual int GetCurrentLineWidth () const
 
virtual void SetCreator (const wxString &aCreator)
 
virtual void SetTitle (const wxString &aTitle)
 
void AddLineToHeader (const wxString &aExtraString)
 Add a line to the list of free lines to print at the beginning of the file. More...
 
void ClearHeaderLinesList ()
 Remove all lines from the list of free lines to print at the beginning of the file. More...
 
virtual bool OpenFile (const wxString &aFullFilename)
 Open or create the plot file aFullFilename. More...
 
double GetIUsPerDecimil () const
 The IUs per decimil are an essential scaling factor when plotting; they are set and saved when establishing the viewport. More...
 
int GetPlotterArcLowDef () const
 
int GetPlotterArcHighDef () const
 
virtual void Arc (const SHAPE_ARC &aArc)
 
virtual void BezierCurve (const wxPoint &aStart, const wxPoint &aControl1, const wxPoint &aControl2, const wxPoint &aEnd, int aTolerance, int aLineThickness=USE_DEFAULT_LINE_WIDTH)
 Generic fallback: Cubic Bezier curve rendered as a polyline In KiCad the bezier curves have 4 control points: start ctrl1 ctrl2 end. More...
 
void MoveTo (const wxPoint &pos)
 
void LineTo (const wxPoint &pos)
 
void FinishTo (const wxPoint &pos)
 
void PenFinish ()
 
virtual void PlotPoly (const SHAPE_LINE_CHAIN &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)
 Draw a polygon ( filled or not ). More...
 
virtual void PlotImage (const wxImage &aImage, const wxPoint &aPos, double aScaleFactor)
 Only PostScript plotters can plot bitmaps. More...
 
virtual void ThickArc (const wxPoint &centre, double StAngle, double EndAngle, int rayon, int width, OUTLINE_MODE tracemode, void *aData)
 
virtual void ThickRect (const wxPoint &p1, const wxPoint &p2, int width, OUTLINE_MODE tracemode, void *aData)
 
virtual void ThickCircle (const wxPoint &pos, int diametre, int width, OUTLINE_MODE tracemode, void *aData)
 
virtual void FilledCircle (const wxPoint &pos, int diametre, OUTLINE_MODE tracemode, void *aData)
 
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)
 Draw text with the plotter. More...
 
void Marker (const wxPoint &position, int diametre, unsigned aShapeId)
 Draw a pattern shape number aShapeId, to coord position. More...
 
virtual void SetLayerPolarity (bool aPositive)
 Set the current Gerber layer polarity to positive or negative by writing %LPD*% or %LPC*% to the Gerber file, respectively. More...
 
virtual void SetTextMode (PLOT_TEXT_MODE mode)
 Change the current text mode. More...
 
virtual void SetGerberCoordinatesFormat (int aResolution, bool aUseInches=false)
 
virtual void SetSvgCoordinatesFormat (unsigned aResolution, bool aUseInches=false)
 
virtual void StartBlock (void *aData)
 calling this function allows one to define the beginning of a group of drawing items, for instance in SVG or Gerber format. More...
 
virtual void EndBlock (void *aData)
 calling this function allows one to define the end of a group of drawing items for instance in SVG or Gerber format. More...
 

Static Public Member Functions

static wxString GetDefaultFileExtension ()
 

Static Public Attributes

static const int DO_NOT_SET_LINE_WIDTH = -2
 
static const int USE_DEFAULT_LINE_WIDTH = -1
 
static const unsigned MARKER_COUNT = 58
 Draw a marker (used for the drill map). More...
 

Protected Member Functions

bool startItem (const DPOINT &location)
 Start a new HPGL_ITEM if necessary, keeping the current one if it exists. More...
 
void flushItem ()
 Flush the current HPGL_ITEM and clear out the current item pointer. More...
 
bool startOrAppendItem (const DPOINT &location, const wxString &content)
 Start a new HPGL_ITEM with the given string if necessary, or append the string to the current item. More...
 
void markerCircle (const wxPoint &pos, int radius)
 Plot a circle centered on the position. More...
 
void markerHBar (const wxPoint &pos, int radius)
 Plot a - bar centered on the position. More...
 
void markerSlash (const wxPoint &pos, int radius)
 Plot a / bar centered on the position. More...
 
void markerBackSlash (const wxPoint &pos, int radius)
 Plot a \ bar centered on the position. More...
 
void markerVBar (const wxPoint &pos, int radius)
 Plot a | bar centered on the position. More...
 
void markerSquare (const wxPoint &position, int radius)
 Plot a square centered on the position. More...
 
void markerLozenge (const wxPoint &position, int radius)
 Plot a lozenge centered on the position. More...
 
void segmentAsOval (const wxPoint &start, const wxPoint &end, int width, OUTLINE_MODE tracemode)
 Convert a thick segment and plot it as an oval. More...
 
void sketchOval (const wxPoint &pos, const wxSize &size, double orient, int width)
 
virtual DPOINT userToDeviceCoordinates (const wxPoint &aCoordinate)
 Modify coordinates according to the orientation, scale factor, and offsets trace. More...
 
virtual DPOINT userToDeviceSize (const wxSize &size)
 Modify size according to the plotter scale factors (wxSize version, returns a DPOINT). More...
 
virtual double userToDeviceSize (double size) const
 Modify size according to the plotter scale factors (simple double version). More...
 
double GetDotMarkLenIU () const
 
double GetDashMarkLenIU () const
 
double GetDashGapLenIU () const
 

Static Protected Member Functions

static void sortItems (std::list< HPGL_ITEM > &items)
 Sort a list of HPGL items to improve plotting speed on mechanical plotters. More...
 
static const char * lineTypeCommand (PLOT_DASH_TYPE linetype)
 Return the plot command corresponding to a line type. More...
 

Protected Attributes

int penSpeed
 
int penNumber
 
double penDiameter
 
double arcTargetChordLength
 
double arcMinChordDegrees
 
PLOT_DASH_TYPE dashType
 
bool useUserCoords
 
bool fitUserCoords
 
std::list< HPGL_ITEMm_items
 
HPGL_ITEMm_current_item
 
double m_plotScale
 Plot scale - chosen by the user (even implicitly with 'fit in a4') More...
 
double m_IUsPerDecimil
 
double m_iuPerDeviceUnit
 
wxPoint m_plotOffset
 
bool m_plotMirror
 
bool m_mirrorIsHorizontal
 
bool m_yaxisReversed
 
FILE * m_outputFile
 Output file. More...
 
bool m_colorMode
 
bool m_negativeMode
 
int m_currentPenWidth
 
char m_penState
 
wxPoint m_penLastpos
 
wxString m_creator
 
wxString m_filename
 
wxString m_title
 
PAGE_INFO m_pageInfo
 
wxSize m_paperSize
 
wxArrayString m_headerExtraLines
 
RENDER_SETTINGSm_renderSettings
 

Detailed Description

Definition at line 33 of file plotter_hpgl.h.

Constructor & Destructor Documentation

◆ HPGL_PLOTTER()

HPGL_PLOTTER::HPGL_PLOTTER ( )

Definition at line 222 of file HPGL_plotter.cpp.

223  : arcTargetChordLength( 0 ),
224  arcMinChordDegrees( 5.0 ),
226  useUserCoords( false ),
227  fitUserCoords( false ),
228  m_current_item( nullptr )
229 {
230  SetPenSpeed( 40 ); // Default pen speed = 40 cm/s; Pen speed is *always* in cm
231  SetPenNumber( 1 ); // Default pen num = 1
232  SetPenDiameter( 0.0 );
233 }
virtual void SetPenDiameter(double diameter)
bool useUserCoords
Definition: plotter_hpgl.h:172
virtual void SetPenSpeed(int speed)
Definition: plotter_hpgl.h:85
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225
PLOT_DASH_TYPE dashType
Definition: plotter_hpgl.h:171
virtual void SetPenNumber(int number)
Definition: plotter_hpgl.h:90
double arcMinChordDegrees
Definition: plotter_hpgl.h:170
double arcTargetChordLength
Definition: plotter_hpgl.h:169
bool fitUserCoords
Definition: plotter_hpgl.h:173

References SetPenDiameter(), SetPenNumber(), and SetPenSpeed().

Member Function Documentation

◆ AddLineToHeader()

void PLOTTER::AddLineToHeader ( const wxString &  aExtraString)
inlineinherited

Add a line to the list of free lines to print at the beginning of the file.

Parameters
aExtraStringis the string to print

Definition at line 183 of file plotter.h.

184  {
185  m_headerExtraLines.Add( aExtraString );
186  }
wxArrayString m_headerExtraLines
Definition: plotter.h:605

References PLOTTER::m_headerExtraLines.

Referenced by AddGerberX2Attribute(), AddGerberX2Header(), GERBER_WRITER::createDrillFile(), and PLACEFILE_GERBER_WRITER::CreatePlaceFile().

◆ Arc() [1/2]

void HPGL_PLOTTER::Arc ( const wxPoint &  centre,
double  StAngle,
double  EndAngle,
int  rayon,
FILL_TYPE  fill,
int  width = USE_DEFAULT_LINE_WIDTH 
)
overridevirtual

Plot an arc.

Command PU PY x, y; PD start_arc_X AA, start_arc_Y, angle, NbSegm; PU; Or PU PY x, y; PD start_arc_X AA, start_arc_Y, angle, PU;

center is the center of the arc. StAngled is the start angle of the arc. EndAngle is end angle the arc. Radius is the radius of the arc.

Reimplemented from PLOTTER.

Definition at line 565 of file HPGL_plotter.cpp.

567 {
568  wxASSERT( m_outputFile );
569  double angle;
570 
571  if( radius <= 0 )
572  return;
573 
574  double const radius_dev = userToDeviceSize( radius );
575  double const circumf_dev = 2.0 * M_PI * radius_dev;
576  double const target_chord_length = arcTargetChordLength;
577  double chord_degrees = 360.0 * target_chord_length / circumf_dev;
578 
579  if( chord_degrees < arcMinChordDegrees )
580  {
581  chord_degrees = arcMinChordDegrees;
582  }
583  else if( chord_degrees > 45 )
584  {
585  chord_degrees = 45;
586  }
587 
588  DPOINT centre_dev = userToDeviceCoordinates( centre );
589 
590  if( m_plotMirror )
591  angle = StAngle - EndAngle;
592  else
593  angle = EndAngle - StAngle;
594 
596  angle /= 10;
597 
598  // Calculate arc start point:
599  wxPoint cmap;
600  cmap.x = centre.x + KiROUND( cosdecideg( radius, StAngle ) );
601  cmap.y = centre.y - KiROUND( sindecideg( radius, StAngle ) );
602  DPOINT cmap_dev = userToDeviceCoordinates( cmap );
603 
604  startOrAppendItem( cmap_dev, wxString::Format( "AA %.0f,%.0f,%.0f,%g", centre_dev.x,
605  centre_dev.y, angle, chord_degrees ) );
606 
607  // TODO We could compute the final position and full bounding box instead...
608  m_current_item->bbox.Merge( BOX2D( centre_dev - radius_dev,
609  VECTOR2D( radius_dev * 2, radius_dev * 2 ) ) );
610  m_current_item->lift_after = true;
611  flushItem();
612 }
void flushItem()
Flush the current HPGL_ITEM and clear out the current item pointer.
BOX2D bbox
Bounding box of this item.
Definition: plotter_hpgl.h:192
BOX2< VECTOR2D > BOX2D
Definition: box2.h:507
FILE * m_outputFile
Output file.
Definition: plotter.h:590
void NORMALIZE_ANGLE_180(T &Angle)
Definition: trigo.h:398
bool m_plotMirror
Definition: plotter.h:584
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622
bool startOrAppendItem(const DPOINT &location, const wxString &content)
Start a new HPGL_ITEM with the given string if necessary, or append the string to the current item.
bool lift_after
Whether the pen must be lifted after the command.
Definition: plotter_hpgl.h:200
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: box2.h:363
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
virtual DPOINT userToDeviceCoordinates(const wxPoint &aCoordinate)
Modify coordinates according to the orientation, scale factor, and offsets trace.
Definition: plotter.cpp:92
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225
double cosdecideg(double r, double a)
Circle generation utility: computes r * cos(a) Where a is in decidegrees, not in radians.
Definition: trigo.h:452
double sindecideg(double r, double a)
Circle generation utility: computes r * sin(a) Where a is in decidegrees, not in radians.
Definition: trigo.h:443
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
double arcMinChordDegrees
Definition: plotter_hpgl.h:170
double arcTargetChordLength
Definition: plotter_hpgl.h:169

References PNS::angle(), arcMinChordDegrees, arcTargetChordLength, HPGL_PLOTTER::HPGL_ITEM::bbox, cosdecideg(), flushItem(), Format(), KiROUND(), HPGL_PLOTTER::HPGL_ITEM::lift_after, m_current_item, PLOTTER::m_outputFile, PLOTTER::m_plotMirror, BOX2< Vec >::Merge(), NORMALIZE_ANGLE_180(), sindecideg(), startOrAppendItem(), PLOTTER::userToDeviceCoordinates(), PLOTTER::userToDeviceSize(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ Arc() [2/2]

void PLOTTER::Arc ( const SHAPE_ARC aArc)
virtualinherited

Reimplemented in GERBER_PLOTTER.

Definition at line 157 of file plotter.cpp.

158 {
159  Arc( wxPoint( aArc.GetCenter() ), aArc.GetStartAngle(), aArc.GetEndAngle(), aArc.GetRadius(),
160  FILL_TYPE::NO_FILL, aArc.GetWidth() );
161 }
double GetRadius() const
Definition: shape_arc.cpp:492
virtual void Arc(const wxPoint &centre, double StAngle, double EndAngle, int rayon, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH)
Generic fallback: arc rendered as a polyline.
Definition: plotter.cpp:164
double GetStartAngle() const
Definition: shape_arc.cpp:444
double GetEndAngle() const
Definition: shape_arc.cpp:454
int GetWidth() const
Definition: shape_arc.h:156
VECTOR2I GetCenter() const
Definition: shape_arc.cpp:464

References PLOTTER::Arc(), SHAPE_ARC::GetCenter(), SHAPE_ARC::GetEndAngle(), SHAPE_ARC::GetRadius(), SHAPE_ARC::GetStartAngle(), SHAPE_ARC::GetWidth(), and NO_FILL.

◆ BezierCurve()

void PLOTTER::BezierCurve ( const wxPoint &  aStart,
const wxPoint &  aControl1,
const wxPoint &  aControl2,
const wxPoint &  aEnd,
int  aTolerance,
int  aLineThickness = USE_DEFAULT_LINE_WIDTH 
)
virtualinherited

Generic fallback: Cubic Bezier curve rendered as a polyline In KiCad the bezier curves have 4 control points: start ctrl1 ctrl2 end.

Reimplemented in SVG_PLOTTER.

Definition at line 211 of file plotter.cpp.

214 {
215  // Generic fallback: Quadratic Bezier curve plotted as a polyline
216  int minSegLen = aLineThickness; // The segment min length to approximate a bezier curve
217 
218  std::vector<wxPoint> ctrlPoints;
219  ctrlPoints.push_back( aStart );
220  ctrlPoints.push_back( aControl1 );
221  ctrlPoints.push_back( aControl2 );
222  ctrlPoints.push_back( aEnd );
223 
224  BEZIER_POLY bezier_converter( ctrlPoints );
225 
226  std::vector<wxPoint> approxPoints;
227  bezier_converter.GetPoly( approxPoints, minSegLen );
228 
229  SetCurrentLineWidth( aLineThickness );
230  MoveTo( aStart );
231 
232  for( unsigned ii = 1; ii < approxPoints.size()-1; ii++ )
233  LineTo( approxPoints[ii] );
234 
235  FinishTo( aEnd );
236 }
void FinishTo(const wxPoint &pos)
Definition: plotter.h:273
void LineTo(const wxPoint &pos)
Definition: plotter.h:268
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263
Bezier curves to polygon converter.
Definition: bezier_curves.h:36
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.

References PLOTTER::FinishTo(), BEZIER_POLY::GetPoly(), PLOTTER::LineTo(), PLOTTER::MoveTo(), and PLOTTER::SetCurrentLineWidth().

Referenced by SVG_PLOTTER::BezierCurve(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), and BRDITEMS_PLOTTER::PlotPcbShape().

◆ Circle()

void HPGL_PLOTTER::Circle ( const wxPoint &  pos,
int  diametre,
FILL_TYPE  fill,
int  width = USE_DEFAULT_LINE_WIDTH 
)
overridevirtual

Implements PLOTTER.

Definition at line 408 of file HPGL_plotter.cpp.

409 {
410  wxASSERT( m_outputFile );
411  double radius = userToDeviceSize( diameter / 2 );
412  DPOINT center_dev = userToDeviceCoordinates( centre );
413  SetCurrentLineWidth( width );
414 
415  double const circumf = 2.0 * M_PI * radius;
416  double const target_chord_length = arcTargetChordLength;
417  double chord_degrees = 360.0 * target_chord_length / circumf;
418 
419  if( chord_degrees < arcMinChordDegrees )
420  {
421  chord_degrees = arcMinChordDegrees;
422  }
423  else if( chord_degrees > 45 )
424  {
425  chord_degrees = 45;
426  }
427 
428  if( fill == FILL_TYPE::FILLED_SHAPE )
429  {
430  // Draw the filled area
431  MoveTo( centre );
432  startOrAppendItem( center_dev, wxString::Format( "PM 0;CI %g,%g;%s", radius, chord_degrees,
434  m_current_item->lift_before = true;
435  m_current_item->pen_returns = true;
436  m_current_item->bbox.Merge( BOX2D( center_dev - radius,
437  VECTOR2D( 2 * radius, 2 * radius ) ) );
438  PenFinish();
439  }
440 
441  if( radius > 0 )
442  {
443  MoveTo( centre );
444  startOrAppendItem( center_dev, wxString::Format( "CI %g,%g;", radius, chord_degrees ) );
445  m_current_item->lift_before = true;
446  m_current_item->pen_returns = true;
447  m_current_item->bbox.Merge( BOX2D( center_dev - radius,
448  VECTOR2D( 2 * radius, 2 * radius ) ) );
449  PenFinish();
450  }
451 }
bool pen_returns
Whether the pen returns to its original state after the command.
Definition: plotter_hpgl.h:204
void PenFinish()
Definition: plotter.h:279
BOX2D bbox
Bounding box of this item.
Definition: plotter_hpgl.h:192
BOX2< VECTOR2D > BOX2D
Definition: box2.h:507
FILE * m_outputFile
Output file.
Definition: plotter.h:590
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622
bool startOrAppendItem(const DPOINT &location, const wxString &content)
Start a new HPGL_ITEM with the given string if necessary, or append the string to the current item.
static const char hpgl_end_polygon_cmd[]
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: box2.h:363
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
virtual DPOINT userToDeviceCoordinates(const wxPoint &aCoordinate)
Modify coordinates according to the orientation, scale factor, and offsets trace.
Definition: plotter.cpp:92
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225
double arcMinChordDegrees
Definition: plotter_hpgl.h:170
bool lift_before
Whether the command should be executed with the pen lifted.
Definition: plotter_hpgl.h:195
double arcTargetChordLength
Definition: plotter_hpgl.h:169
virtual void SetCurrentLineWidth(int width, void *aData=nullptr) override
HPGL doesn't handle line thickness or color.
Definition: plotter_hpgl.h:72

References arcMinChordDegrees, arcTargetChordLength, HPGL_PLOTTER::HPGL_ITEM::bbox, FILLED_SHAPE, Format(), hpgl_end_polygon_cmd, HPGL_PLOTTER::HPGL_ITEM::lift_before, m_current_item, PLOTTER::m_outputFile, BOX2< Vec >::Merge(), PLOTTER::MoveTo(), HPGL_PLOTTER::HPGL_ITEM::pen_returns, PLOTTER::PenFinish(), SetCurrentLineWidth(), startOrAppendItem(), PLOTTER::userToDeviceCoordinates(), and PLOTTER::userToDeviceSize().

◆ ClearHeaderLinesList()

void PLOTTER::ClearHeaderLinesList ( )
inlineinherited

Remove all lines from the list of free lines to print at the beginning of the file.

Definition at line 191 of file plotter.h.

192  {
193  m_headerExtraLines.Clear();
194  }
wxArrayString m_headerExtraLines
Definition: plotter.h:605

References PLOTTER::m_headerExtraLines.

Referenced by StartPlotBoard().

◆ EndBlock()

virtual void PLOTTER::EndBlock ( void *  aData)
inlinevirtualinherited

calling this function allows one to define the end of a group of drawing items for instance in SVG or Gerber format.

the group is started by StartBlock()

Parameters
aDatacan define any parameter for most of plotters: do nothing

Reimplemented in SVG_PLOTTER, and GERBER_PLOTTER.

Definition at line 496 of file plotter.h.

496 {}

Referenced by SCH_SYMBOL::Plot(), BRDITEMS_PLOTTER::PlotFilledAreas(), and PlotStandardLayer().

◆ EndPlot()

bool HPGL_PLOTTER::EndPlot ( )
overridevirtual

HPGL end of plot: sort and emit graphics, pen return and release.

Implements PLOTTER.

Definition at line 271 of file HPGL_plotter.cpp.

272 {
273  wxASSERT( m_outputFile );
274 
275  fputs( "PU;\n", m_outputFile );
276 
277  flushItem();
278  sortItems( m_items );
279 
280  if( m_items.size() > 0 )
281  {
282  if( useUserCoords )
283  {
284  if( fitUserCoords )
285  {
286  BOX2D bbox = m_items.front().bbox;
287  for( HPGL_ITEM const& item : m_items )
288  {
289  bbox.Merge( item.bbox );
290  }
291 
292  fprintf( m_outputFile, "SC%.0f,%.0f,%.0f,%.0f;\n", bbox.GetX(),
293  bbox.GetX() + bbox.GetWidth(), bbox.GetY(),
294  bbox.GetY() + bbox.GetHeight() );
295  }
296  else
297  {
298  DPOINT pagesize_dev( m_paperSize * m_iuPerDeviceUnit );
299  fprintf( m_outputFile, "SC%.0f,%.0f,%.0f,%.0f;\n", 0., pagesize_dev.x, 0.,
300  pagesize_dev.y );
301  }
302  }
303 
304  DPOINT loc = m_items.begin()->loc_start;
305  bool pen_up = true;
306  PLOT_DASH_TYPE current_dash = PLOT_DASH_TYPE::SOLID;
307  int current_pen = penNumber;
308 
309  for( HPGL_ITEM const& item : m_items )
310  {
311  if( item.loc_start != loc || pen_up )
312  {
313  if( !pen_up )
314  {
315  fputs( "PU;", m_outputFile );
316  pen_up = true;
317  }
318 
319  fprintf( m_outputFile, "PA %.0f,%.0f;", item.loc_start.x, item.loc_start.y );
320  }
321 
322  if( item.dashType != current_dash )
323  {
324  current_dash = item.dashType;
325  fputs( lineTypeCommand( item.dashType ), m_outputFile );
326  }
327 
328  if( item.pen != current_pen )
329  {
330  if( !pen_up )
331  {
332  fputs( "PU;", m_outputFile );
333  pen_up = true;
334  }
335 
336  fprintf( m_outputFile, "SP%d;", item.pen );
337  current_pen = item.pen;
338  }
339 
340  if( pen_up && !item.lift_before )
341  {
342  fputs( "PD;", m_outputFile );
343  pen_up = false;
344  }
345  else if( !pen_up && item.lift_before )
346  {
347  fputs( "PU;", m_outputFile );
348  pen_up = true;
349  }
350 
351  fputs( static_cast<const char*>( item.content.utf8_str() ), m_outputFile );
352 
353  if( !item.pen_returns )
354  {
355  // Assume commands drop the pen
356  pen_up = false;
357  }
358 
359  if( item.lift_after )
360  {
361  fputs( "PU;", m_outputFile );
362  pen_up = true;
363  }
364  else
365  {
366  loc = item.loc_end;
367  }
368 
369  fputs( "\n", m_outputFile );
370  }
371  }
372 
373  fputs( "PU;PA;SP0;\n", m_outputFile );
374  fclose( m_outputFile );
375  m_outputFile = nullptr;
376  return true;
377 }
void flushItem()
Flush the current HPGL_ITEM and clear out the current item pointer.
coord_type GetX() const
Definition: box2.h:173
FILE * m_outputFile
Output file.
Definition: plotter.h:590
static void sortItems(std::list< HPGL_ITEM > &items)
Sort a list of HPGL items to improve plotting speed on mechanical plotters.
double m_iuPerDeviceUnit
Definition: plotter.h:581
bool useUserCoords
Definition: plotter_hpgl.h:172
std::list< HPGL_ITEM > m_items
Definition: plotter_hpgl.h:224
coord_type GetWidth() const
Definition: box2.h:180
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: box2.h:363
PLOT_DASH_TYPE
Dashed line types.
Definition: plotter.h:104
coord_type GetY() const
Definition: box2.h:174
static const char * lineTypeCommand(PLOT_DASH_TYPE linetype)
Return the plot command corresponding to a line type.
coord_type GetHeight() const
Definition: box2.h:181
wxSize m_paperSize
Definition: plotter.h:603
bool fitUserCoords
Definition: plotter_hpgl.h:173

References fitUserCoords, flushItem(), BOX2< Vec >::GetHeight(), BOX2< Vec >::GetWidth(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), lineTypeCommand(), m_items, PLOTTER::m_iuPerDeviceUnit, PLOTTER::m_outputFile, PLOTTER::m_paperSize, BOX2< Vec >::Merge(), penNumber, SOLID, sortItems(), useUserCoords, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by DIALOG_PLOT_SCHEMATIC::plotOneSheetHpgl().

◆ FilledCircle()

void PLOTTER::FilledCircle ( const wxPoint &  pos,
int  diametre,
OUTLINE_MODE  tracemode,
void *  aData 
)
virtualinherited

Reimplemented in GERBER_PLOTTER.

Definition at line 611 of file plotter.cpp.

612 {
613  if( tracemode == FILLED )
614  {
615  Circle( pos, diametre, FILL_TYPE::FILLED_SHAPE, 0 );
616  }
617  else
618  {
619  SetCurrentLineWidth( -1 );
620  Circle( pos, diametre, FILL_TYPE::NO_FILL, -1 );
621  }
622 }
virtual void Circle(const wxPoint &pos, int diametre, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH)=0
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.

References PLOTTER::Circle(), FILLED, FILLED_SHAPE, NO_FILL, and PLOTTER::SetCurrentLineWidth().

Referenced by BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), and BRDITEMS_PLOTTER::PlotPcbShape().

◆ FinishTo()

◆ FlashPadCircle()

void HPGL_PLOTTER::FlashPadCircle ( const wxPoint &  aPadPos,
int  aDiameter,
OUTLINE_MODE  aTraceMode,
void *  aData 
)
overridevirtual
Parameters
aPadPosPosition of the shape (center of the rectangle.
aDiameteris the diameter of round pad.
aTraceModeis the drawing mode, FILLED or SKETCH.
aDatais an auxiliary info (mainly for gerber format attributes).

Implements PLOTTER.

Definition at line 649 of file HPGL_plotter.cpp.

651 {
652  wxASSERT( m_outputFile );
653  DPOINT pos_dev = userToDeviceCoordinates( pos );
654 
655  int radius = diametre / 2;
656 
657  if( trace_mode == FILLED )
658  {
659  // if filled mode, the pen diameter is removed from diameter
660  // to keep the pad size
661  radius -= KiROUND( penDiameter ) / 2;
662  }
663 
664  if( radius < 0 )
665  radius = 0;
666 
667  double rsize = userToDeviceSize( radius );
668 
669  if( trace_mode == FILLED ) // Plot in filled mode.
670  {
671  // A filled polygon uses always the current point to start the polygon.
672  // Gives a correct current starting point for the circle
673  MoveTo( wxPoint( pos.x+radius, pos.y ) );
674 
675  // Plot filled area and its outline
676  startOrAppendItem( userToDeviceCoordinates( wxPoint( pos.x + radius, pos.y ) ),
677  wxString::Format( "PM 0; PA %.0f,%.0f;CI %.0f;%s",
678  pos_dev.x, pos_dev.y, rsize, hpgl_end_polygon_cmd ) );
679  m_current_item->lift_before = true;
680  m_current_item->pen_returns = true;
681  }
682  else
683  {
684  // Draw outline only:
685  startOrAppendItem( pos_dev, wxString::Format( "CI %.0f;", rsize ) );
686  m_current_item->lift_before = true;
687  m_current_item->pen_returns = true;
688  }
689 
690  PenFinish();
691 }
bool pen_returns
Whether the pen returns to its original state after the command.
Definition: plotter_hpgl.h:204
void PenFinish()
Definition: plotter.h:279
FILE * m_outputFile
Output file.
Definition: plotter.h:590
bool startOrAppendItem(const DPOINT &location, const wxString &content)
Start a new HPGL_ITEM with the given string if necessary, or append the string to the current item.
static const char hpgl_end_polygon_cmd[]
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
virtual DPOINT userToDeviceCoordinates(const wxPoint &aCoordinate)
Modify coordinates according to the orientation, scale factor, and offsets trace.
Definition: plotter.cpp:92
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225
double penDiameter
Definition: plotter_hpgl.h:168
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
bool lift_before
Whether the command should be executed with the pen lifted.
Definition: plotter_hpgl.h:195

References FILLED, Format(), hpgl_end_polygon_cmd, KiROUND(), HPGL_PLOTTER::HPGL_ITEM::lift_before, m_current_item, PLOTTER::m_outputFile, PLOTTER::MoveTo(), HPGL_PLOTTER::HPGL_ITEM::pen_returns, penDiameter, PLOTTER::PenFinish(), startOrAppendItem(), PLOTTER::userToDeviceCoordinates(), PLOTTER::userToDeviceSize(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by FlashPadOval().

◆ FlashPadCustom()

void HPGL_PLOTTER::FlashPadCustom ( const wxPoint &  aPadPos,
const wxSize &  aSize,
double  aPadOrient,
SHAPE_POLY_SET aPolygons,
OUTLINE_MODE  aTraceMode,
void *  aData 
)
overridevirtual
Parameters
aPadPosPosition of the shape.
aSizeis the size of round reference pad.
aPadOrientis the pad rotation, used only with aperture macros (Gerber plotter).
aPolygonsthe shape as polygon set.
aTraceModeis the drawing mode, FILLED or SKETCH.
aDataan auxiliary info (mainly for gerber format attributes).

Implements PLOTTER.

Definition at line 770 of file HPGL_plotter.cpp.

772 {
773  std::vector< wxPoint > cornerList;
774 
775  for( int cnt = 0; cnt < aPolygons->OutlineCount(); ++cnt )
776  {
777  SHAPE_LINE_CHAIN& poly = aPolygons->Outline( cnt );
778 
779  cornerList.clear();
780  cornerList.reserve( poly.PointCount() );
781 
782  for( int ii = 0; ii < poly.PointCount(); ++ii )
783  cornerList.emplace_back( poly.CPoint( ii ).x, poly.CPoint( ii ).y );
784 
785  if( cornerList.back() != cornerList.front() )
786  cornerList.push_back( cornerList.front() );
787 
788  PlotPoly( cornerList, aTraceMode == FILLED ? FILL_TYPE::FILLED_SHAPE : FILL_TYPE::NO_FILL );
789  }
790 }
int OutlineCount() const
Return the number of vertices in a given outline/hole.
int PointCount() const
Return the number of points (vertices) in this line chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
SHAPE_LINE_CHAIN & Outline(int aIndex)
Represent a polyline (an zero-thickness chain of connected line segments).
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr) override
Draw a polygon ( filled or not ).

References SHAPE_LINE_CHAIN::CPoint(), FILLED, FILLED_SHAPE, NO_FILL, SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), PlotPoly(), SHAPE_LINE_CHAIN::PointCount(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ FlashPadOval()

void HPGL_PLOTTER::FlashPadOval ( const wxPoint &  aPadPos,
const wxSize &  aSize,
double  aPadOrient,
OUTLINE_MODE  aTraceMode,
void *  aData 
)
overridevirtual
Parameters
aPadPosPosition of the shape (center of the rectangle.
aSizeis the size of oblong shape.
aPadOrientThe rotation of the shape.
aTraceModeis the drawing mode, FILLED or SKETCH.
aDataan auxiliary info (mainly for gerber format attributes).

Implements PLOTTER.

Definition at line 615 of file HPGL_plotter.cpp.

617 {
618  wxASSERT( m_outputFile );
619  int deltaxy, cx, cy;
620  wxSize size( aSize );
621 
622  // The pad will be drawn as an oblong shape with size.y > size.x (Oval vertical orientation 0).
623  if( size.x > size.y )
624  {
625  std::swap( size.x, size.y );
626  orient = AddAngles( orient, 900 );
627  }
628 
629  deltaxy = size.y - size.x; // distance between centers of the oval
630 
631  if( trace_mode == FILLED )
632  {
633  FlashPadRect( pos, wxSize( size.x, deltaxy + KiROUND( penDiameter ) ),
634  orient, trace_mode, aData );
635  cx = 0; cy = deltaxy / 2;
636  RotatePoint( &cx, &cy, orient );
637  FlashPadCircle( wxPoint( cx + pos.x, cy + pos.y ), size.x, trace_mode, aData );
638  cx = 0; cy = -deltaxy / 2;
639  RotatePoint( &cx, &cy, orient );
640  FlashPadCircle( wxPoint( cx + pos.x, cy + pos.y ), size.x, trace_mode, aData );
641  }
642  else // Plot in outline mode.
643  {
644  sketchOval( pos, size, orient, KiROUND( penDiameter ) );
645  }
646 }
virtual void FlashPadCircle(const wxPoint &aPadPos, int aDiameter, OUTLINE_MODE aTraceMode, void *aData) override
FILE * m_outputFile
Output file.
Definition: plotter.h:590
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:229
T AddAngles(T a1, T2 a2)
Add two angles (keeping the result normalized). T2 is here.
Definition: trigo.h:341
double penDiameter
Definition: plotter_hpgl.h:168
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
virtual void FlashPadRect(const wxPoint &aPadPos, const wxSize &aSize, double aOrient, OUTLINE_MODE aTraceMode, void *aData) override
void sketchOval(const wxPoint &pos, const wxSize &size, double orient, int width)
Definition: plotter.cpp:481

References AddAngles(), FILLED, FlashPadCircle(), FlashPadRect(), KiROUND(), PLOTTER::m_outputFile, penDiameter, RotatePoint(), and PLOTTER::sketchOval().

◆ FlashPadRect()

void HPGL_PLOTTER::FlashPadRect ( const wxPoint &  aPadPos,
const wxSize &  aSize,
double  aPadOrient,
OUTLINE_MODE  aTraceMode,
void *  aData 
)
overridevirtual
Parameters
aPadPosPosition of the shape (center of the rectangle).
aSizeis the size of rounded rect.
aPadOrientThe rotation of the shape.
aTraceModeis the drawing mode, FILLED or SKETCH.
aDataan auxiliary info (mainly for gerber format attributes).

Implements PLOTTER.

Definition at line 694 of file HPGL_plotter.cpp.

696 {
697  // Build rect polygon:
698  std::vector<wxPoint> corners;
699 
700  int dx = padsize.x / 2;
701  int dy = padsize.y / 2;
702 
703  if( trace_mode == FILLED )
704  {
705  // in filled mode, the pen diameter is removed from size
706  // to compensate the extra size due to this pen size
707  dx -= KiROUND( penDiameter ) / 2;
708  dx = std::max( dx, 0);
709  dy -= KiROUND( penDiameter ) / 2;
710  dy = std::max( dy, 0);
711  }
712 
713 
714  corners.emplace_back( - dx, - dy );
715  corners.emplace_back( - dx, + dy );
716  corners.emplace_back( + dx, + dy );
717  corners.emplace_back( + dx, - dy );
718 
719  // Close polygon
720  corners.emplace_back( - dx, - dy );
721 
722  for( unsigned ii = 0; ii < corners.size(); ii++ )
723  {
724  RotatePoint( &corners[ii], orient );
725  corners[ii] += pos;
726  }
727 
728  PlotPoly( corners, trace_mode == FILLED ? FILL_TYPE::FILLED_SHAPE : FILL_TYPE::NO_FILL );
729 }
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:229
double penDiameter
Definition: plotter_hpgl.h:168
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr) override
Draw a polygon ( filled or not ).

References FILLED, FILLED_SHAPE, KiROUND(), NO_FILL, penDiameter, PlotPoly(), and RotatePoint().

Referenced by FlashPadOval().

◆ FlashPadRoundRect()

void HPGL_PLOTTER::FlashPadRoundRect ( const wxPoint &  aPadPos,
const wxSize &  aSize,
int  aCornerRadius,
double  aOrient,
OUTLINE_MODE  aTraceMode,
void *  aData 
)
overridevirtual
Parameters
aPadPosPosition of the shape (center of the rectangle.
aSizeis the size of rounded rect.
aCornerRadiusRadius of the rounded corners.
aOrientThe rotation of the shape.
aTraceModeis the drawing mode, FILLED or SKETCH.
aDataan auxiliary info (mainly for gerber format attributes).

Implements PLOTTER.

Definition at line 732 of file HPGL_plotter.cpp.

735 {
736  SHAPE_POLY_SET outline;
737 
738  wxSize size = aSize;
739 
740  if( aTraceMode == FILLED )
741  {
742  // In filled mode, the pen diameter is removed from size to keep the pad size.
743  size.x -= KiROUND( penDiameter ) / 2;
744  size.x = std::max( size.x, 0);
745  size.y -= KiROUND( penDiameter ) / 2;
746  size.y = std::max( size.y, 0);
747 
748  // keep aCornerRadius to a value < min size x,y < 2:
749  aCornerRadius = std::min( aCornerRadius, std::min( size.x, size.y ) /2 );
750  }
751 
752  TransformRoundChamferedRectToPolygon( outline, aPadPos, size, aOrient, aCornerRadius,
753  0.0, 0, 0, GetPlotterArcHighDef(), ERROR_INSIDE );
754 
755  // TransformRoundRectToPolygon creates only one convex polygon
756  std::vector<wxPoint> cornerList;
757  SHAPE_LINE_CHAIN& poly = outline.Outline( 0 );
758  cornerList.reserve( poly.PointCount() );
759 
760  for( int ii = 0; ii < poly.PointCount(); ++ii )
761  cornerList.emplace_back( poly.CPoint( ii ).x, poly.CPoint( ii ).y );
762 
763  if( cornerList.back() != cornerList.front() )
764  cornerList.push_back( cornerList.front() );
765 
766  PlotPoly( cornerList, aTraceMode == FILLED ? FILL_TYPE::FILLED_SHAPE : FILL_TYPE::NO_FILL );
767 }
int PointCount() const
Return the number of points (vertices) in this line chain.
void TransformRoundChamferedRectToPolygon(SHAPE_POLY_SET &aCornerBuffer, const wxPoint &aPosition, const wxSize &aSize, double aRotation, int aCornerRadius, double aChamferRatio, int aChamferCorners, int aInflate, int aError, ERROR_LOC aErrorLoc)
Convert a rectangle with rounded corners and/or chamfered corners to a polygon.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
Represent a set of closed polygons.
SHAPE_LINE_CHAIN & Outline(int aIndex)
Represent a polyline (an zero-thickness chain of connected line segments).
double penDiameter
Definition: plotter_hpgl.h:168
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
int GetPlotterArcHighDef() const
Definition: plotter.h:228
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr) override
Draw a polygon ( filled or not ).

References SHAPE_LINE_CHAIN::CPoint(), ERROR_INSIDE, FILLED, FILLED_SHAPE, PLOTTER::GetPlotterArcHighDef(), KiROUND(), NO_FILL, SHAPE_POLY_SET::Outline(), penDiameter, PlotPoly(), SHAPE_LINE_CHAIN::PointCount(), TransformRoundChamferedRectToPolygon(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ FlashPadTrapez()

void HPGL_PLOTTER::FlashPadTrapez ( const wxPoint &  aPadPos,
const wxPoint *  aCorners,
double  aPadOrient,
OUTLINE_MODE  aTraceMode,
void *  aData 
)
overridevirtual

Flash a trapezoidal pad.

Parameters
aPadPosis the the position of the shape.
aCornersis the list of 4 corners positions, relative to the shape position, pad orientation 0.
aPadOrientis the rotation of the shape.
aTraceModeis the drawing mode, FILLED or SKETCH.
aDataan auxiliary info (mainly for gerber format attributes).

Implements PLOTTER.

Definition at line 793 of file HPGL_plotter.cpp.

795 {
796  std::vector< wxPoint > cornerList;
797  cornerList.reserve( 5 );
798 
799  for( int ii = 0; ii < 4; ii++ )
800  {
801  wxPoint coord( aCorners[ii] );
802  RotatePoint( &coord, aPadOrient );
803  coord += aPadPos;
804  cornerList.push_back( coord );
805  }
806 
807  // Close polygon
808  cornerList.push_back( cornerList.front() );
809 
810  PlotPoly( cornerList, aTraceMode == FILLED ? FILL_TYPE::FILLED_SHAPE : FILL_TYPE::NO_FILL );
811 }
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:229
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr) override
Draw a polygon ( filled or not ).

References FILLED, FILLED_SHAPE, NO_FILL, PlotPoly(), and RotatePoint().

◆ FlashRegularPolygon()

void HPGL_PLOTTER::FlashRegularPolygon ( const wxPoint &  aShapePos,
int  aDiameter,
int  aCornerCount,
double  aOrient,
OUTLINE_MODE  aTraceMode,
void *  aData 
)
overridevirtual

Flash a regular polygon.

Useful only in Gerber files to flash a regular polygon.

Parameters
aShapePosis the center of the circle containing the polygon.
aRadiusis the radius of the circle containing the polygon.
aCornerCountis the number of vertices.
aOrientis the polygon rotation in degrees.
aDatais a auxiliary parameter used (if needed) to handle extra info specific to the plotter.

Implements PLOTTER.

Definition at line 814 of file HPGL_plotter.cpp.

816 {
817  // Do nothing
818  wxASSERT( 0 );
819 }

◆ flushItem()

void HPGL_PLOTTER::flushItem ( )
protected

Flush the current HPGL_ITEM and clear out the current item pointer.

Definition at line 828 of file HPGL_plotter.cpp.

829 {
830  m_current_item = nullptr;
831 }
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225

References m_current_item.

Referenced by Arc(), EndPlot(), PenTo(), and SetDash().

◆ GetColorMode()

◆ GetCurrentLineWidth()

◆ GetDashGapLenIU()

double PLOTTER::GetDashGapLenIU ( ) const
protectedinherited

Definition at line 151 of file plotter.cpp.

152 {
154 }
virtual int GetCurrentLineWidth() const
Definition: plotter.h:168
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123
#define DASH_GAP_LEN(aLineWidth)

References DASH_GAP_LEN, PLOTTER::GetCurrentLineWidth(), and PLOTTER::userToDeviceSize().

Referenced by PS_PLOTTER::SetDash(), PDF_PLOTTER::SetDash(), and SVG_PLOTTER::setSVGPlotStyle().

◆ GetDashMarkLenIU()

double PLOTTER::GetDashMarkLenIU ( ) const
protectedinherited

Definition at line 145 of file plotter.cpp.

146 {
148 }
#define DASH_MARK_LEN(aLineWidth)
virtual int GetCurrentLineWidth() const
Definition: plotter.h:168
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123

References DASH_MARK_LEN, PLOTTER::GetCurrentLineWidth(), and PLOTTER::userToDeviceSize().

Referenced by PS_PLOTTER::SetDash(), PDF_PLOTTER::SetDash(), and SVG_PLOTTER::setSVGPlotStyle().

◆ GetDefaultFileExtension()

static wxString HPGL_PLOTTER::GetDefaultFileExtension ( )
inlinestatic

Definition at line 43 of file plotter_hpgl.h.

44  {
45  return wxString( wxT( "plt" ) );
46  }

Referenced by DIALOG_PLOT_SCHEMATIC::createHPGLFiles(), and GetDefaultPlotExtension().

◆ GetDotMarkLenIU()

double PLOTTER::GetDotMarkLenIU ( ) const
protectedinherited

Definition at line 139 of file plotter.cpp.

140 {
142 }
virtual int GetCurrentLineWidth() const
Definition: plotter.h:168
#define DOT_MARK_LEN(aLineWidth)
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123

References DOT_MARK_LEN, PLOTTER::GetCurrentLineWidth(), and PLOTTER::userToDeviceSize().

Referenced by PS_PLOTTER::SetDash(), PDF_PLOTTER::SetDash(), and SVG_PLOTTER::setSVGPlotStyle().

◆ GetIUsPerDecimil()

double PLOTTER::GetIUsPerDecimil ( ) const
inlineinherited

The IUs per decimil are an essential scaling factor when plotting; they are set and saved when establishing the viewport.

Here they can be get back again

Definition at line 225 of file plotter.h.

225 { return m_IUsPerDecimil; }
double m_IUsPerDecimil
Definition: plotter.h:579

References PLOTTER::m_IUsPerDecimil.

Referenced by PlotDrawingSheet().

◆ GetPlotterArcHighDef()

◆ GetPlotterArcLowDef()

int PLOTTER::GetPlotterArcLowDef ( ) const
inlineinherited

Definition at line 227 of file plotter.h.

227 { return m_IUsPerDecimil * 8; }
double m_IUsPerDecimil
Definition: plotter.h:579

References PLOTTER::m_IUsPerDecimil.

◆ GetPlotterType()

virtual PLOT_FORMAT HPGL_PLOTTER::GetPlotterType ( ) const
inlineoverridevirtual

Returns the effective plot engine in use.

It's not very OO but for now is required since some things are only done with some output devices (like drill marks, emitted only for postscript

Implements PLOTTER.

Definition at line 38 of file plotter_hpgl.h.

39  {
40  return PLOT_FORMAT::HPGL;
41  }

References HPGL.

◆ LineTo()

void PLOTTER::LineTo ( const wxPoint &  pos)
inlineinherited

Definition at line 268 of file plotter.h.

269  {
270  PenTo( pos, 'D' );
271  }
virtual void PenTo(const wxPoint &pos, char plume)=0
Moveto/lineto primitive, moves the 'pen' to the specified direction.

References PLOTTER::PenTo().

Referenced by PLOTTER::Arc(), PLOTTER::BezierCurve(), DXF_PLOTTER::FlashPadCustom(), DXF_PLOTTER::FlashPadRect(), DXF_PLOTTER::FlashPadRoundRect(), DXF_PLOTTER::FlashPadTrapez(), GERBER_PLOTTER::plotArc(), GERBER_PLOTTER::PlotPoly(), PlotPoly(), DXF_PLOTTER::PlotPoly(), GERBER_PLOTTER::plotRoundRectAsRegion(), LIB_PIN::PlotSymbol(), and DXF_PLOTTER::Rect().

◆ lineTypeCommand()

const char * HPGL_PLOTTER::lineTypeCommand ( PLOT_DASH_TYPE  linetype)
staticprotected

Return the plot command corresponding to a line type.

Definition at line 922 of file HPGL_plotter.cpp.

923 {
924  switch( linetype )
925  {
927  return "LT -2 4 1;";
928  break;
929  case PLOT_DASH_TYPE::DOT:
930  return "LT -1 2 1;";
931  break;
933  return "LT -4 6 1;";
934  break;
935  default:
936  return "LT;";
937  break;
938  }
939 }

References DASH, DASHDOT, and DOT.

Referenced by EndPlot().

◆ Marker()

void PLOTTER::Marker ( const wxPoint &  position,
int  diametre,
unsigned  aShapeId 
)
inherited

Draw a pattern shape number aShapeId, to coord position.

Parameters
aPositionis the position of the marker.
aDiameteris the diameter of the marker.
aShapeIdis the index (used to generate forms characters).

Definition at line 338 of file plotter.cpp.

339 {
340  int radius = diametre / 2;
341 
342  /* Marker are composed by a series of 'parts' superimposed; not every
343  combination make sense, obviously. Since they are used in order I
344  tried to keep the uglier/more complex constructions at the end.
345  Also I avoided the |/ |\ -/ -\ construction because they're *very*
346  ugly... if needed they could be added anyway... I'd like to see
347  a board with more than 58 drilling/slotting tools!
348  If Visual C++ supported the 0b literals they would be optimally
349  and easily encoded as an integer array. We have to do with octal */
350  static const unsigned char marker_patterns[MARKER_COUNT] = {
351 
352  // Bit order: O Square Lozenge - | \ /
353  // First choice: simple shapes
354  0003, // X
355  0100, // O
356  0014, // +
357  0040, // Sq
358  0020, // Lz
359 
360  // Two simple shapes
361  0103, // X O
362  0017, // X +
363  0043, // X Sq
364  0023, // X Lz
365  0114, // O +
366  0140, // O Sq
367  0120, // O Lz
368  0054, // + Sq
369  0034, // + Lz
370  0060, // Sq Lz
371 
372  // Three simple shapes
373  0117, // X O +
374  0143, // X O Sq
375  0123, // X O Lz
376  0057, // X + Sq
377  0037, // X + Lz
378  0063, // X Sq Lz
379  0154, // O + Sq
380  0134, // O + Lz
381  0074, // + Sq Lz
382 
383  // Four simple shapes
384  0174, // O Sq Lz +
385  0163, // X O Sq Lz
386  0157, // X O Sq +
387  0137, // X O Lz +
388  0077, // X Sq Lz +
389 
390  // This draws *everything *
391  0177, // X O Sq Lz +
392 
393  // Here we use the single bars... so the cross is forbidden
394  0110, // O -
395  0104, // O |
396  0101, // O /
397  0050, // Sq -
398  0044, // Sq |
399  0041, // Sq /
400  0030, // Lz -
401  0024, // Lz |
402  0021, // Lz /
403  0150, // O Sq -
404  0144, // O Sq |
405  0141, // O Sq /
406  0130, // O Lz -
407  0124, // O Lz |
408  0121, // O Lz /
409  0070, // Sq Lz -
410  0064, // Sq Lz |
411  0061, // Sq Lz /
412  0170, // O Sq Lz -
413  0164, // O Sq Lz |
414  0161, // O Sq Lz /
415 
416  // Last resort: the backlash component (easy to confound)
417  0102, // \ O
418  0042, // \ Sq
419  0022, // \ Lz
420  0142, // \ O Sq
421  0122, // \ O Lz
422  0062, // \ Sq Lz
423  0162 // \ O Sq Lz
424  };
425 
426  if( aShapeId >= MARKER_COUNT )
427  {
428  // Fallback shape
429  markerCircle( position, radius );
430  }
431  else
432  {
433  // Decode the pattern and draw the corresponding parts
434  unsigned char pat = marker_patterns[aShapeId];
435 
436  if( pat & 0001 )
437  markerSlash( position, radius );
438 
439  if( pat & 0002 )
440  markerBackSlash( position, radius );
441 
442  if( pat & 0004 )
443  markerVBar( position, radius );
444 
445  if( pat & 0010 )
446  markerHBar( position, radius );
447 
448  if( pat & 0020 )
449  markerLozenge( position, radius );
450 
451  if( pat & 0040 )
452  markerSquare( position, radius );
453 
454  if( pat & 0100 )
455  markerCircle( position, radius );
456  }
457 }
void markerHBar(const wxPoint &pos, int radius)
Plot a - bar centered on the position.
Definition: plotter.cpp:310
static const unsigned MARKER_COUNT
Draw a marker (used for the drill map).
Definition: plotter.h:436
void markerSlash(const wxPoint &pos, int radius)
Plot a / bar centered on the position.
Definition: plotter.cpp:317
void markerLozenge(const wxPoint &position, int radius)
Plot a lozenge centered on the position.
Definition: plotter.cpp:286
void markerCircle(const wxPoint &pos, int radius)
Plot a circle centered on the position.
Definition: plotter.cpp:280
void markerVBar(const wxPoint &pos, int radius)
Plot a | bar centered on the position.
Definition: plotter.cpp:331
void markerSquare(const wxPoint &position, int radius)
Plot a square centered on the position.
Definition: plotter.cpp:255
void markerBackSlash(const wxPoint &pos, int radius)
Plot a \ bar centered on the position.
Definition: plotter.cpp:324

References PLOTTER::MARKER_COUNT, PLOTTER::markerBackSlash(), PLOTTER::markerCircle(), PLOTTER::markerHBar(), PLOTTER::markerLozenge(), PLOTTER::markerSlash(), PLOTTER::markerSquare(), and PLOTTER::markerVBar().

Referenced by GENDRILL_WRITER_BASE::genDrillMapFile(), and GENDRILL_WRITER_BASE::plotDrillMarks().

◆ markerBackSlash()

void PLOTTER::markerBackSlash ( const wxPoint &  pos,
int  radius 
)
protectedinherited

Plot a \ bar centered on the position.

Building block for markers

Definition at line 324 of file plotter.cpp.

325 {
326  MoveTo( wxPoint( pos.x + radius, pos.y - radius ) );
327  FinishTo( wxPoint( pos.x - radius, pos.y + radius ) );
328 }
void FinishTo(const wxPoint &pos)
Definition: plotter.h:273
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263

References PLOTTER::FinishTo(), and PLOTTER::MoveTo().

Referenced by PLOTTER::Marker().

◆ markerCircle()

void PLOTTER::markerCircle ( const wxPoint &  pos,
int  radius 
)
protectedinherited

Plot a circle centered on the position.

Building block for markers

Definition at line 280 of file plotter.cpp.

281 {
282  Circle( position, radius * 2, FILL_TYPE::NO_FILL, GetCurrentLineWidth() );
283 }
virtual int GetCurrentLineWidth() const
Definition: plotter.h:168
virtual void Circle(const wxPoint &pos, int diametre, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH)=0

References PLOTTER::Circle(), PLOTTER::GetCurrentLineWidth(), and NO_FILL.

Referenced by PLOTTER::Marker().

◆ markerHBar()

void PLOTTER::markerHBar ( const wxPoint &  pos,
int  radius 
)
protectedinherited

Plot a - bar centered on the position.

Building block for markers

Definition at line 310 of file plotter.cpp.

311 {
312  MoveTo( wxPoint( pos.x - radius, pos.y ) );
313  FinishTo( wxPoint( pos.x + radius, pos.y ) );
314 }
void FinishTo(const wxPoint &pos)
Definition: plotter.h:273
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263

References PLOTTER::FinishTo(), and PLOTTER::MoveTo().

Referenced by PLOTTER::Marker().

◆ markerLozenge()

void PLOTTER::markerLozenge ( const wxPoint &  position,
int  radius 
)
protectedinherited

Plot a lozenge centered on the position.

Building block for markers

Definition at line 286 of file plotter.cpp.

287 {
288  std::vector< wxPoint > corner_list;
289  wxPoint corner;
290  corner.x = position.x;
291  corner.y = position.y + radius;
292  corner_list.push_back( corner );
293  corner.x = position.x + radius;
294  corner.y = position.y,
295  corner_list.push_back( corner );
296  corner.x = position.x;
297  corner.y = position.y - radius;
298  corner_list.push_back( corner );
299  corner.x = position.x - radius;
300  corner.y = position.y;
301  corner_list.push_back( corner );
302  corner.x = position.x;
303  corner.y = position.y + radius;
304  corner_list.push_back( corner );
305 
307 }
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
virtual int GetCurrentLineWidth() const
Definition: plotter.h:168

References PLOTTER::GetCurrentLineWidth(), NO_FILL, and PLOTTER::PlotPoly().

Referenced by PLOTTER::Marker().

◆ markerSlash()

void PLOTTER::markerSlash ( const wxPoint &  pos,
int  radius 
)
protectedinherited

Plot a / bar centered on the position.

Building block for markers

Definition at line 317 of file plotter.cpp.

318 {
319  MoveTo( wxPoint( pos.x - radius, pos.y - radius ) );
320  FinishTo( wxPoint( pos.x + radius, pos.y + radius ) );
321 }
void FinishTo(const wxPoint &pos)
Definition: plotter.h:273
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263

References PLOTTER::FinishTo(), and PLOTTER::MoveTo().

Referenced by PLOTTER::Marker().

◆ markerSquare()

void PLOTTER::markerSquare ( const wxPoint &  position,
int  radius 
)
protectedinherited

Plot a square centered on the position.

Building block for markers

Definition at line 255 of file plotter.cpp.

256 {
257  double r = KiROUND( radius / 1.4142 );
258  std::vector< wxPoint > corner_list;
259  wxPoint corner;
260  corner.x = position.x + r;
261  corner.y = position.y + r;
262  corner_list.push_back( corner );
263  corner.x = position.x + r;
264  corner.y = position.y - r;
265  corner_list.push_back( corner );
266  corner.x = position.x - r;
267  corner.y = position.y - r;
268  corner_list.push_back( corner );
269  corner.x = position.x - r;
270  corner.y = position.y + r;
271  corner_list.push_back( corner );
272  corner.x = position.x + r;
273  corner.y = position.y + r;
274  corner_list.push_back( corner );
275 
277 }
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
virtual int GetCurrentLineWidth() const
Definition: plotter.h:168
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73

References PLOTTER::GetCurrentLineWidth(), KiROUND(), NO_FILL, and PLOTTER::PlotPoly().

Referenced by PLOTTER::Marker().

◆ markerVBar()

void PLOTTER::markerVBar ( const wxPoint &  pos,
int  radius 
)
protectedinherited

Plot a | bar centered on the position.

Building block for markers

Definition at line 331 of file plotter.cpp.

332 {
333  MoveTo( wxPoint( pos.x, pos.y - radius ) );
334  FinishTo( wxPoint( pos.x, pos.y + radius ) );
335 }
void FinishTo(const wxPoint &pos)
Definition: plotter.h:273
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263

References PLOTTER::FinishTo(), and PLOTTER::MoveTo().

Referenced by PLOTTER::Marker().

◆ MoveTo()

◆ OpenFile()

bool PLOTTER::OpenFile ( const wxString &  aFullFilename)
virtualinherited

Open or create the plot file aFullFilename.

Parameters
aFullFilenameis the full file name of the file to create.
Returns
true if success, false if the file cannot be created/opened.

Virtual because some plotters use ascii files, some others binary files (PDF) The base class open the file in text mode

Reimplemented in PDF_PLOTTER.

Definition at line 76 of file plotter.cpp.

77 {
78  m_filename = aFullFilename;
79 
80  wxASSERT( !m_outputFile );
81 
82  // Open the file in text mode (not suitable for all plotters but only for most of them.
83  m_outputFile = wxFopen( m_filename, wxT( "wt" ) );
84 
85  if( m_outputFile == nullptr )
86  return false ;
87 
88  return true;
89 }
wxString m_filename
Definition: plotter.h:600
FILE * m_outputFile
Output file.
Definition: plotter.h:590

References PLOTTER::m_filename, and PLOTTER::m_outputFile.

Referenced by GERBER_WRITER::createDrillFile(), PLACEFILE_GERBER_WRITER::CreatePlaceFile(), GENDRILL_WRITER_BASE::genDrillMapFile(), DIALOG_PLOT_SCHEMATIC::plotOneSheetDXF(), DIALOG_PLOT_SCHEMATIC::plotOneSheetHpgl(), DIALOG_PLOT_SCHEMATIC::plotOneSheetPS(), DIALOG_PLOT_SCHEMATIC::plotOneSheetSVG(), StartPlotBoard(), and SYMBOL_EDIT_FRAME::SVGPlotSymbol().

◆ PageSettings()

PAGE_INFO& PLOTTER::PageSettings ( )
inlineinherited

◆ PenFinish()

void PLOTTER::PenFinish ( )
inlineinherited

Definition at line 279 of file plotter.h.

280  {
281  // The point is not important with Z motion
282  PenTo( wxPoint( 0, 0 ), 'Z' );
283  }
virtual void PenTo(const wxPoint &pos, char plume)=0
Moveto/lineto primitive, moves the 'pen' to the specified direction.

References PLOTTER::PenTo().

Referenced by Circle(), FlashPadCircle(), GERBER_PLOTTER::PlotPoly(), PlotPoly(), DXF_PLOTTER::PlotPoly(), and Rect().

◆ PenTo()

void HPGL_PLOTTER::PenTo ( const wxPoint &  pos,
char  plume 
)
overridevirtual

Moveto/lineto primitive, moves the 'pen' to the specified direction.

Parameters
posis the target position.
plumespecifies the kind of motion: 'U' only moves the pen, 'D' draw a line from the current position and 'Z' finish the drawing and returns the 'pen' to rest (flushes the trace).

Implements PLOTTER.

Definition at line 509 of file HPGL_plotter.cpp.

510 {
511  wxASSERT( m_outputFile );
512 
513  if( plume == 'Z' )
514  {
515  m_penState = 'Z';
516  flushItem();
517  return;
518  }
519 
520  DPOINT pos_dev = userToDeviceCoordinates( pos );
522 
523  if( plume == 'U' )
524  {
525  m_penState = 'U';
526  flushItem();
527  }
528  else if( plume == 'D' )
529  {
530  m_penState = 'D';
531  startOrAppendItem( lastpos_dev, wxString::Format( "PA %.0f,%.0f;", pos_dev.x, pos_dev.y ) );
532  m_current_item->loc_end = pos_dev;
533  m_current_item->bbox.Merge( pos_dev );
534  }
535 
536  m_penLastpos = pos;
537 }
void flushItem()
Flush the current HPGL_ITEM and clear out the current item pointer.
BOX2D bbox
Bounding box of this item.
Definition: plotter_hpgl.h:192
FILE * m_outputFile
Output file.
Definition: plotter.h:590
DPOINT loc_end
Location the pen will be at when it finishes.
Definition: plotter_hpgl.h:189
bool startOrAppendItem(const DPOINT &location, const wxString &content)
Start a new HPGL_ITEM with the given string if necessary, or append the string to the current item.
wxPoint m_penLastpos
Definition: plotter.h:597
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: box2.h:363
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
virtual DPOINT userToDeviceCoordinates(const wxPoint &aCoordinate)
Modify coordinates according to the orientation, scale factor, and offsets trace.
Definition: plotter.cpp:92
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225
char m_penState
Definition: plotter.h:596

References HPGL_PLOTTER::HPGL_ITEM::bbox, flushItem(), Format(), HPGL_PLOTTER::HPGL_ITEM::loc_end, m_current_item, PLOTTER::m_outputFile, PLOTTER::m_penLastpos, PLOTTER::m_penState, BOX2< Vec >::Merge(), startOrAppendItem(), PLOTTER::userToDeviceCoordinates(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ PlotImage()

void PLOTTER::PlotImage ( const wxImage &  aImage,
const wxPoint &  aPos,
double  aScaleFactor 
)
virtualinherited

Only PostScript plotters can plot bitmaps.

A rectangle is plotted for plotters that cannot plot a bitmap.

Parameters
aImageis the bitmap.
aPosis position of the center of the bitmap.
aScaleFactoris the scale factor to apply to the bitmap size (this is not the plot scale factor).

Reimplemented in SVG_PLOTTER, PDF_PLOTTER, and PS_PLOTTER.

Definition at line 239 of file plotter.cpp.

240 {
241  wxSize size( aImage.GetWidth() * aScaleFactor, aImage.GetHeight() * aScaleFactor );
242 
243  wxPoint start = aPos;
244  start.x -= size.x / 2;
245  start.y -= size.y / 2;
246 
247  wxPoint end = start;
248  end.x += size.x;
249  end.y += size.y;
250 
251  Rect( start, end, FILL_TYPE::NO_FILL );
252 }
virtual void Rect(const wxPoint &p1, const wxPoint &p2, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH)=0

References NO_FILL, and PLOTTER::Rect().

Referenced by BITMAP_BASE::PlotImage(), and SVG_PLOTTER::PlotImage().

◆ PlotPoly() [1/2]

void HPGL_PLOTTER::PlotPoly ( const std::vector< wxPoint > &  aCornerList,
FILL_TYPE  aFill,
int  aWidth = USE_DEFAULT_LINE_WIDTH,
void *  aData = nullptr 
)
overridevirtual

Draw a polygon ( filled or not ).

Parameters
aCornerListis the corners list (a std::vector< wxPoint >).
aFillis the type of fill.
aWidthis the line width.
aDatais an auxiliary info (mainly for gerber format).

Implements PLOTTER.

Definition at line 454 of file HPGL_plotter.cpp.

456 {
457  if( aCornerList.size() <= 1 )
458  return;
459 
460  // Width less than zero is occasionally used to create background-only
461  // polygons. Don't set that as the plotter line width, that'll cause
462  // trouble. Also, later, skip plotting the outline if this is the case.
463  if( aWidth > 0 )
464  {
465  SetCurrentLineWidth( aWidth );
466  }
467 
468  MoveTo( aCornerList[0] );
469  startItem( userToDeviceCoordinates( aCornerList[0] ) );
470 
471  if( aFill == FILL_TYPE::FILLED_SHAPE )
472  {
473  // Draw the filled area
475 
476  m_current_item->content << wxString( "PM 0;\n" ); // Start polygon
477 
478  for( unsigned ii = 1; ii < aCornerList.size(); ++ii )
479  LineTo( aCornerList[ii] );
480 
481  int ii = aCornerList.size() - 1;
482 
483  if( aCornerList[ii] != aCornerList[0] )
484  LineTo( aCornerList[0] );
485 
486  m_current_item->content << hpgl_end_polygon_cmd; // Close, fill polygon and draw outlines
487  m_current_item->pen_returns = true;
488  }
489  else if( aWidth > 0 )
490  {
491  // Plot only the polygon outline.
492  for( unsigned ii = 1; ii < aCornerList.size(); ii++ )
493  LineTo( aCornerList[ii] );
494 
495  // Always close polygon if filled.
496  if( aFill != FILL_TYPE::NO_FILL )
497  {
498  int ii = aCornerList.size() - 1;
499 
500  if( aCornerList[ii] != aCornerList[0] )
501  LineTo( aCornerList[0] );
502  }
503  }
504 
505  PenFinish();
506 }
bool pen_returns
Whether the pen returns to its original state after the command.
Definition: plotter_hpgl.h:204
void PenFinish()
Definition: plotter.h:279
wxString content
Text of the command.
Definition: plotter_hpgl.h:213
void LineTo(const wxPoint &pos)
Definition: plotter.h:268
static const int USE_DEFAULT_LINE_WIDTH
Definition: plotter.h:126
static const char hpgl_end_polygon_cmd[]
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263
virtual DPOINT userToDeviceCoordinates(const wxPoint &aCoordinate)
Modify coordinates according to the orientation, scale factor, and offsets trace.
Definition: plotter.cpp:92
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225
bool startItem(const DPOINT &location)
Start a new HPGL_ITEM if necessary, keeping the current one if it exists.
virtual void SetCurrentLineWidth(int width, void *aData=nullptr) override
HPGL doesn't handle line thickness or color.
Definition: plotter_hpgl.h:72

References HPGL_PLOTTER::HPGL_ITEM::content, FILLED_SHAPE, hpgl_end_polygon_cmd, PLOTTER::LineTo(), m_current_item, PLOTTER::MoveTo(), NO_FILL, HPGL_PLOTTER::HPGL_ITEM::pen_returns, PLOTTER::PenFinish(), SetCurrentLineWidth(), startItem(), PLOTTER::USE_DEFAULT_LINE_WIDTH, and PLOTTER::userToDeviceCoordinates().

Referenced by FlashPadCustom(), FlashPadRect(), FlashPadRoundRect(), and FlashPadTrapez().

◆ PlotPoly() [2/2]

void PLOTTER::PlotPoly ( const SHAPE_LINE_CHAIN aCornerList,
FILL_TYPE  aFill,
int  aWidth = USE_DEFAULT_LINE_WIDTH,
void *  aData = nullptr 
)
virtualinherited

Draw a polygon ( filled or not ).

Parameters
aCornerListis the corners list (a SHAPE_LINE_CHAIN). must be closed (IsClosed() == true) for a polygon. Otherwise this is a polyline.
aFillis the type of fill.
aWidthis the line width.
aDatais an auxiliary info (mainly for gerber format).

Reimplemented in GERBER_PLOTTER.

Definition at line 625 of file plotter.cpp.

627 {
628  std::vector<wxPoint> cornerList;
629  cornerList.reserve( aCornerList.PointCount() );
630 
631  for( int ii = 0; ii < aCornerList.PointCount(); ii++ )
632  cornerList.emplace_back( aCornerList.CPoint( ii ) );
633 
634  if( aCornerList.IsClosed() && cornerList.front() != cornerList.back() )
635  cornerList.emplace_back( aCornerList.CPoint( 0 ) );
636 
637  PlotPoly( cornerList, aFill, aWidth, aData );
638 }
virtual void PlotPoly(const std::vector< wxPoint > &aCornerList, FILL_TYPE aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
int PointCount() const
Return the number of points (vertices) in this line chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
bool IsClosed() const override

References SHAPE_LINE_CHAIN::CPoint(), SHAPE_LINE_CHAIN::IsClosed(), PLOTTER::PlotPoly(), and SHAPE_LINE_CHAIN::PointCount().

◆ Rect()

void HPGL_PLOTTER::Rect ( const wxPoint &  p1,
const wxPoint &  p2,
FILL_TYPE  fill,
int  width = USE_DEFAULT_LINE_WIDTH 
)
overridevirtual

Implements PLOTTER.

Definition at line 386 of file HPGL_plotter.cpp.

387 {
388  wxASSERT( m_outputFile );
389 
390  DPOINT p1dev = userToDeviceCoordinates( p1 );
391  DPOINT p2dev = userToDeviceCoordinates( p2 );
392 
393  MoveTo( p1 );
394 
395  if( fill == FILL_TYPE::FILLED_SHAPE )
396  {
397  startOrAppendItem( p1dev, wxString::Format( "RA %.0f,%.0f;", p2dev.x, p2dev.y ) );
398  }
399 
400  startOrAppendItem( p1dev, wxString::Format( "EA %.0f,%.0f;", p2dev.x, p2dev.y ) );
401 
403  m_current_item->bbox.Merge( p2dev );
404  PenFinish();
405 }
void PenFinish()
Definition: plotter.h:279
BOX2D bbox
Bounding box of this item.
Definition: plotter_hpgl.h:192
FILE * m_outputFile
Output file.
Definition: plotter.h:590
DPOINT loc_end
Location the pen will be at when it finishes.
Definition: plotter_hpgl.h:189
bool startOrAppendItem(const DPOINT &location, const wxString &content)
Start a new HPGL_ITEM with the given string if necessary, or append the string to the current item.
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: box2.h:363
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
virtual DPOINT userToDeviceCoordinates(const wxPoint &aCoordinate)
Modify coordinates according to the orientation, scale factor, and offsets trace.
Definition: plotter.cpp:92
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225
DPOINT loc_start
Location the pen should start at.
Definition: plotter_hpgl.h:185

References HPGL_PLOTTER::HPGL_ITEM::bbox, FILLED_SHAPE, Format(), HPGL_PLOTTER::HPGL_ITEM::loc_end, HPGL_PLOTTER::HPGL_ITEM::loc_start, m_current_item, PLOTTER::m_outputFile, BOX2< Vec >::Merge(), PLOTTER::MoveTo(), PLOTTER::PenFinish(), startOrAppendItem(), PLOTTER::userToDeviceCoordinates(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ RenderSettings()

◆ segmentAsOval()

void PLOTTER::segmentAsOval ( const wxPoint &  start,
const wxPoint &  end,
int  width,
OUTLINE_MODE  tracemode 
)
protectedinherited

Convert a thick segment and plot it as an oval.

Definition at line 460 of file plotter.cpp.

462 {
463  wxPoint center( (start.x + end.x) / 2, (start.y + end.y) / 2 );
464  wxSize size( end.x - start.x, end.y - start.y );
465  double orient;
466 
467  if( size.y == 0 )
468  orient = 0;
469  else if( size.x == 0 )
470  orient = 900;
471  else
472  orient = -ArcTangente( size.y, size.x );
473 
474  size.x = KiROUND( EuclideanNorm( size ) ) + width;
475  size.y = width;
476 
477  FlashPadOval( center, size, orient, tracemode, nullptr );
478 }
double EuclideanNorm(const wxPoint &vector)
Euclidean norm of a 2D vector.
Definition: trigo.h:146
virtual void FlashPadOval(const wxPoint &aPadPos, const wxSize &aSize, double aPadOrient, OUTLINE_MODE aTraceMode, void *aData)=0
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
double ArcTangente(int dy, int dx)
Definition: trigo.cpp:183

References ArcTangente(), EuclideanNorm(), PLOTTER::FlashPadOval(), and KiROUND().

Referenced by GERBER_PLOTTER::ThickSegment(), ThickSegment(), and PLOTTER::ThickSegment().

◆ SetColor()

virtual void HPGL_PLOTTER::SetColor ( const COLOR4D color)
inlineoverridevirtual

Implements PLOTTER.

Definition at line 83 of file plotter_hpgl.h.

83 {}

◆ SetColorMode()

virtual void PLOTTER::SetColorMode ( bool  aColorMode)
inlinevirtualinherited

◆ SetCreator()

◆ SetCurrentLineWidth()

virtual void HPGL_PLOTTER::SetCurrentLineWidth ( int  width,
void *  aData = nullptr 
)
inlineoverridevirtual

HPGL doesn't handle line thickness or color.

Implements PLOTTER.

Definition at line 72 of file plotter_hpgl.h.

73  {
74  // This is the truth
76  }
int m_currentPenWidth
Definition: plotter.h:595
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123
double penDiameter
Definition: plotter_hpgl.h:168

References PLOTTER::m_currentPenWidth, penDiameter, and PLOTTER::userToDeviceSize().

Referenced by Circle(), and PlotPoly().

◆ SetDash()

void HPGL_PLOTTER::SetDash ( PLOT_DASH_TYPE  dashed)
overridevirtual

HPGL supports dashed lines.

Implements PLOTTER.

Definition at line 540 of file HPGL_plotter.cpp.

541 {
542  dashType = dashed;
543  flushItem();
544 }
void flushItem()
Flush the current HPGL_ITEM and clear out the current item pointer.
PLOT_DASH_TYPE dashType
Definition: plotter_hpgl.h:171

References dashType, and flushItem().

◆ SetGerberCoordinatesFormat()

virtual void PLOTTER::SetGerberCoordinatesFormat ( int  aResolution,
bool  aUseInches = false 
)
inlinevirtualinherited

Reimplemented in GERBER_PLOTTER.

Definition at line 470 of file plotter.h.

471  {
472  // NOP for most plotters. Only for Gerber plotter
473  }

Referenced by GENDRILL_WRITER_BASE::genDrillMapFile(), and initializePlotter().

◆ SetLayerPolarity()

virtual void PLOTTER::SetLayerPolarity ( bool  aPositive)
inlinevirtualinherited

Set the current Gerber layer polarity to positive or negative by writing %LPD*% or %LPC*% to the Gerber file, respectively.

(obviously starts a new Gerber layer, too)

Parameters
aPositiveis the layer polarity and true for positive. It's not useful with most other plotter since they can't 'scratch' the film like photoplotter imagers do

Reimplemented in GERBER_PLOTTER.

Definition at line 456 of file plotter.h.

457  {
458  // NOP for most plotters
459  }

Referenced by PlotOneBoardLayer().

◆ SetNegative()

virtual void PLOTTER::SetNegative ( bool  aNegative)
inlinevirtualinherited

Definition at line 142 of file plotter.h.

143  {
144  m_negativeMode = aNegative;
145  }
bool m_negativeMode
Definition: plotter.h:594

References PLOTTER::m_negativeMode.

Referenced by FillNegativeKnockout().

◆ SetPageSettings()

◆ SetPenDiameter()

void HPGL_PLOTTER::SetPenDiameter ( double  diameter)
virtual

Definition at line 380 of file HPGL_plotter.cpp.

381 {
382  penDiameter = diameter;
383 }
double penDiameter
Definition: plotter_hpgl.h:168

References penDiameter.

Referenced by ConfigureHPGLPenSizes(), HPGL_PLOTTER(), and DIALOG_PLOT_SCHEMATIC::plotOneSheetHpgl().

◆ SetPenNumber()

virtual void HPGL_PLOTTER::SetPenNumber ( int  number)
inlinevirtual

Definition at line 90 of file plotter_hpgl.h.

91  {
92  penNumber = number;
93  }

References penNumber.

Referenced by ConfigureHPGLPenSizes(), GENDRILL_WRITER_BASE::genDrillMapFile(), and HPGL_PLOTTER().

◆ SetPenSpeed()

virtual void HPGL_PLOTTER::SetPenSpeed ( int  speed)
inlinevirtual

Definition at line 85 of file plotter_hpgl.h.

86  {
87  penSpeed = speed;
88  }

References penSpeed.

Referenced by ConfigureHPGLPenSizes(), GENDRILL_WRITER_BASE::genDrillMapFile(), and HPGL_PLOTTER().

◆ SetRenderSettings()

◆ SetSvgCoordinatesFormat()

virtual void PLOTTER::SetSvgCoordinatesFormat ( unsigned  aResolution,
bool  aUseInches = false 
)
inlinevirtualinherited

Reimplemented in SVG_PLOTTER.

Definition at line 475 of file plotter.h.

476  {
477  // NOP for most plotters. Only for SVG plotter
478  }

Referenced by initializePlotter().

◆ SetTargetChordLength()

void HPGL_PLOTTER::SetTargetChordLength ( double  chord_len)

Set the target length of chords used to draw approximated circles and arcs.

Parameters
chord_lenthe chord length in IUs.

Definition at line 252 of file HPGL_plotter.cpp.

253 {
254  arcTargetChordLength = userToDeviceSize( chord_len );
255 }
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123
double arcTargetChordLength
Definition: plotter_hpgl.h:169

References arcTargetChordLength, and PLOTTER::userToDeviceSize().

Referenced by DIALOG_PLOT_SCHEMATIC::plotOneSheetHpgl().

◆ SetTextMode()

virtual void PLOTTER::SetTextMode ( PLOT_TEXT_MODE  mode)
inlinevirtualinherited

Change the current text mode.

See the PlotTextMode explanation at the beginning of the file.

Reimplemented in DXF_PLOTTER, and PSLIKE_PLOTTER.

Definition at line 465 of file plotter.h.

466  {
467  // NOP for most plotters.
468  }

Referenced by initializePlotter(), and PlotOneBoardLayer().

◆ SetTitle()

virtual void PLOTTER::SetTitle ( const wxString &  aTitle)
inlinevirtualinherited

Definition at line 176 of file plotter.h.

176 { m_title = aTitle; }
wxString m_title
Definition: plotter.h:601

References PLOTTER::m_title.

Referenced by DIALOG_PLOT_SCHEMATIC::createPDFFile().

◆ SetUserCoords()

void HPGL_PLOTTER::SetUserCoords ( bool  user_coords)
inline

Switch to the user coordinate system.

Definition at line 56 of file plotter_hpgl.h.

56 { useUserCoords = user_coords; }
bool useUserCoords
Definition: plotter_hpgl.h:172

References useUserCoords.

Referenced by DIALOG_PLOT_SCHEMATIC::plotOneSheetHpgl().

◆ SetUserCoordsFit()

void HPGL_PLOTTER::SetUserCoordsFit ( bool  user_coords_fit)
inline

Set whether the user coordinate system is fit to content.

Definition at line 59 of file plotter_hpgl.h.

59 { fitUserCoords = user_coords_fit; }
bool fitUserCoords
Definition: plotter_hpgl.h:173

References fitUserCoords.

Referenced by DIALOG_PLOT_SCHEMATIC::plotOneSheetHpgl().

◆ SetViewport()

void HPGL_PLOTTER::SetViewport ( const wxPoint &  aOffset,
double  aIusPerDecimil,
double  aScale,
bool  aMirror 
)
overridevirtual

Set the plot offset and scaling for the current plot.

Parameters
aOffsetis the plot offset.
aIusPerDecimilgives the scaling factor from IUs to device units
aScaleis the user set plot scaling factor (either explicitly or using 'fit to A4').
aMirrorflips the plot in the Y direction (useful for toner transfers or some kind of film).

Implements PLOTTER.

Definition at line 236 of file HPGL_plotter.cpp.

238 {
239  m_plotOffset = aOffset;
240  m_plotScale = aScale;
241  m_IUsPerDecimil = aIusPerDecimil;
242  m_iuPerDeviceUnit = PLUsPERDECIMIL / aIusPerDecimil;
243 
244  // Compute the paper size in IUs.
246  m_paperSize.x *= 10.0 * aIusPerDecimil;
247  m_paperSize.y *= 10.0 * aIusPerDecimil;
248  m_plotMirror = aMirror;
249 }
double m_iuPerDeviceUnit
Definition: plotter.h:581
double m_IUsPerDecimil
Definition: plotter.h:579
double m_plotScale
Plot scale - chosen by the user (even implicitly with 'fit in a4')
Definition: plotter.h:573
bool m_plotMirror
Definition: plotter.h:584
const wxSize & GetSizeMils() const
Definition: page_info.h:135
wxPoint m_plotOffset
Definition: plotter.h:583
PAGE_INFO m_pageInfo
Definition: plotter.h:602
static const double PLUsPERDECIMIL
wxSize m_paperSize
Definition: plotter.h:603

References PAGE_INFO::GetSizeMils(), PLOTTER::m_iuPerDeviceUnit, PLOTTER::m_IUsPerDecimil, PLOTTER::m_pageInfo, PLOTTER::m_paperSize, PLOTTER::m_plotMirror, PLOTTER::m_plotOffset, PLOTTER::m_plotScale, and PLUsPERDECIMIL.

Referenced by DIALOG_PLOT_SCHEMATIC::plotOneSheetHpgl().

◆ sketchOval()

void PLOTTER::sketchOval ( const wxPoint &  pos,
const wxSize &  size,
double  orient,
int  width 
)
protectedinherited

Definition at line 481 of file plotter.cpp.

482 {
483  SetCurrentLineWidth( width );
484  width = m_currentPenWidth;
485  int radius, deltaxy, cx, cy;
486  wxSize size( aSize );
487 
488  if( size.x > size.y )
489  {
490  std::swap( size.x, size.y );
491  orient = AddAngles( orient, 900 );
492  }
493 
494  deltaxy = size.y - size.x; /* distance between centers of the oval */
495  radius = ( size.x - width ) / 2;
496  cx = -radius;
497  cy = -deltaxy / 2;
498  RotatePoint( &cx, &cy, orient );
499  MoveTo( wxPoint( cx + pos.x, cy + pos.y ) );
500  cx = -radius;
501  cy = deltaxy / 2;
502  RotatePoint( &cx, &cy, orient );
503  FinishTo( wxPoint( cx + pos.x, cy + pos.y ) );
504 
505  cx = radius;
506  cy = -deltaxy / 2;
507  RotatePoint( &cx, &cy, orient );
508  MoveTo( wxPoint( cx + pos.x, cy + pos.y ) );
509  cx = radius;
510  cy = deltaxy / 2;
511  RotatePoint( &cx, &cy, orient );
512  FinishTo( wxPoint( cx + pos.x, cy + pos.y ) );
513 
514  cx = 0;
515  cy = deltaxy / 2;
516  RotatePoint( &cx, &cy, orient );
517  Arc( wxPoint( cx + pos.x, cy + pos.y ),
518  orient + 1800, orient + 3600,
519  radius, FILL_TYPE::NO_FILL );
520  cx = 0;
521  cy = -deltaxy / 2;
522  RotatePoint( &cx, &cy, orient );
523  Arc( wxPoint( cx + pos.x, cy + pos.y ),
524  orient, orient + 1800,
525  radius, FILL_TYPE::NO_FILL );
526 }
void FinishTo(const wxPoint &pos)
Definition: plotter.h:273
virtual void Arc(const wxPoint &centre, double StAngle, double EndAngle, int rayon, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH)
Generic fallback: arc rendered as a polyline.
Definition: plotter.cpp:164
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:229
int m_currentPenWidth
Definition: plotter.h:595
T AddAngles(T a1, T2 a2)
Add two angles (keeping the result normalized). T2 is here.
Definition: trigo.h:341
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.

References AddAngles(), PLOTTER::Arc(), PLOTTER::FinishTo(), PLOTTER::m_currentPenWidth, PLOTTER::MoveTo(), NO_FILL, RotatePoint(), and PLOTTER::SetCurrentLineWidth().

Referenced by PSLIKE_PLOTTER::FlashPadOval(), GERBER_PLOTTER::FlashPadOval(), FlashPadOval(), and DXF_PLOTTER::FlashPadOval().

◆ sortItems()

void HPGL_PLOTTER::sortItems ( std::list< HPGL_ITEM > &  items)
staticprotected

Sort a list of HPGL items to improve plotting speed on mechanical plotters.

Parameters
items- items to sort

Definition at line 857 of file HPGL_plotter.cpp.

858 {
859  if( items.size() < 2 )
860  {
861  return;
862  }
863 
864  std::list<HPGL_ITEM> target;
865 
866  // Plot items are sorted to improve print time on mechanical plotters. This
867  // means
868  // 1) Avoid excess pen-switching - once a pen is selected, keep printing
869  // with it until no more items using that pen remain.
870  // 2) Within the items for one pen, avoid bouncing back and forth around
871  // the page; items should be sequenced with nearby items.
872  //
873  // This is essentially a variant of the Traveling Salesman Problem where
874  // the cities are themselves edges that must be traversed. This is of course
875  // a famously NP-Hard problem and this particular variant has a monstrous
876  // number of "cities". For now, we're using a naive nearest-neighbor search,
877  // which is less than optimal but (usually!) better than nothing, very
878  // simple to implement, and fast enough.
879  //
880  // Items are moved one at a time from `items` into `target`, searching
881  // each time for the first one matching the above criteria. Then, all of
882  // `target` is moved back into `items`.
883 
884  // Get the first one started
885  HPGL_ITEM last_item = items.front();
886  items.pop_front();
887  target.emplace_back( last_item );
888 
889  while( !items.empty() )
890  {
891  auto best_it = items.begin();
892  double best_dist = dpoint_dist( last_item.loc_end, best_it->loc_start );
893 
894  for( auto search_it = best_it; search_it != items.end(); search_it++ )
895  {
896  // Immediately forget an item as "best" if another one is a better pen match
897  if( best_it->pen != last_item.pen && search_it->pen == last_item.pen )
898  {
899  best_it = search_it;
900  continue;
901  }
902 
903  double const dist = dpoint_dist( last_item.loc_end, search_it->loc_start );
904 
905  if( dist < best_dist )
906  {
907  best_it = search_it;
908  best_dist = dist;
909  continue;
910  }
911  }
912 
913  target.emplace_back( *best_it );
914  last_item = *best_it;
915  items.erase( best_it );
916  }
917 
918  items.splice( items.begin(), target );
919 }
static double dpoint_dist(const DPOINT &a, const DPOINT &b)
Compute the distance between two DPOINT points.

References dpoint_dist(), HPGL_PLOTTER::HPGL_ITEM::loc_end, and HPGL_PLOTTER::HPGL_ITEM::pen.

Referenced by EndPlot().

◆ StartBlock()

virtual void PLOTTER::StartBlock ( void *  aData)
inlinevirtualinherited

calling this function allows one to define the beginning of a group of drawing items, for instance in SVG or Gerber format.

(example: group all segments of a letter or a text)

Parameters
aDatacan define any parameter for most of plotters: do nothing

Reimplemented in SVG_PLOTTER, and GERBER_PLOTTER.

Definition at line 487 of file plotter.h.

487 {}

Referenced by SCH_SYMBOL::Plot(), BRDITEMS_PLOTTER::PlotFilledAreas(), and PlotStandardLayer().

◆ startItem()

bool HPGL_PLOTTER::startItem ( const DPOINT location)
protected

Start a new HPGL_ITEM if necessary, keeping the current one if it exists.

Parameters
locationis the location of the item.
Returns
whether a new item was made.

Definition at line 822 of file HPGL_plotter.cpp.

823 {
824  return startOrAppendItem( location, wxEmptyString );
825 }
bool startOrAppendItem(const DPOINT &location, const wxString &content)
Start a new HPGL_ITEM with the given string if necessary, or append the string to the current item.

References startOrAppendItem().

Referenced by PlotPoly().

◆ startOrAppendItem()

bool HPGL_PLOTTER::startOrAppendItem ( const DPOINT location,
const wxString &  content 
)
protected

Start a new HPGL_ITEM with the given string if necessary, or append the string to the current item.

Parameters
locationis the location of the item, if a new one is made.
contentis the content substring.
Returns
whether a new item was made.

Definition at line 834 of file HPGL_plotter.cpp.

835 {
836  if( m_current_item == nullptr )
837  {
838  HPGL_ITEM item;
839  item.loc_start = location;
840  item.loc_end = location;
841  item.bbox = BOX2D( location );
842  item.pen = penNumber;
843  item.dashType = dashType;
844  item.content = content;
845  m_items.push_back( item );
846  m_current_item = &m_items.back();
847  return true;
848  }
849  else
850  {
851  m_current_item->content << content;
852  return false;
853  }
854 }
BOX2< VECTOR2D > BOX2D
Definition: box2.h:507
wxString content
Text of the command.
Definition: plotter_hpgl.h:213
std::list< HPGL_ITEM > m_items
Definition: plotter_hpgl.h:224
HPGL_ITEM * m_current_item
Definition: plotter_hpgl.h:225
PLOT_DASH_TYPE dashType
Definition: plotter_hpgl.h:171

References HPGL_PLOTTER::HPGL_ITEM::bbox, HPGL_PLOTTER::HPGL_ITEM::content, dashType, HPGL_PLOTTER::HPGL_ITEM::dashType, HPGL_PLOTTER::HPGL_ITEM::loc_end, HPGL_PLOTTER::HPGL_ITEM::loc_start, m_current_item, m_items, HPGL_PLOTTER::HPGL_ITEM::pen, and penNumber.

Referenced by Arc(), Circle(), FlashPadCircle(), PenTo(), Rect(), and startItem().

◆ StartPlot()

bool HPGL_PLOTTER::StartPlot ( )
overridevirtual

At the start of the HPGL plot pen speed and number are requested.

Implements PLOTTER.

Definition at line 258 of file HPGL_plotter.cpp.

259 {
260  wxASSERT( m_outputFile );
261  fprintf( m_outputFile, "IN;VS%d;PU;PA;SP%d;\n", penSpeed, penNumber );
262 
263  // Set HPGL Pen Thickness (in mm) (useful in polygon fill command)
264  double penThicknessMM = userToDeviceSize( penDiameter )/40;
265  fprintf( m_outputFile, "PT %.1f;\n", penThicknessMM );
266 
267  return true;
268 }
FILE * m_outputFile
Output file.
Definition: plotter.h:590
virtual DPOINT userToDeviceSize(const wxSize &size)
Modify size according to the plotter scale factors (wxSize version, returns a DPOINT).
Definition: plotter.cpp:123
double penDiameter
Definition: plotter_hpgl.h:168

References PLOTTER::m_outputFile, penDiameter, penNumber, penSpeed, and PLOTTER::userToDeviceSize().

Referenced by DIALOG_PLOT_SCHEMATIC::plotOneSheetHpgl().

◆ Text()

void PLOTTER::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  aPenWidth,
bool  aItalic,
bool  aBold,
bool  aMultilineAllowed = false,
void *  aData = nullptr 
)
virtualinherited

Draw text with the plotter.

Same as GRText, but plot graphic text instead of draw it.

For convenience it accept the color to use for specific plotters (GERBER) aData is used to pass extra parameters.

Parameters
aPosis the text position (according to aH_justify, aV_justify).
aColoris the text color.
aTextis the text to draw.
aOrientis the angle in 0.1 degree.
aSizeis the text size (size.x or size.y can be < 0 for mirrored texts).
aH_justifyis the horizontal justification (Left, center, right).
aV_justifyis the vertical justification (bottom, center, top).
aPenWidthis the line width (if = 0, use plot default line width).
aItalicis the true to simulate an italic font.
aBolduse true to use a bold font Useful only with default width value (aWidth = 0).
aMultilineAlloweduse true to plot text as multiline, otherwise single line.
aDatais a parameter used by some plotters in SetCurrentLineWidth(), not directly used here.

Reimplemented in SVG_PLOTTER, PDF_PLOTTER, PS_PLOTTER, DXF_PLOTTER, and GERBER_PLOTTER.

Definition at line 219 of file gr_text.cpp.

231 {
232  SetColor( aColor );
233  SetCurrentLineWidth( aPenWidth, aData );
234 
235  GRText( nullptr, aPos, aColor, aText, aOrient, aSize, aH_justify, aV_justify, aPenWidth,
236  aItalic, aBold, nullptr, nullptr, this );
237 }
void GRText(wxDC *aDC, 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, void(*aCallback)(int x0, int y0, int xf, int yf, void *aData), void *aCallbackData, PLOTTER *aPlotter)
Draw a graphic text (like footprint texts).
Definition: gr_text.cpp:129
virtual void SetColor(const COLOR4D &color)=0
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.

References GRText(), PLOTTER::SetColor(), and PLOTTER::SetCurrentLineWidth().

Referenced by GENDRILL_WRITER_BASE::genDrillMapFile(), LIB_TEXT::Plot(), LIB_FIELD::Plot(), SCH_FIELD::Plot(), SCH_TEXT::Plot(), PlotDrawingSheet(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotPcbText(), LIB_PIN::PlotPinTexts(), GERBER_PLOTTER::Text(), DXF_PLOTTER::Text(), PS_PLOTTER::Text(), PDF_PLOTTER::Text(), and SVG_PLOTTER::Text().

◆ ThickArc()

void PLOTTER::ThickArc ( const wxPoint &  centre,
double  StAngle,
double  EndAngle,
int  rayon,
int  width,
OUTLINE_MODE  tracemode,
void *  aData 
)
virtualinherited

Reimplemented in GERBER_PLOTTER.

Definition at line 553 of file plotter.cpp.

555 {
556  if( tracemode == FILLED )
557  {
558  Arc( centre, StAngle, EndAngle, radius, FILL_TYPE::NO_FILL, width );
559  }
560  else
561  {
562  SetCurrentLineWidth( -1 );
563  Arc( centre, StAngle, EndAngle,
564  radius - ( width - m_currentPenWidth ) / 2, FILL_TYPE::NO_FILL, -1 );
565  Arc( centre, StAngle, EndAngle,
566  radius + ( width - m_currentPenWidth ) / 2, FILL_TYPE::NO_FILL, -1 );
567  }
568 }
virtual void Arc(const wxPoint &centre, double StAngle, double EndAngle, int rayon, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH)
Generic fallback: arc rendered as a polyline.
Definition: plotter.cpp:164
int m_currentPenWidth
Definition: plotter.h:595
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.

References PLOTTER::Arc(), FILLED, PLOTTER::m_currentPenWidth, NO_FILL, and PLOTTER::SetCurrentLineWidth().

Referenced by BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotPcbShape(), and PlotStandardLayer().

◆ ThickCircle()

void PLOTTER::ThickCircle ( const wxPoint &  pos,
int  diametre,
int  width,
OUTLINE_MODE  tracemode,
void *  aData 
)
virtualinherited

Reimplemented in GERBER_PLOTTER.

Definition at line 595 of file plotter.cpp.

597 {
598  if( tracemode == FILLED )
599  {
600  Circle( pos, diametre, FILL_TYPE::NO_FILL, width );
601  }
602  else
603  {
604  SetCurrentLineWidth( -1 );
605  Circle( pos, diametre - width + m_currentPenWidth, FILL_TYPE::NO_FILL, -1 );
606  Circle( pos, diametre + width - m_currentPenWidth, FILL_TYPE::NO_FILL, -1 );
607  }
608 }
int m_currentPenWidth
Definition: plotter.h:595
virtual void Circle(const wxPoint &pos, int diametre, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH)=0
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.

References PLOTTER::Circle(), FILLED, PLOTTER::m_currentPenWidth, NO_FILL, and PLOTTER::SetCurrentLineWidth().

Referenced by BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), and BRDITEMS_PLOTTER::PlotPcbShape().

◆ ThickRect()

void PLOTTER::ThickRect ( const wxPoint &  p1,
const wxPoint &  p2,
int  width,
OUTLINE_MODE  tracemode,
void *  aData 
)
virtualinherited

Reimplemented in GERBER_PLOTTER.

Definition at line 571 of file plotter.cpp.

573 {
574  if( tracemode == FILLED )
575  {
576  Rect( p1, p2, FILL_TYPE::NO_FILL, width );
577  }
578  else
579  {
580  SetCurrentLineWidth( -1 );
581  wxPoint offsetp1( p1.x - (width - m_currentPenWidth) / 2,
582  p1.y - (width - m_currentPenWidth) / 2 );
583  wxPoint offsetp2( p2.x + (width - m_currentPenWidth) / 2,
584  p2.y + (width - m_currentPenWidth) / 2 );
585  Rect( offsetp1, offsetp2, FILL_TYPE::NO_FILL, -1 );
586  offsetp1.x += ( width - m_currentPenWidth );
587  offsetp1.y += ( width - m_currentPenWidth );
588  offsetp2.x -= ( width - m_currentPenWidth );
589  offsetp2.y -= ( width - m_currentPenWidth );
590  Rect( offsetp1, offsetp2, FILL_TYPE::NO_FILL, -1 );
591  }
592 }
virtual void Rect(const wxPoint &p1, const wxPoint &p2, FILL_TYPE fill, int width=USE_DEFAULT_LINE_WIDTH)=0
int m_currentPenWidth
Definition: plotter.h:595
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.

References FILLED, PLOTTER::m_currentPenWidth, NO_FILL, PLOTTER::Rect(), and PLOTTER::SetCurrentLineWidth().

◆ ThickSegment()

void HPGL_PLOTTER::ThickSegment ( const wxPoint &  start,
const wxPoint &  end,
int  width,
OUTLINE_MODE  tracemode,
void *  aData 
)
overridevirtual

Reimplemented from PLOTTER.

Definition at line 547 of file HPGL_plotter.cpp.

549 {
550  wxASSERT( m_outputFile );
551 
552  // Suppress overlap if pen is too big
553  if( penDiameter >= width )
554  {
555  MoveTo( start );
556  FinishTo( end );
557  }
558  else
559  {
560  segmentAsOval( start, end, width, tracemode );
561  }
562 }
void segmentAsOval(const wxPoint &start, const wxPoint &end, int width, OUTLINE_MODE tracemode)
Convert a thick segment and plot it as an oval.
Definition: plotter.cpp:460
void FinishTo(const wxPoint &pos)
Definition: plotter.h:273
FILE * m_outputFile
Output file.
Definition: plotter.h:590
void MoveTo(const wxPoint &pos)
Definition: plotter.h:263
double penDiameter
Definition: plotter_hpgl.h:168

References PLOTTER::FinishTo(), PLOTTER::m_outputFile, PLOTTER::MoveTo(), penDiameter, and PLOTTER::segmentAsOval().

◆ userToDeviceCoordinates()

DPOINT PLOTTER::userToDeviceCoordinates ( const wxPoint &  aCoordinate)
protectedvirtualinherited

Modify coordinates according to the orientation, scale factor, and offsets trace.

Also convert from a wxPoint to DPOINT, since some output engines needs floating point coordinates.

Definition at line 92 of file plotter.cpp.

93 {
94  wxPoint pos = aCoordinate - m_plotOffset;
95 
96  // Don't allow overflows; they can cause rendering failures in some file viewers
97  // (such as Acrobat)
98  int clampSize = MAX_PAGE_SIZE_MILS * m_IUsPerDecimil * 10 / 2;
99  pos.x = std::max( -clampSize, std::min( pos.x, clampSize ) );
100  pos.y = std::max( -clampSize, std::min( pos.y, clampSize ) );
101 
102  double x = pos.x * m_plotScale;
103  double y = ( m_paperSize.y - pos.y * m_plotScale );
104 
105  if( m_plotMirror )
106  {
108  x = ( m_paperSize.x - pos.x * m_plotScale );
109  else
110  y = pos.y * m_plotScale;
111  }
112 
113  if( m_yaxisReversed )
114  y = m_paperSize.y - y;
115 
116  x *= m_iuPerDeviceUnit;
117  y *= m_iuPerDeviceUnit;
118 
119  return DPOINT( x, y );
120 }
double m_iuPerDeviceUnit
Definition: plotter.h:581
double m_IUsPerDecimil
Definition: plotter.h:579
double m_plotScale
Plot scale - chosen by the user (even implicitly with 'fit in a4')
Definition: plotter.h:573
bool m_yaxisReversed
Definition: plotter.h:587
bool m_plotMirror
Definition: plotter.h:584
wxPoint m_plotOffset
Definition: plotter.h:583
#define MAX_PAGE_SIZE_MILS
Definition: page_info.h:41
VECTOR2< double > DPOINT
Definition: vector2d.h:628
wxSize m_paperSize
Definition: plotter.h:603
bool m_mirrorIsHorizontal
Definition: plotter.h:586

References PLOTTER::m_iuPerDeviceUnit, PLOTTER::m_IUsPerDecimil, PLOTTER::m_mirrorIsHorizontal, PLOTTER::m_paperSize, PLOTTER::m_plotMirror, PLOTTER::m_plotOffset, PLOTTER::m_plotScale, PLOTTER::m_yaxisReversed, and MAX_PAGE_SIZE_MILS.

Referenced by DXF_PLOTTER::Arc(), Arc(), PS_PLOTTER::Arc(), PDF_PLOTTER::Arc(), SVG_PLOTTER::Arc(), SVG_PLOTTER::BezierCurve(), Circle(), DXF_PLOTTER::Circle(), PS_PLOTTER::Circle(), PDF_PLOTTER::Circle(), SVG_PLOTTER::Circle(), PSLIKE_PLOTTER::computeTextParameters(), GERBER_PLOTTER::FlashPadChamferRoundRect(), GERBER_PLOTTER::FlashPadCircle(), FlashPadCircle(), GERBER_PLOTTER::FlashPadCustom(), GERBER_PLOTTER::FlashPadOval(), GERBER_PLOTTER::FlashPadRect(), GERBER_PLOTTER::FlashPadRoundRect(), GERBER_PLOTTER::FlashPadTrapez(), GERBER_PLOTTER::FlashRegularPolygon(), GERBER_PLOTTER::PenTo(), DXF_PLOTTER::PenTo(), PenTo(), PS_PLOTTER::PenTo(), PDF_PLOTTER::PenTo(), SVG_PLOTTER::PenTo(), GERBER_PLOTTER::plotArc(), PS_PLOTTER::PlotImage(), PDF_PLOTTER::PlotImage(), PlotPoly(), PS_PLOTTER::PlotPoly(), PDF_PLOTTER::PlotPoly(), SVG_PLOTTER::PlotPoly(), Rect(), PS_PLOTTER::Rect(), PDF_PLOTTER::Rect(), SVG_PLOTTER::Rect(), DXF_PLOTTER::Text(), PS_PLOTTER::Text(), and SVG_PLOTTER::Text().

◆ userToDeviceSize() [1/2]

◆ userToDeviceSize() [2/2]

double PLOTTER::userToDeviceSize ( double  size) const
protectedvirtualinherited

Modify size according to the plotter scale factors (simple double version).

Definition at line 130 of file plotter.cpp.

131 {
132  return size * m_plotScale * m_iuPerDeviceUnit;
133 }
double m_iuPerDeviceUnit
Definition: plotter.h:581
double m_plotScale
Plot scale - chosen by the user (even implicitly with 'fit in a4')
Definition: plotter.h:573

References PLOTTER::m_iuPerDeviceUnit, and PLOTTER::m_plotScale.

Member Data Documentation

◆ arcMinChordDegrees

double HPGL_PLOTTER::arcMinChordDegrees
protected

Definition at line 170 of file plotter_hpgl.h.

Referenced by Arc(), and Circle().

◆ arcTargetChordLength

double HPGL_PLOTTER::arcTargetChordLength
protected

Definition at line 169 of file plotter_hpgl.h.

Referenced by Arc(), Circle(), and SetTargetChordLength().

◆ dashType

PLOT_DASH_TYPE HPGL_PLOTTER::dashType
protected

Definition at line 171 of file plotter_hpgl.h.

Referenced by SetDash(), and startOrAppendItem().

◆ DO_NOT_SET_LINE_WIDTH

◆ fitUserCoords

bool HPGL_PLOTTER::fitUserCoords
protected

Definition at line 173 of file plotter_hpgl.h.

Referenced by EndPlot(), and SetUserCoordsFit().

◆ m_colorMode

◆ m_creator

wxString PLOTTER::m_creator
protectedinherited

◆ m_current_item

HPGL_ITEM* HPGL_PLOTTER::m_current_item
protected

◆ m_currentPenWidth

◆ m_filename

wxString PLOTTER::m_filename
protectedinherited

◆ m_headerExtraLines

wxArrayString PLOTTER::m_headerExtraLines
protectedinherited

◆ m_items

std::list<HPGL_ITEM> HPGL_PLOTTER::m_items
protected

Definition at line 224 of file plotter_hpgl.h.

Referenced by EndPlot(), and startOrAppendItem().

◆ m_iuPerDeviceUnit

◆ m_IUsPerDecimil

◆ m_mirrorIsHorizontal

bool PLOTTER::m_mirrorIsHorizontal
protectedinherited

◆ m_negativeMode

bool PLOTTER::m_negativeMode
protectedinherited

Definition at line 594 of file plotter.h.

Referenced by PLOTTER::PLOTTER(), PSLIKE_PLOTTER::SetColor(), and PLOTTER::SetNegative().

◆ m_outputFile

FILE* PLOTTER::m_outputFile
protectedinherited

Output file.

Definition at line 590 of file plotter.h.

Referenced by DXF_PLOTTER::Arc(), Arc(), PS_PLOTTER::Arc(), SVG_PLOTTER::Arc(), SVG_PLOTTER::BezierCurve(), Circle(), DXF_PLOTTER::Circle(), PS_PLOTTER::Circle(), SVG_PLOTTER::Circle(), GERBER_PLOTTER::ClearAllAttributes(), GERBER_PLOTTER::clearNetAttribute(), PDF_PLOTTER::ClosePage(), PDF_PLOTTER::closePdfObject(), PDF_PLOTTER::closePdfStream(), GERBER_PLOTTER::emitDcode(), PS_PLOTTER::emitSetRGBColor(), SVG_PLOTTER::EndBlock(), GERBER_PLOTTER::EndPlot(), DXF_PLOTTER::EndPlot(), EndPlot(), PS_PLOTTER::EndPlot(), PDF_PLOTTER::EndPlot(), SVG_PLOTTER::EndPlot(), DXF_PLOTTER::FlashPadCircle(), FlashPadCircle(), PSLIKE_PLOTTER::FlashPadOval(), GERBER_PLOTTER::FlashPadOval(), FlashPadOval(), DXF_PLOTTER::FlashPadOval(), GERBER_PLOTTER::FlashPadRect(), DXF_PLOTTER::FlashPadRect(), GERBER_PLOTTER::FlashPadRoundRect(), DXF_PLOTTER::FlashPadTrapez(), GERBER_PLOTTER::formatNetAttribute(), PLOTTER::OpenFile(), PDF_PLOTTER::OpenFile(), GERBER_PLOTTER::PenTo(), DXF_PLOTTER::PenTo(), PenTo(), PS_PLOTTER::PenTo(), SVG_PLOTTER::PenTo(), GERBER_PLOTTER::plotArc(), GERBER_PLOTTER::PlotGerberRegion(), PS_PLOTTER::PlotImage(), SVG_PLOTTER::PlotImage(), GERBER_PLOTTER::PlotPoly(), PS_PLOTTER::PlotPoly(), SVG_PLOTTER::PlotPoly(), GERBER_PLOTTER::plotRoundRectAsRegion(), PLOTTER::PLOTTER(), DXF_PLOTTER::Rect(), Rect(), PS_PLOTTER::Rect(), SVG_PLOTTER::Rect(), GERBER_PLOTTER::selectAperture(), PS_PLOTTER::SetCurrentLineWidth(), PS_PLOTTER::SetDash(), GERBER_PLOTTER::SetLayerPolarity(), SVG_PLOTTER::setSVGPlotStyle(), PS_PLOTTER::SetViewport(), SVG_PLOTTER::StartBlock(), PDF_PLOTTER::StartPage(), PDF_PLOTTER::startPdfObject(), PDF_PLOTTER::startPdfStream(), GERBER_PLOTTER::StartPlot(), StartPlot(), DXF_PLOTTER::StartPlot(), PS_PLOTTER::StartPlot(), PDF_PLOTTER::StartPlot(), SVG_PLOTTER::StartPlot(), DXF_PLOTTER::Text(), PS_PLOTTER::Text(), SVG_PLOTTER::Text(), ThickSegment(), GERBER_PLOTTER::writeApertureList(), and PLOTTER::~PLOTTER().

◆ m_pageInfo

◆ m_paperSize

◆ m_penLastpos

wxPoint PLOTTER::m_penLastpos
protectedinherited

◆ m_penState

char PLOTTER::m_penState
protectedinherited

◆ m_plotMirror

◆ m_plotOffset

◆ m_plotScale

◆ m_renderSettings

◆ m_title

wxString PLOTTER::m_title
protectedinherited

Definition at line 601 of file plotter.h.

Referenced by PDF_PLOTTER::EndPlot(), PLOTTER::SetTitle(), and PS_PLOTTER::StartPlot().

◆ m_yaxisReversed

bool PLOTTER::m_yaxisReversed
protectedinherited

◆ MARKER_COUNT

const unsigned PLOTTER::MARKER_COUNT = 58
staticinherited

Draw a marker (used for the drill map).

Definition at line 436 of file plotter.h.

Referenced by PLOTTER::Marker().

◆ penDiameter

double HPGL_PLOTTER::penDiameter
protected

◆ penNumber

int HPGL_PLOTTER::penNumber
protected

Definition at line 167 of file plotter_hpgl.h.

Referenced by EndPlot(), SetPenNumber(), startOrAppendItem(), and StartPlot().

◆ penSpeed

int HPGL_PLOTTER::penSpeed
protected

Definition at line 166 of file plotter_hpgl.h.

Referenced by SetPenSpeed(), and StartPlot().

◆ USE_DEFAULT_LINE_WIDTH

◆ useUserCoords

bool HPGL_PLOTTER::useUserCoords
protected

Definition at line 172 of file plotter_hpgl.h.

Referenced by EndPlot(), and SetUserCoords().


The documentation for this class was generated from the following files: