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
25
26#pragma once
27
28#include "plotter.h"
29#include <memory>
32#include <math/vector3.h>
33
34namespace MARKUP { struct NODE; }
35
40class PSLIKE_PLOTTER : public PLOTTER
41{
42public:
43 PSLIKE_PLOTTER( const PROJECT* aProject = nullptr) :
44 PLOTTER( aProject ),
45 plotScaleAdjX( 1 ),
46 plotScaleAdjY( 1 ),
48 {
49 }
50
54 virtual void SetTextMode( PLOT_TEXT_MODE mode ) override
55 {
56 if( mode != PLOT_TEXT_MODE::DEFAULT )
57 m_textMode = mode;
58 }
59
63 void SetScaleAdjust( double scaleX, double scaleY )
64 {
65 plotScaleAdjX = scaleX;
66 plotScaleAdjY = scaleY;
67 }
68
69 // Pad routines are handled with lower level primitives
70 virtual void FlashPadCircle( const VECTOR2I& aPadPos, int aDiameter, void* aData ) override;
71 virtual void FlashPadOval( const VECTOR2I& aPadPos, const VECTOR2I& aSize,
72 const EDA_ANGLE& aPadOrient, void* aData ) override;
73 virtual void FlashPadRect( const VECTOR2I& aPadPos, const VECTOR2I& aSize,
74 const EDA_ANGLE& aPadOrient, void* aData ) override;
75 virtual void FlashPadRoundRect( const VECTOR2I& aPadPos, const VECTOR2I& aSize,
76 int aCornerRadius, const EDA_ANGLE& aOrient,
77 void* aData ) override;
78 virtual void FlashPadCustom( const VECTOR2I& aPadPos, const VECTOR2I& aSize,
79 const EDA_ANGLE& aOrient, SHAPE_POLY_SET* aPolygons,
80 void* aData ) override;
81 virtual void FlashPadTrapez( const VECTOR2I& aPadPos, const VECTOR2I* aCorners,
82 const EDA_ANGLE& aPadOrient, void* aData ) override;
83 virtual void FlashRegularPolygon( const VECTOR2I& aShapePos, int aDiameter, int aCornerCount,
84 const EDA_ANGLE& aOrient, void* aData ) override;
85
90 virtual void SetColor( const COLOR4D& color ) override;
91
92protected:
100 void computeTextParameters( const VECTOR2I& aPos,
101 const wxString& aText,
102 const EDA_ANGLE& aOrient,
103 const VECTOR2I& aSize,
104 bool aMirror,
105 enum GR_TEXT_H_ALIGN_T aH_justify,
106 enum GR_TEXT_V_ALIGN_T aV_justify,
107 int aWidth,
108 bool aItalic,
109 bool aBold,
110 double *wideningFactor,
111 double *ctm_a,
112 double *ctm_b,
113 double *ctm_c,
114 double *ctm_d,
115 double *ctm_e,
116 double *ctm_f,
117 double *heightFactor );
118
121 virtual std::string encodeStringForPlotter( const wxString& aUnicode );
122
124 virtual void emitSetRGBColor( double r, double g, double b, double a ) = 0;
125
127 static const double postscriptTextAscent; // = 0.718;
128
134 int returnPostscriptTextWidth( const wxString& aText, int aXSize, bool aItalic, bool aBold );
135
138
141};
142
143
145{
146public:
147 PS_PLOTTER( const PROJECT* aProject = nullptr ) :
148 PSLIKE_PLOTTER( aProject )
149 {
150 // The phantom plot in postscript is an hack and reportedly
151 // crashes Adobe's own postscript interpreter!
153 }
154
155 static wxString GetDefaultFileExtension()
156 {
157 return wxString( wxT( "ps" ) );
158 }
159
160 virtual PLOT_FORMAT GetPlotterType() const override
161 {
162 return PLOT_FORMAT::POST;
163 }
164
178 virtual bool StartPlot( const wxString& aPageNumber ) override;
179 virtual bool EndPlot() override;
180
184 virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override;
185
189 virtual void SetDash( int aLineWidth, LINE_STYLE aLineStyle ) override;
190
191 virtual void SetViewport( const VECTOR2I& aOffset, double aIusPerDecimil,
192 double aScale, bool aMirror ) override;
193 virtual void Rect( const VECTOR2I& p1, const VECTOR2I& p2, FILL_T fill, int width,
194 int aCornerRadius = 0 ) override;
195 virtual void Circle( const VECTOR2I& pos, int diametre, FILL_T fill, int width ) override;
196 virtual void Arc( const VECTOR2D& aCenter, const EDA_ANGLE& aStartAngle,
197 const EDA_ANGLE& aAngle, double aRadius, FILL_T aFill, int aWidth ) override;
198
199 virtual void PlotPoly( const std::vector<VECTOR2I>& aCornerList, FILL_T aFill,
200 int aWidth, void* aData = nullptr ) override;
201
205 virtual void PlotImage( const wxImage& aImage, const VECTOR2I& aPos,
206 double aScaleFactor ) override;
207
208 virtual void PenTo( const VECTOR2I& pos, char plume ) override;
209 virtual void Text( const VECTOR2I& aPos,
210 const COLOR4D& aColor,
211 const wxString& aText,
212 const EDA_ANGLE& aOrient,
213 const VECTOR2I& aSize,
214 enum GR_TEXT_H_ALIGN_T aH_justify,
215 enum GR_TEXT_V_ALIGN_T aV_justify,
216 int aWidth,
217 bool aItalic,
218 bool aBold,
219 bool aMultilineAllowed,
220 KIFONT::FONT* aFont,
221 const KIFONT::METRICS& aFontMetrics,
222 void* aData = nullptr ) override;
223
224 virtual void PlotText( const VECTOR2I& aPos,
225 const COLOR4D& aColor,
226 const wxString& aText,
227 const TEXT_ATTRIBUTES& aAttributes,
228 KIFONT::FONT* aFont,
229 const KIFONT::METRICS& aFontMetrics,
230 void* aData = nullptr ) override;
231
232 virtual void PlotPoly( const SHAPE_LINE_CHAIN& aCornerList, FILL_T aFill,
233 int aWidth, void* aData = nullptr ) override;
234
235
236protected:
237 virtual void emitSetRGBColor( double r, double g, double b, double a ) override;
238};
239
240
242{
243 std::string m_name;
244 std::vector<float> m_cameraMatrix;
246 float m_fov;
247};
248
249
251{
252public:
253 PDF_PLOTTER( const PROJECT* aProject = nullptr ) :
254 PSLIKE_PLOTTER( aProject ),
255 m_pageTreeHandle( 0 ),
258 m_jsNamesHandle( 0 ),
259 m_pageStreamHandle( -1 ),
261 m_workFile( nullptr ),
263 m_3dModelHandle( -1 ),
264 m_3dExportMode( false ),
265 m_strokeFontManager( nullptr ),
266 m_outlineFontManager( nullptr )
267 {
268 }
269
270 virtual ~PDF_PLOTTER();
271
272 virtual PLOT_FORMAT GetPlotterType() const override
273 {
274 return PLOT_FORMAT::PDF;
275 }
276
277 static wxString GetDefaultFileExtension()
278 {
279 return wxString( wxT( "pdf" ) );
280 }
281
291 virtual bool OpenFile( const wxString& aFullFilename ) override;
292
297 virtual bool StartPlot( const wxString& aPageNumber ) override;
298
299 virtual bool StartPlot( const wxString& aPageNumber,
300 const wxString& aPageName = wxEmptyString );
301
302 virtual bool EndPlot() override;
303
307 virtual void StartPage( const wxString& aPageNumber,
308 const wxString& aPageName = wxEmptyString,
309 const wxString& aParentPageNumber = wxEmptyString,
310 const wxString& aParentPageName = wxEmptyString );
311
315 virtual void ClosePage();
316
325 virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override;
326
330 virtual void SetDash( int aLineWidth, LINE_STYLE aLineStyle ) override;
331
336 virtual void SetViewport( const VECTOR2I& aOffset, double aIusPerDecimil, double aScale,
337 bool aMirror ) override;
338
342 virtual void Rect( const VECTOR2I& p1, const VECTOR2I& p2, FILL_T fill, int width,
343 int aCornerRadius = 0 ) override;
344
348 virtual void Circle( const VECTOR2I& pos, int diametre, FILL_T fill, int width ) override;
349
353 virtual void Arc( const VECTOR2D& aCenter, const EDA_ANGLE& aStartAngle, const EDA_ANGLE& aAngle,
354 double aRadius, FILL_T aFill, int aWidth ) override;
355
359 virtual void PlotPoly( const std::vector<VECTOR2I>& aCornerList, FILL_T aFill,
360 int aWidth = USE_DEFAULT_LINE_WIDTH, void* aData = nullptr ) override;
361
362 virtual void PlotPoly( const SHAPE_LINE_CHAIN& aLineChain, FILL_T aFill,
363 int aWidth = USE_DEFAULT_LINE_WIDTH, void* aData = nullptr ) override;
364
365 virtual void PenTo( const VECTOR2I& pos, char plume ) override;
366
367 virtual void Text( const VECTOR2I& aPos,
368 const COLOR4D& aColor,
369 const wxString& aText,
370 const EDA_ANGLE& aOrient,
371 const VECTOR2I& aSize,
372 enum GR_TEXT_H_ALIGN_T aH_justify,
373 enum GR_TEXT_V_ALIGN_T aV_justify,
374 int aWidth,
375 bool aItalic,
376 bool aBold,
377 bool aMultilineAllowed,
378 KIFONT::FONT* aFont,
379 const KIFONT::METRICS& aFontMetrics,
380 void* aData = nullptr ) override;
381
382private:
383 // Structure to hold overbar drawing information
385 {
386 VECTOR2I startPos; // Start position of overbar text
387 VECTOR2I endPos; // End position of overbar text
388 VECTOR2I fontSize; // Font size for proper overbar positioning
389 bool isOutline; // True if the overbar applies to an outline font run
390 GR_TEXT_V_ALIGN_T vAlign; // Original vertical alignment of the parent text
391 };
392
396 VECTOR2I renderWord( const wxString& aWord, const VECTOR2I& aPosition, const VECTOR2I& aSize,
397 const EDA_ANGLE& aOrient, bool aTextMirrored, int aWidth, bool aBold, bool aItalic,
398 KIFONT::FONT* aFont, const KIFONT::METRICS& aFontMetrics,
399 enum GR_TEXT_V_ALIGN_T aV_justify, TEXT_STYLE_FLAGS aTextStyle );
400
404 VECTOR2I renderMarkupNode( const MARKUP::NODE* aNode, const VECTOR2I& aPosition,
405 const VECTOR2I& aBaseSize, const EDA_ANGLE& aOrient, bool aTextMirrored,
406 int aWidth, bool aBaseBold, bool aBaseItalic, KIFONT::FONT* aFont,
407 const KIFONT::METRICS& aFontMetrics, enum GR_TEXT_V_ALIGN_T aV_justify,
408 TEXT_STYLE_FLAGS aTextStyle, std::vector<OVERBAR_INFO>& aOverbars );
409
413 void drawOverbars( const std::vector<OVERBAR_INFO>& aOverbars, const EDA_ANGLE& aOrient,
414 const KIFONT::METRICS& aFontMetrics );
415
416 std::vector<VECTOR2D> arcPath( const VECTOR2D& aCenter, const EDA_ANGLE& aStartAngle,
417 const EDA_ANGLE& aAngle, double aRadius );
418
419public:
420 virtual void PlotText( const VECTOR2I& aPos,
421 const COLOR4D& aColor,
422 const wxString& aText,
423 const TEXT_ATTRIBUTES& aAttributes,
424 KIFONT::FONT* aFont,
425 const KIFONT::METRICS& aFontMetrics,
426 void* aData = nullptr ) override;
427
428 void HyperlinkBox( const BOX2I& aBox, const wxString& aDestinationURL ) override;
429
430 void HyperlinkMenu( const BOX2I& aBox, const std::vector<wxString>& aDestURLs ) override;
431
432 void Bookmark( const BOX2I& aBox, const wxString& aName,
433 const wxString& aGroupName = wxEmptyString ) override;
434
435 void Plot3DModel( const wxString& aSourcePath, const std::vector<PDF_3D_VIEW>& a3DViews );
436
437 void Set3DExport( bool aYes ) { m_3dExportMode = aYes; }
438
442 void PlotImage( const wxImage& aImage, const VECTOR2I& aPos, double aScaleFactor ) override;
443
457 static std::vector<float> CreateC2WMatrixFromAngles( const VECTOR3D& aTargetPosition,
458 float aCameraDistance,
459 float aYawDegrees,
460 float aPitchDegrees,
461 float aRollDegrees );
462
463protected:
465 {
467 wxString title;
469
470 std::vector<OUTLINE_NODE*> children;
471
473 {
474 std::for_each( children.begin(), children.end(),
475 []( OUTLINE_NODE* node )
476 {
477 delete node;
478 } );
479 }
480
481 OUTLINE_NODE* AddChild( int aActionHandle, const wxString& aTitle, int aEntryHandle )
482 {
483 OUTLINE_NODE* child = new OUTLINE_NODE
484 {
485 aActionHandle, aTitle, aEntryHandle, {}
486 };
487
488 children.push_back( child );
489
490 return child;
491 }
492 };
493
504 OUTLINE_NODE* addOutlineNode( OUTLINE_NODE* aParent, int aActionHandle,
505 const wxString& aTitle );
506
509 std::string encodeStringForPlotter( const wxString& aUnicode ) override;
510
520 virtual void emitSetRGBColor( double r, double g, double b, double a ) override;
521
528 int allocPdfObject();
529
534 int startPdfObject( int aHandle = -1 );
535
539 void closePdfObject();
540
548 int startPdfStream( int aHandle = -1 );
549
553 void closePdfStream();
554
558 int emitOutline();
559
563 void emitOutlineNode( OUTLINE_NODE* aNode, int aParentHandle, int aNextNode, int aPrevNode );
564
570 int emitGoToAction( int aPageHandle, const VECTOR2I& aBottomLeft, const VECTOR2I& aTopRight );
571 int emitGoToAction( int aPageHandle );
572
573
575
576 void emitStrokeFonts();
577 void emitOutlineFonts();
578
579 std::string encodeByteString( const std::string& aBytes );
580
585 std::vector<int> m_pageHandles;
588
590 wxString m_pageName;
592
594 std::vector<long> m_xrefTable;
595
597 std::vector<wxString> m_pageNumbers;
598
600 std::vector<std::pair<BOX2I, wxString>> m_hyperlinksInPage;
601 std::vector<std::pair<BOX2I, std::vector<wxString>>> m_hyperlinkMenusInPage;
602
604 std::map<int, std::pair<BOX2D, wxString>> m_hyperlinkHandles;
605 std::map<int, std::pair<BOX2D, std::vector<wxString>>> m_hyperlinkMenuHandles;
606
607 std::map<wxString, std::vector<std::pair<BOX2I, wxString>>> m_bookmarksInPage;
608
609 std::map<int, wxImage> m_imageHandles;
610
611 std::unique_ptr<OUTLINE_NODE> m_outlineRoot;
613
616 std::unique_ptr<PDF_STROKE_FONT_MANAGER> m_strokeFontManager;
617 std::unique_ptr<PDF_OUTLINE_FONT_MANAGER> m_outlineFontManager;
618};
619
620
622{
623public:
624 SVG_PLOTTER( const PROJECT* aProject = nullptr );
625
626 static wxString GetDefaultFileExtension()
627 {
628 return wxString( wxT( "svg" ) );
629 }
630
631 virtual PLOT_FORMAT GetPlotterType() const override
632 {
633 return PLOT_FORMAT::SVG;
634 }
635
639 virtual bool StartPlot( const wxString& aPageNumber ) override;
640 virtual bool EndPlot() override;
641
645 virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override;
646
650 virtual void SetDash( int aLineWidth, LINE_STYLE aLineStyle ) override;
651
652 virtual void SetViewport( const VECTOR2I& aOffset, double aIusPerDecimil, double aScale,
653 bool aMirror ) override;
654 virtual void Rect( const VECTOR2I& p1, const VECTOR2I& p2, FILL_T fill, int width,
655 int aCornerRadius = 0 ) override;
656 virtual void Circle( const VECTOR2I& pos, int diametre, FILL_T fill, int width ) override;
657 virtual void Arc( const VECTOR2D& aCenter, const EDA_ANGLE& aStartAngle,
658 const EDA_ANGLE& aAngle, double aRadius, FILL_T aFill,
659 int aWidth ) override;
660
661 virtual void BezierCurve( const VECTOR2I& aStart, const VECTOR2I& aControl1,
662 const VECTOR2I& aControl2, const VECTOR2I& aEnd,
663 int aTolerance, int aLineThickness ) override;
664
665 virtual void PlotPoly( const std::vector<VECTOR2I>& aCornerList, FILL_T aFill,
666 int aWidth, void * aData ) override;
667
671 virtual void PlotImage( const wxImage& aImage, const VECTOR2I& aPos,
672 double aScaleFactor ) override;
673
674 virtual void PenTo( const VECTOR2I& pos, char plume ) override;
675
686 virtual void SetSvgCoordinatesFormat( unsigned aPrecision ) override;
687
693 virtual void StartBlock( void* aData ) override;
694
700 virtual void EndBlock( void* aData ) override;
701
702 virtual void Text( const VECTOR2I& aPos,
703 const COLOR4D& aColor,
704 const wxString& aText,
705 const EDA_ANGLE& aOrient,
706 const VECTOR2I& aSize,
707 enum GR_TEXT_H_ALIGN_T aH_justify,
708 enum GR_TEXT_V_ALIGN_T aV_justify,
709 int aWidth,
710 bool aItalic,
711 bool aBold,
712 bool aMultilineAllowed,
713 KIFONT::FONT* aFont,
714 const KIFONT::METRICS& aFontMetrics,
715 void* aData = nullptr ) override;
716
717
718 virtual void PlotText( const VECTOR2I& aPos,
719 const COLOR4D& aColor,
720 const wxString& aText,
721 const TEXT_ATTRIBUTES& aAttributes,
722 KIFONT::FONT* aFont,
723 const KIFONT::METRICS& aFontMetrics,
724 void* aData = nullptr ) override;
725
726protected:
731 virtual void emitSetRGBColor( double r, double g, double b, double a ) override;
732
739 void setSVGPlotStyle( int aLineWidth, bool aIsGroup = true,
740 const std::string& aExtraStyle = {} );
741
745 void setFillMode( FILL_T fill );
746
747 FILL_T m_fillMode; // true if the current contour rect, arc, circle, polygon must
748 // be filled
749 uint32_t m_pen_rgb_color; // current rgb color value: each color has a value 0 ... 255,
750 // and the 3 colors are grouped in a 3x8 bits value (written
751 // in hex to svg files)
752 uint32_t m_brush_rgb_color; // same as m_pen_rgb_color, used to fill some contours.
754 bool m_graphics_changed; // true if a pen/brush parameter is modified color, pen size,
755 // fill mode ... the new SVG stype must be output on file
756 LINE_STYLE m_dashed; // plot line style
757 unsigned m_precision; // How fine the step size is
758 // Use 3-6 (3 means um precision, 6 nm precision) in PcbNew
759 // 3-4 in other modules (avoid values >4 to avoid overflow)
760 // see also comment for m_useInch.
761};
int color
BOX2< VECTOR2I > BOX2I
Definition box2.h:922
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.
void emitOutlineFonts()
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 ~PDF_PLOTTER()
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 emitStrokeFonts()
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()
virtual void Rect(const VECTOR2I &p1, const VECTOR2I &p2, FILL_T fill, int width, int aCornerRadius=0) override
Rectangles in PDF.
int startPdfStream(int aHandle=-1)
Start a PDF stream (for the page).
VECTOR2I renderMarkupNode(const MARKUP::NODE *aNode, const VECTOR2I &aPosition, const VECTOR2I &aBaseSize, const EDA_ANGLE &aOrient, bool aTextMirrored, int aWidth, bool aBaseBold, bool aBaseItalic, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, enum GR_TEXT_V_ALIGN_T aV_justify, TEXT_STYLE_FLAGS aTextStyle, std::vector< OVERBAR_INFO > &aOverbars)
Recursively render markup nodes with appropriate styling.
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.
std::unique_ptr< PDF_OUTLINE_FONT_MANAGER > m_outlineFontManager
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...
std::unique_ptr< PDF_STROKE_FONT_MANAGER > m_strokeFontManager
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.
VECTOR2I renderWord(const wxString &aWord, const VECTOR2I &aPosition, const VECTOR2I &aSize, const EDA_ANGLE &aOrient, bool aTextMirrored, int aWidth, bool aBold, bool aItalic, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, enum GR_TEXT_V_ALIGN_T aV_justify, TEXT_STYLE_FLAGS aTextStyle)
Render a single word with the given style parameters.
wxString m_workFilename
std::string encodeByteString(const std::string &aBytes)
void drawOverbars(const std::vector< OVERBAR_INFO > &aOverbars, const EDA_ANGLE &aOrient, const KIFONT::METRICS &aFontMetrics)
Draw overbar lines above text.
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
static std::vector< float > CreateC2WMatrixFromAngles(const VECTOR3D &aTargetPosition, float aCameraDistance, float aYawDegrees, float aPitchDegrees, float aRollDegrees)
Generates the camera to world matrix for use with a 3D View.
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.
std::vector< VECTOR2D > arcPath(const VECTOR2D &aCenter, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aAngle, double aRadius)
static const int USE_DEFAULT_LINE_WIDTH
Definition plotter.h:125
PLOTTER(const PROJECT *aProject=nullptr)
Definition plotter.cpp:48
Container for project specific data.
Definition project.h:66
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,...
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.
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.
virtual void FlashPadCircle(const VECTOR2I &aPadPos, int aDiameter, void *aData) override
virtual void FlashPadOval(const VECTOR2I &aPadPos, const VECTOR2I &aSize, const EDA_ANGLE &aPadOrient, void *aData) override
virtual void FlashPadRoundRect(const VECTOR2I &aPadPos, const VECTOR2I &aSize, int aCornerRadius, const EDA_ANGLE &aOrient, void *aData) override
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.
virtual std::string encodeStringForPlotter(const wxString &aUnicode)
convert a wxString unicode string to a char string compatible with the accepted string plotter format...
virtual void FlashPadCustom(const VECTOR2I &aPadPos, const VECTOR2I &aSize, const EDA_ANGLE &aOrient, SHAPE_POLY_SET *aPolygons, void *aData) override
virtual void FlashPadTrapez(const VECTOR2I &aPadPos, const VECTOR2I *aCorners, const EDA_ANGLE &aPadOrient, void *aData) override
Flash a trapezoidal pad.
virtual void FlashPadRect(const VECTOR2I &aPadPos, const VECTOR2I &aSize, const EDA_ANGLE &aPadOrient, void *aData) override
virtual bool EndPlot() override
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.
virtual void Rect(const VECTOR2I &p1, const VECTOR2I &p2, FILL_T fill, int width, int aCornerRadius=0) override
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 PlotImage(const wxImage &aImage, const VECTOR2I &aPos, double aScaleFactor) override
PostScript-likes at the moment are the only plot engines supporting bitmaps.
virtual void SetViewport(const VECTOR2I &aOffset, double aIusPerDecimil, double aScale, bool aMirror) override
Set the plot offset and scaling for the current plot.
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=nullptr) override
Draw a polygon ( filled or not ).
virtual void SetDash(int aLineWidth, LINE_STYLE aLineStyle) override
PostScript supports dashed lines.
virtual void Arc(const VECTOR2D &aCenter, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aAngle, double aRadius, FILL_T aFill, int aWidth) override
virtual bool StartPlot(const wxString &aPageNumber) override
The code within this function (and the CloseFilePS function) creates postscript files whose contents ...
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.
virtual void SetCurrentLineWidth(int width, void *aData=nullptr) override
Set the current line width (in IUs) for the next plot.
static wxString GetDefaultFileExtension()
virtual void PenTo(const VECTOR2I &pos, char plume) override
Moveto/lineto primitive, moves the 'pen' to the specified direction.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
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
SVG_PLOTTER(const PROJECT *aProject=nullptr)
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.
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, int aCornerRadius=0) 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()
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
unsigned int TEXT_STYLE_FLAGS
Definition font.h:64
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.
std::vector< float > m_cameraMatrix
std::string m_name
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.
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695
VECTOR2< double > VECTOR2D
Definition vector2d.h:694
VECTOR3< double > VECTOR3D
Definition vector3.h:230