KiCad PCB EDA Suite
Loading...
Searching...
No Matches
plotters_pslike.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or (at your
9 * option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
26#pragma once
27
28#include "plotter.h"
29
30
35class PSLIKE_PLOTTER : public PLOTTER
36{
37public:
38 PSLIKE_PLOTTER( const PROJECT* aProject = nullptr) :
39 PLOTTER( aProject ),
40 plotScaleAdjX( 1 ),
41 plotScaleAdjY( 1 ),
43 {
44 }
45
49 virtual void SetTextMode( PLOT_TEXT_MODE mode ) override
50 {
51 if( mode != PLOT_TEXT_MODE::DEFAULT )
52 m_textMode = mode;
53 }
54
58 void SetScaleAdjust( double scaleX, double scaleY )
59 {
60 plotScaleAdjX = scaleX;
61 plotScaleAdjY = scaleY;
62 }
63
64 // Pad routines are handled with lower level primitives
65 virtual void FlashPadCircle( const VECTOR2I& aPadPos, int aDiameter, void* aData ) override;
66 virtual void FlashPadOval( const VECTOR2I& aPadPos, const VECTOR2I& aSize,
67 const EDA_ANGLE& aPadOrient, void* aData ) override;
68 virtual void FlashPadRect( const VECTOR2I& aPadPos, const VECTOR2I& aSize,
69 const EDA_ANGLE& aPadOrient, void* aData ) override;
70 virtual void FlashPadRoundRect( const VECTOR2I& aPadPos, const VECTOR2I& aSize,
71 int aCornerRadius, const EDA_ANGLE& aOrient,
72 void* aData ) override;
73 virtual void FlashPadCustom( const VECTOR2I& aPadPos, const VECTOR2I& aSize,
74 const EDA_ANGLE& aOrient, SHAPE_POLY_SET* aPolygons,
75 void* aData ) override;
76 virtual void FlashPadTrapez( const VECTOR2I& aPadPos, const VECTOR2I* aCorners,
77 const EDA_ANGLE& aPadOrient, void* aData ) override;
78 virtual void FlashRegularPolygon( const VECTOR2I& aShapePos, int aDiameter, int aCornerCount,
79 const EDA_ANGLE& aOrient, void* aData ) override;
80
85 virtual void SetColor( const COLOR4D& color ) override;
86
87protected:
95 void computeTextParameters( const VECTOR2I& aPos,
96 const wxString& aText,
97 const EDA_ANGLE& aOrient,
98 const VECTOR2I& aSize,
99 bool aMirror,
100 enum GR_TEXT_H_ALIGN_T aH_justify,
101 enum GR_TEXT_V_ALIGN_T aV_justify,
102 int aWidth,
103 bool aItalic,
104 bool aBold,
105 double *wideningFactor,
106 double *ctm_a,
107 double *ctm_b,
108 double *ctm_c,
109 double *ctm_d,
110 double *ctm_e,
111 double *ctm_f,
112 double *heightFactor );
113
116 virtual std::string encodeStringForPlotter( const wxString& aUnicode );
117
119 virtual void emitSetRGBColor( double r, double g, double b, double a ) = 0;
120
122 static const double postscriptTextAscent; // = 0.718;
123
129 int returnPostscriptTextWidth( const wxString& aText, int aXSize, bool aItalic, bool aBold );
130
133
136};
137
138
140{
141public:
142 PS_PLOTTER( const PROJECT* aProject = nullptr ) :
143 PSLIKE_PLOTTER( aProject )
144 {
145 // The phantom plot in postscript is an hack and reportedly
146 // crashes Adobe's own postscript interpreter!
147 m_textMode = PLOT_TEXT_MODE::STROKE;
148 }
149
150 static wxString GetDefaultFileExtension()
151 {
152 return wxString( wxT( "ps" ) );
153 }
154
155 virtual PLOT_FORMAT GetPlotterType() const override
156 {
157 return PLOT_FORMAT::POST;
158 }
159
173 virtual bool StartPlot( const wxString& aPageNumber ) override;
174 virtual bool EndPlot() override;
175
179 virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override;
180
184 virtual void SetDash( int aLineWidth, LINE_STYLE aLineStyle ) override;
185
186 virtual void SetViewport( const VECTOR2I& aOffset, double aIusPerDecimil,
187 double aScale, bool aMirror ) override;
188 virtual void Rect( const VECTOR2I& p1, const VECTOR2I& p2, FILL_T fill, int width ) override;
189 virtual void Circle( const VECTOR2I& pos, int diametre, FILL_T fill, int width ) override;
190 virtual void Arc( const VECTOR2D& aCenter, const EDA_ANGLE& aStartAngle,
191 const EDA_ANGLE& aAngle, double aRadius, FILL_T aFill, int aWidth ) override;
192
193 virtual void PlotPoly( const std::vector<VECTOR2I>& aCornerList, FILL_T aFill,
194 int aWidth, void* aData = nullptr ) override;
195
199 virtual void PlotImage( const wxImage& aImage, const VECTOR2I& aPos,
200 double aScaleFactor ) override;
201
202 virtual void PenTo( const VECTOR2I& pos, char plume ) override;
203 virtual void Text( const VECTOR2I& aPos,
204 const COLOR4D& aColor,
205 const wxString& aText,
206 const EDA_ANGLE& aOrient,
207 const VECTOR2I& aSize,
208 enum GR_TEXT_H_ALIGN_T aH_justify,
209 enum GR_TEXT_V_ALIGN_T aV_justify,
210 int aWidth,
211 bool aItalic,
212 bool aBold,
213 bool aMultilineAllowed,
214 KIFONT::FONT* aFont,
215 const KIFONT::METRICS& aFontMetrics,
216 void* aData = nullptr ) override;
217
218 virtual void PlotText( const VECTOR2I& aPos,
219 const COLOR4D& aColor,
220 const wxString& aText,
221 const TEXT_ATTRIBUTES& aAttributes,
222 KIFONT::FONT* aFont,
223 const KIFONT::METRICS& aFontMetrics,
224 void* aData = nullptr ) override;
225
226
227protected:
228 virtual void emitSetRGBColor( double r, double g, double b, double a ) override;
229};
230
231
233{
234 std::string m_name;
235 float m_cameraMatrix[12];
237 float m_fov;
238};
239
240
242{
243public:
244 PDF_PLOTTER( const PROJECT* aProject = nullptr ) :
245 PSLIKE_PLOTTER( aProject ),
246 m_pageTreeHandle( 0 ),
249 m_jsNamesHandle( 0 ),
250 m_pageStreamHandle( -1 ),
252 m_workFile( nullptr ),
254 m_3dModelHandle( -1 ),
255 m_3dExportMode( false )
256 {
257 }
258
259 virtual PLOT_FORMAT GetPlotterType() const override
260 {
261 return PLOT_FORMAT::PDF;
262 }
263
264 static wxString GetDefaultFileExtension()
265 {
266 return wxString( wxT( "pdf" ) );
267 }
268
278 virtual bool OpenFile( const wxString& aFullFilename ) override;
279
284 virtual bool StartPlot( const wxString& aPageNumber ) override;
285
286 virtual bool StartPlot( const wxString& aPageNumber,
287 const wxString& aPageName = wxEmptyString );
288
289 virtual bool EndPlot() override;
290
294 virtual void StartPage( const wxString& aPageNumber,
295 const wxString& aPageName = wxEmptyString,
296 const wxString& aParentPageNumber = wxEmptyString,
297 const wxString& aParentPageName = wxEmptyString );
298
302 virtual void ClosePage();
303
312 virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override;
313
317 virtual void SetDash( int aLineWidth, LINE_STYLE aLineStyle ) override;
318
323 virtual void SetViewport( const VECTOR2I& aOffset, double aIusPerDecimil,
324 double aScale, bool aMirror ) override;
325
329 virtual void Rect( const VECTOR2I& p1, const VECTOR2I& p2, FILL_T fill, int width ) override;
330
334 virtual void Circle( const VECTOR2I& pos, int diametre, FILL_T fill, int width ) override;
335
339 virtual void Arc( const VECTOR2D& aCenter, const EDA_ANGLE& aStartAngle,
340 const EDA_ANGLE& aAngle, double aRadius, FILL_T aFill,
341 int aWidth ) override;
342
346 virtual void PlotPoly( const std::vector<VECTOR2I>& aCornerList, FILL_T aFill,
347 int aWidth = USE_DEFAULT_LINE_WIDTH, void* aData = nullptr ) override;
348
349 virtual void PenTo( const VECTOR2I& pos, char plume ) override;
350
351 virtual void Text( const VECTOR2I& aPos,
352 const COLOR4D& aColor,
353 const wxString& aText,
354 const EDA_ANGLE& aOrient,
355 const VECTOR2I& aSize,
356 enum GR_TEXT_H_ALIGN_T aH_justify,
357 enum GR_TEXT_V_ALIGN_T aV_justify,
358 int aWidth,
359 bool aItalic,
360 bool aBold,
361 bool aMultilineAllowed,
362 KIFONT::FONT* aFont,
363 const KIFONT::METRICS& aFontMetrics,
364 void* aData = nullptr ) override;
365
366 virtual void PlotText( const VECTOR2I& aPos,
367 const COLOR4D& aColor,
368 const wxString& aText,
369 const TEXT_ATTRIBUTES& aAttributes,
370 KIFONT::FONT* aFont,
371 const KIFONT::METRICS& aFontMetrics,
372 void* aData = nullptr ) override;
373
374 void HyperlinkBox( const BOX2I& aBox, const wxString& aDestinationURL ) override;
375
376 void HyperlinkMenu( const BOX2I& aBox, const std::vector<wxString>& aDestURLs ) override;
377
378 void Bookmark( const BOX2I& aBox, const wxString& aName,
379 const wxString& aGroupName = wxEmptyString ) override;
380
381 void Plot3DModel( const wxString& aSourcePath, const std::vector<PDF_3D_VIEW>& a3DViews );
382
383 void Set3DExport( bool aYes ) { m_3dExportMode = aYes; }
384
388 void PlotImage( const wxImage& aImage, const VECTOR2I& aPos, double aScaleFactor ) override;
389
390
391protected:
393 {
395 wxString title;
397
398 std::vector<OUTLINE_NODE*> children;
399
401 {
402 std::for_each( children.begin(), children.end(),
403 []( OUTLINE_NODE* node )
404 {
405 delete node;
406 } );
407 }
408
409 OUTLINE_NODE* AddChild( int aActionHandle, const wxString& aTitle, int aEntryHandle )
410 {
411 OUTLINE_NODE* child = new OUTLINE_NODE
412 {
413 aActionHandle, aTitle, aEntryHandle, {}
414 };
415
416 children.push_back( child );
417
418 return child;
419 }
420 };
421
432 OUTLINE_NODE* addOutlineNode( OUTLINE_NODE* aParent, int aActionHandle,
433 const wxString& aTitle );
434
437 std::string encodeStringForPlotter( const wxString& aUnicode ) override;
438
448 virtual void emitSetRGBColor( double r, double g, double b, double a ) override;
449
456 int allocPdfObject();
457
462 int startPdfObject( int aHandle = -1 );
463
467 void closePdfObject();
468
476 int startPdfStream( int aHandle = -1 );
477
481 void closePdfStream();
482
486 int emitOutline();
487
491 void emitOutlineNode( OUTLINE_NODE* aNode, int aParentHandle, int aNextNode, int aPrevNode );
492
498 int emitGoToAction( int aPageHandle, const VECTOR2I& aBottomLeft, const VECTOR2I& aTopRight );
499 int emitGoToAction( int aPageHandle );
500
501
503
508 std::vector<int> m_pageHandles;
511
513 wxString m_pageName;
515
517 std::vector<long> m_xrefTable;
518
520 std::vector<wxString> m_pageNumbers;
521
523 std::vector<std::pair<BOX2I, wxString>> m_hyperlinksInPage;
524 std::vector<std::pair<BOX2I, std::vector<wxString>>> m_hyperlinkMenusInPage;
525
527 std::map<int, std::pair<BOX2D, wxString>> m_hyperlinkHandles;
528 std::map<int, std::pair<BOX2D, std::vector<wxString>>> m_hyperlinkMenuHandles;
529
530 std::map<wxString, std::vector<std::pair<BOX2I, wxString>>> m_bookmarksInPage;
531
532 std::map<int, wxImage> m_imageHandles;
533
534 std::unique_ptr<OUTLINE_NODE> m_outlineRoot;
536
539};
540
541
543{
544public:
545 SVG_PLOTTER( const PROJECT* aProject = nullptr );
546
547 static wxString GetDefaultFileExtension()
548 {
549 return wxString( wxT( "svg" ) );
550 }
551
552 virtual PLOT_FORMAT GetPlotterType() const override
553 {
554 return PLOT_FORMAT::SVG;
555 }
556
560 virtual bool StartPlot( const wxString& aPageNumber ) override;
561 virtual bool EndPlot() override;
562
566 virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override;
567
571 virtual void SetDash( int aLineWidth, LINE_STYLE aLineStyle ) override;
572
573 virtual void SetViewport( const VECTOR2I& aOffset, double aIusPerDecimil, double aScale,
574 bool aMirror ) override;
575 virtual void Rect( const VECTOR2I& p1, const VECTOR2I& p2, FILL_T fill, int width ) override;
576 virtual void Circle( const VECTOR2I& pos, int diametre, FILL_T fill, int width ) override;
577 virtual void Arc( const VECTOR2D& aCenter, const EDA_ANGLE& aStartAngle,
578 const EDA_ANGLE& aAngle, double aRadius, FILL_T aFill,
579 int aWidth ) override;
580
581 virtual void BezierCurve( const VECTOR2I& aStart, const VECTOR2I& aControl1,
582 const VECTOR2I& aControl2, const VECTOR2I& aEnd,
583 int aTolerance, int aLineThickness ) override;
584
585 virtual void PlotPoly( const std::vector<VECTOR2I>& aCornerList, FILL_T aFill,
586 int aWidth, void * aData ) override;
587
591 virtual void PlotImage( const wxImage& aImage, const VECTOR2I& aPos,
592 double aScaleFactor ) override;
593
594 virtual void PenTo( const VECTOR2I& pos, char plume ) override;
595
606 virtual void SetSvgCoordinatesFormat( unsigned aPrecision ) override;
607
613 virtual void StartBlock( void* aData ) override;
614
620 virtual void EndBlock( void* aData ) override;
621
622 virtual void Text( const VECTOR2I& aPos,
623 const COLOR4D& aColor,
624 const wxString& aText,
625 const EDA_ANGLE& aOrient,
626 const VECTOR2I& aSize,
627 enum GR_TEXT_H_ALIGN_T aH_justify,
628 enum GR_TEXT_V_ALIGN_T aV_justify,
629 int aWidth,
630 bool aItalic,
631 bool aBold,
632 bool aMultilineAllowed,
633 KIFONT::FONT* aFont,
634 const KIFONT::METRICS& aFontMetrics,
635 void* aData = nullptr ) override;
636
637
638 virtual void PlotText( const VECTOR2I& aPos,
639 const COLOR4D& aColor,
640 const wxString& aText,
641 const TEXT_ATTRIBUTES& aAttributes,
642 KIFONT::FONT* aFont,
643 const KIFONT::METRICS& aFontMetrics,
644 void* aData = nullptr ) override;
645
646protected:
651 virtual void emitSetRGBColor( double r, double g, double b, double a ) override;
652
659 void setSVGPlotStyle( int aLineWidth, bool aIsGroup = true,
660 const std::string& aExtraStyle = {} );
661
665 void setFillMode( FILL_T fill );
666
667 FILL_T m_fillMode; // true if the current contour rect, arc, circle, polygon must
668 // be filled
669 uint32_t m_pen_rgb_color; // current rgb color value: each color has a value 0 ... 255,
670 // and the 3 colors are grouped in a 3x8 bits value (written
671 // in hex to svg files)
672 uint32_t m_brush_rgb_color; // same as m_pen_rgb_color, used to fill some contours.
674 bool m_graphics_changed; // true if a pen/brush parameter is modified color, pen size,
675 // fill mode ... the new SVG stype must be output on file
676 LINE_STYLE m_dashed; // plot line style
677 unsigned m_precision; // How fine the step size is
678 // Use 3-6 (3 means um precision, 6 nm precision) in PcbNew
679 // 3-4 in other modules (avoid values >4 to avoid overflow)
680 // see also comment for m_useInch.
681};
int color
Definition: DXF_plotter.cpp:63
FONT is an abstract base class for both outline and stroke fonts.
Definition: font.h:131
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
std::vector< int > m_pageHandles
Handles to the page objects.
FILE * m_workFile
Temporary file to construct the stream before zipping.
wxString m_parentPageName
virtual void ClosePage()
Close the current page in the PDF document (and emit its compressed stream).
void emitOutlineNode(OUTLINE_NODE *aNode, int aParentHandle, int aNextNode, int aPrevNode)
Emits a outline item object and recurses into any children.
std::map< int, wxImage > m_imageHandles
int emitOutline()
Starts emitting the outline object.
virtual bool EndPlot() override
int startPdfObject(int aHandle=-1)
Open a new PDF object and returns the handle if the parameter is -1.
virtual void PlotPoly(const std::vector< VECTOR2I > &aCornerList, FILL_T aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr) override
Polygon plotting for PDF.
virtual void Circle(const VECTOR2I &pos, int diametre, FILL_T fill, int width) override
Circle drawing for PDF.
virtual void SetCurrentLineWidth(int width, void *aData=nullptr) override
Pen width setting for PDF.
int m_streamLengthHandle
Handle to the deferred stream length.
void PlotImage(const wxImage &aImage, const VECTOR2I &aPos, double aScaleFactor) override
PDF images are handles as inline, not XObject streams...
int m_jsNamesHandle
Handle for Names dictionary with JS.
wxString m_pageName
virtual void SetDash(int aLineWidth, LINE_STYLE aLineStyle) override
PDF supports dashed lines.
void HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs) override
Create a clickable hyperlink menu with a rectangular click area.
virtual bool OpenFile(const wxString &aFullFilename) override
Open or create the plot file aFullFilename.
int m_fontResDictHandle
Font resource dictionary.
virtual void emitSetRGBColor(double r, double g, double b, double a) override
PDF supports colors fully.
void Set3DExport(bool aYes)
PDF_PLOTTER(const PROJECT *aProject=nullptr)
std::map< int, std::pair< BOX2D, wxString > > m_hyperlinkHandles
Handles for all the hyperlink objects that will be deferred.
int m_pageTreeHandle
Handle to the root of the page tree object.
virtual void Text(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const EDA_ANGLE &aOrient, const VECTOR2I &aSize, enum GR_TEXT_H_ALIGN_T aH_justify, enum GR_TEXT_V_ALIGN_T aV_justify, int aWidth, bool aItalic, bool aBold, bool aMultilineAllowed, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, void *aData=nullptr) override
Draw text with the plotter.
int emitGoToAction(int aPageHandle, const VECTOR2I &aBottomLeft, const VECTOR2I &aTopRight)
Emit an action object that instructs a goto coordinates on a page.
void closePdfStream()
Finish the current PDF stream (writes the deferred length, too).
void Bookmark(const BOX2I &aBox, const wxString &aName, const wxString &aGroupName=wxEmptyString) override
Create a bookmark to a symbol.
std::vector< long > m_xrefTable
The PDF xref offset table.
void endPlotEmitResources()
int startPdfStream(int aHandle=-1)
Start a PDF stream (for the page).
virtual void Arc(const VECTOR2D &aCenter, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aAngle, double aRadius, FILL_T aFill, int aWidth) override
The PDF engine can't directly plot arcs so we use polygonization.
void HyperlinkBox(const BOX2I &aBox, const wxString &aDestinationURL) override
Create a clickable hyperlink with a rectangular click area.
virtual void PenTo(const VECTOR2I &pos, char plume) override
Moveto/lineto primitive, moves the 'pen' to the specified direction.
std::map< wxString, std::vector< std::pair< BOX2I, wxString > > > m_bookmarksInPage
virtual bool StartPlot(const wxString &aPageNumber) override
The PDF engine supports multiple pages; the first one is opened 'for free' the following are to be cl...
static wxString GetDefaultFileExtension()
virtual void StartPage(const wxString &aPageNumber, const wxString &aPageName=wxEmptyString, const wxString &aParentPageNumber=wxEmptyString, const wxString &aParentPageName=wxEmptyString)
Start a new page in the PDF document.
OUTLINE_NODE * addOutlineNode(OUTLINE_NODE *aParent, int aActionHandle, const wxString &aTitle)
Add a new outline node entry.
int m_imgResDictHandle
Image resource dictionary.
std::string encodeStringForPlotter(const wxString &aUnicode) override
convert a wxString unicode string to a char string compatible with the accepted string PDF format (co...
Definition: PDF_plotter.cpp:56
void Plot3DModel(const wxString &aSourcePath, const std::vector< PDF_3D_VIEW > &a3DViews)
std::vector< wxString > m_pageNumbers
List of user-space page numbers for resolving internal hyperlinks.
int allocPdfObject()
Allocate a new handle in the table of the PDF object.
wxString m_workFilename
virtual void SetViewport(const VECTOR2I &aOffset, double aIusPerDecimil, double aScale, bool aMirror) override
PDF can have multiple pages, so SetPageSettings can be called with the outputFile open (but not insid...
std::map< int, std::pair< BOX2D, std::vector< wxString > > > m_hyperlinkMenuHandles
int m_pageStreamHandle
Handle of the page content object.
virtual void PlotText(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const TEXT_ATTRIBUTES &aAttributes, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, void *aData=nullptr) override
virtual void Rect(const VECTOR2I &p1, const VECTOR2I &p2, FILL_T fill, int width) override
Rectangles in PDF.
std::vector< std::pair< BOX2I, wxString > > m_hyperlinksInPage
List of loaded hyperlinks in current page.
std::unique_ptr< OUTLINE_NODE > m_outlineRoot
Root outline node.
std::vector< std::pair< BOX2I, std::vector< wxString > > > m_hyperlinkMenusInPage
void closePdfObject()
Close the current PDF object.
virtual PLOT_FORMAT GetPlotterType() const override
Return the effective plot engine in use.
int m_totalOutlineNodes
Total number of outline nodes.
Base plotter engine class.
Definition: plotter.h:121
static const int USE_DEFAULT_LINE_WIDTH
Definition: plotter.h:125
Container for project specific data.
Definition: project.h:65
The PSLIKE_PLOTTER class is an intermediate class to handle common routines for engines working more ...
static const double postscriptTextAscent
Height of the postscript font (from the AFM)
void SetScaleAdjust(double scaleX, double scaleY)
Set the 'fine' scaling for the postscript engine.
virtual void SetColor(const COLOR4D &color) override
The SetColor implementation is split with the subclasses: the PSLIKE computes the rgb values,...
Definition: PS_plotter.cpp:64
PSLIKE_PLOTTER(const PROJECT *aProject=nullptr)
virtual void emitSetRGBColor(double r, double g, double b, double a)=0
Virtual primitive for emitting the setrgbcolor operator.
PLOT_TEXT_MODE m_textMode
How to draw text.
virtual void SetTextMode(PLOT_TEXT_MODE mode) override
PS and PDF fully implement native text (for the Latin-1 subset)
virtual void FlashRegularPolygon(const VECTOR2I &aShapePos, int aDiameter, int aCornerCount, const EDA_ANGLE &aOrient, void *aData) override
Flash a regular polygon.
Definition: PS_plotter.cpp:222
int returnPostscriptTextWidth(const wxString &aText, int aXSize, bool aItalic, bool aBold)
Sister function for the GRTextWidth in gr_text.cpp Does the same processing (i.e.
Definition: PS_plotter.cpp:266
virtual void FlashPadCircle(const VECTOR2I &aPadPos, int aDiameter, void *aData) override
Definition: PS_plotter.cpp:118
virtual void FlashPadOval(const VECTOR2I &aPadPos, const VECTOR2I &aSize, const EDA_ANGLE &aPadOrient, void *aData) override
Definition: PS_plotter.cpp:92
virtual void FlashPadRoundRect(const VECTOR2I &aPadPos, const VECTOR2I &aSize, int aCornerRadius, const EDA_ANGLE &aOrient, void *aData) override
Definition: PS_plotter.cpp:157
double plotScaleAdjX
Fine user scale adjust ( = 1.0 if no correction)
void computeTextParameters(const VECTOR2I &aPos, const wxString &aText, const EDA_ANGLE &aOrient, const VECTOR2I &aSize, bool aMirror, enum GR_TEXT_H_ALIGN_T aH_justify, enum GR_TEXT_V_ALIGN_T aV_justify, int aWidth, bool aItalic, bool aBold, double *wideningFactor, double *ctm_a, double *ctm_b, double *ctm_c, double *ctm_d, double *ctm_e, double *ctm_f, double *heightFactor)
This is the core for postscript/PDF text alignment.
Definition: PS_plotter.cpp:302
virtual std::string encodeStringForPlotter(const wxString &aUnicode)
convert a wxString unicode string to a char string compatible with the accepted string plotter format...
Definition: PS_plotter.cpp:230
virtual void FlashPadCustom(const VECTOR2I &aPadPos, const VECTOR2I &aSize, const EDA_ANGLE &aOrient, SHAPE_POLY_SET *aPolygons, void *aData) override
Definition: PS_plotter.cpp:180
virtual void FlashPadTrapez(const VECTOR2I &aPadPos, const VECTOR2I *aCorners, const EDA_ANGLE &aPadOrient, void *aData) override
Flash a trapezoidal pad.
Definition: PS_plotter.cpp:202
virtual void FlashPadRect(const VECTOR2I &aPadPos, const VECTOR2I &aSize, const EDA_ANGLE &aPadOrient, void *aData) override
Definition: PS_plotter.cpp:124
virtual bool EndPlot() override
Definition: PS_plotter.cpp:853
virtual void Text(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const EDA_ANGLE &aOrient, const VECTOR2I &aSize, enum GR_TEXT_H_ALIGN_T aH_justify, enum GR_TEXT_V_ALIGN_T aV_justify, int aWidth, bool aItalic, bool aBold, bool aMultilineAllowed, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, void *aData=nullptr) override
Draw text with the plotter.
Definition: PS_plotter.cpp:867
virtual void Rect(const VECTOR2I &p1, const VECTOR2I &p2, FILL_T fill, int width) override
Definition: PS_plotter.cpp:460
virtual void PlotText(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const TEXT_ATTRIBUTES &aAttributes, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, void *aData=nullptr) override
Definition: PS_plotter.cpp:898
virtual void PlotImage(const wxImage &aImage, const VECTOR2I &aPos, double aScaleFactor) override
PostScript-likes at the moment are the only plot engines supporting bitmaps.
Definition: PS_plotter.cpp:559
virtual void SetViewport(const VECTOR2I &aOffset, double aIusPerDecimil, double aScale, bool aMirror) override
Set the plot offset and scaling for the current plot.
Definition: PS_plotter.cpp:285
virtual void Circle(const VECTOR2I &pos, int diametre, FILL_T fill, int width) override
Definition: PS_plotter.cpp:479
virtual void PlotPoly(const std::vector< VECTOR2I > &aCornerList, FILL_T aFill, int aWidth, void *aData=nullptr) override
Draw a polygon ( filled or not ).
Definition: PS_plotter.cpp:534
virtual void SetDash(int aLineWidth, LINE_STYLE aLineStyle) override
PostScript supports dashed lines.
Definition: PS_plotter.cpp:420
virtual void Arc(const VECTOR2D &aCenter, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aAngle, double aRadius, FILL_T aFill, int aWidth) override
Definition: PS_plotter.cpp:498
virtual bool StartPlot(const wxString &aPageNumber) override
The code within this function (and the CloseFilePS function) creates postscript files whose contents ...
Definition: PS_plotter.cpp:703
virtual PLOT_FORMAT GetPlotterType() const override
Return the effective plot engine in use.
PS_PLOTTER(const PROJECT *aProject=nullptr)
virtual void emitSetRGBColor(double r, double g, double b, double a) override
Virtual primitive for emitting the setrgbcolor operator.
Definition: PS_plotter.cpp:400
virtual void SetCurrentLineWidth(int width, void *aData=nullptr) override
Set the current line width (in IUs) for the next plot.
Definition: PS_plotter.cpp:380
static wxString GetDefaultFileExtension()
virtual void PenTo(const VECTOR2I &pos, char plume) override
Moveto/lineto primitive, moves the 'pen' to the specified direction.
Definition: PS_plotter.cpp:667
Represent a set of closed polygons.
virtual void emitSetRGBColor(double r, double g, double b, double a) override
Initialize m_pen_rgb_color from reduced values r, g ,b ( reduced values are 0.0 to 1....
virtual void PlotImage(const wxImage &aImage, const VECTOR2I &aPos, double aScaleFactor) override
PostScript-likes at the moment are the only plot engines supporting bitmaps.
unsigned m_precision
virtual bool StartPlot(const wxString &aPageNumber) override
Create SVG file header.
virtual void EndBlock(void *aData) override
Calling this function allows one to define the end of a group of drawing items the group is started b...
virtual void SetViewport(const VECTOR2I &aOffset, double aIusPerDecimil, double aScale, bool aMirror) override
Set the plot offset and scaling for the current plot.
LINE_STYLE m_dashed
virtual void Text(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const EDA_ANGLE &aOrient, const VECTOR2I &aSize, enum GR_TEXT_H_ALIGN_T aH_justify, enum GR_TEXT_V_ALIGN_T aV_justify, int aWidth, bool aItalic, bool aBold, bool aMultilineAllowed, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, void *aData=nullptr) override
Draw text with the plotter.
double m_brush_alpha
virtual PLOT_FORMAT GetPlotterType() const override
Return the effective plot engine in use.
uint32_t m_brush_rgb_color
virtual void Rect(const VECTOR2I &p1, const VECTOR2I &p2, FILL_T fill, int width) override
virtual void SetSvgCoordinatesFormat(unsigned aPrecision) override
Select SVG coordinate precision (number of digits needed for 1 mm ) (SVG plotter uses always metric u...
virtual bool EndPlot() override
void setSVGPlotStyle(int aLineWidth, bool aIsGroup=true, const std::string &aExtraStyle={})
Output the string which define pen and brush color, shape, transparency.
virtual void Circle(const VECTOR2I &pos, int diametre, FILL_T fill, int width) override
virtual void PlotPoly(const std::vector< VECTOR2I > &aCornerList, FILL_T aFill, int aWidth, void *aData) override
Draw a polygon ( filled or not ).
virtual void PlotText(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const TEXT_ATTRIBUTES &aAttributes, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, void *aData=nullptr) override
virtual void BezierCurve(const VECTOR2I &aStart, const VECTOR2I &aControl1, const VECTOR2I &aControl2, const VECTOR2I &aEnd, int aTolerance, int aLineThickness) override
Generic fallback: Cubic Bezier curve rendered as a polyline.
virtual void Arc(const VECTOR2D &aCenter, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aAngle, double aRadius, FILL_T aFill, int aWidth) override
virtual void PenTo(const VECTOR2I &pos, char plume) override
Moveto/lineto primitive, moves the 'pen' to the specified direction.
uint32_t m_pen_rgb_color
static wxString GetDefaultFileExtension()
bool m_graphics_changed
virtual void SetDash(int aLineWidth, LINE_STYLE aLineStyle) override
SVG supports dashed lines.
virtual void StartBlock(void *aData) override
Calling this function allows one to define the beginning of a group of drawing items (used in SVG for...
void setFillMode(FILL_T fill)
Prepare parameters for setSVGPlotStyle()
virtual void SetCurrentLineWidth(int width, void *aData=nullptr) override
Set the current line width (in IUs) for the next plot.
FILL_T
Definition: eda_shape.h:56
PLOT_TEXT_MODE
Which kind of text to output with the PSLIKE plotters.
Definition: plotter.h:99
PLOT_FORMAT
The set of supported output plot formats.
Definition: plotter.h:64
LINE_STYLE
Dashed line types.
Definition: stroke_params.h:46
std::string m_name
float m_cameraMatrix[12]
float m_cameraCenter
wxString title
Title of outline node.
std::vector< OUTLINE_NODE * > children
Ordered list of children.
int entryHandle
Allocated handle for this outline entry.
OUTLINE_NODE * AddChild(int aActionHandle, const wxString &aTitle, int aEntryHandle)
int actionHandle
Handle to action.
GR_TEXT_H_ALIGN_T
This is API surface mapped to common.types.HorizontalAlignment.
GR_TEXT_V_ALIGN_T
This is API surface mapped to common.types.VertialAlignment.