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,
337 double aScale, 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,
354 const EDA_ANGLE& aAngle, double aRadius, FILL_T aFill,
355 int aWidth ) override;
356
360 virtual void PlotPoly( const std::vector<VECTOR2I>& aCornerList, FILL_T aFill,
361 int aWidth = USE_DEFAULT_LINE_WIDTH, void* aData = nullptr ) override;
362
363 virtual void PlotPoly( const SHAPE_LINE_CHAIN& aCornerList, FILL_T aFill,
364 int aWidth = USE_DEFAULT_LINE_WIDTH, void* aData = nullptr ) override;
365
366 virtual void PenTo( const VECTOR2I& pos, char plume ) override;
367
368 virtual void Text( const VECTOR2I& aPos,
369 const COLOR4D& aColor,
370 const wxString& aText,
371 const EDA_ANGLE& aOrient,
372 const VECTOR2I& aSize,
373 enum GR_TEXT_H_ALIGN_T aH_justify,
374 enum GR_TEXT_V_ALIGN_T aV_justify,
375 int aWidth,
376 bool aItalic,
377 bool aBold,
378 bool aMultilineAllowed,
379 KIFONT::FONT* aFont,
380 const KIFONT::METRICS& aFontMetrics,
381 void* aData = nullptr ) override;
382
383private:
384 // Structure to hold overbar drawing information
386 {
387 VECTOR2I startPos; // Start position of overbar text
388 VECTOR2I endPos; // End position of overbar text
389 VECTOR2I fontSize; // Font size for proper overbar positioning
390 bool isOutline; // True if the overbar applies to an outline font run
391 GR_TEXT_V_ALIGN_T vAlign; // Original vertical alignment of the parent text
392 };
393
397 VECTOR2I renderWord( const wxString& aWord, const VECTOR2I& aPosition,
398 const VECTOR2I& aSize, const EDA_ANGLE& aOrient,
399 bool aTextMirrored, int aWidth, bool aBold, bool aItalic,
400 KIFONT::FONT* aFont, const KIFONT::METRICS& aFontMetrics,
401 enum GR_TEXT_V_ALIGN_T aV_justify, TEXT_STYLE_FLAGS aTextStyle );
402
406 VECTOR2I renderMarkupNode( const MARKUP::NODE* aNode, const VECTOR2I& aPosition,
407 const VECTOR2I& aBaseSize, const EDA_ANGLE& aOrient,
408 bool aTextMirrored, int aWidth, bool aBaseBold,
409 bool aBaseItalic, KIFONT::FONT* aFont,
410 const KIFONT::METRICS& aFontMetrics,
411 enum GR_TEXT_V_ALIGN_T aV_justify,
412 TEXT_STYLE_FLAGS aTextStyle,
413 std::vector<OverbarInfo>& aOverbars );
414
418 void drawOverbars( const std::vector<OverbarInfo>& aOverbars,
419 const EDA_ANGLE& aOrient, const KIFONT::METRICS& aFontMetrics );
420
421public:
422 virtual void PlotText( const VECTOR2I& aPos,
423 const COLOR4D& aColor,
424 const wxString& aText,
425 const TEXT_ATTRIBUTES& aAttributes,
426 KIFONT::FONT* aFont,
427 const KIFONT::METRICS& aFontMetrics,
428 void* aData = nullptr ) override;
429
430 void HyperlinkBox( const BOX2I& aBox, const wxString& aDestinationURL ) override;
431
432 void HyperlinkMenu( const BOX2I& aBox, const std::vector<wxString>& aDestURLs ) override;
433
434 void Bookmark( const BOX2I& aBox, const wxString& aName,
435 const wxString& aGroupName = wxEmptyString ) override;
436
437 void Plot3DModel( const wxString& aSourcePath, const std::vector<PDF_3D_VIEW>& a3DViews );
438
439 void Set3DExport( bool aYes ) { m_3dExportMode = aYes; }
440
444 void PlotImage( const wxImage& aImage, const VECTOR2I& aPos, double aScaleFactor ) override;
445
459 static std::vector<float> CreateC2WMatrixFromAngles( const VECTOR3D& aTargetPosition,
460 float aCameraDistance,
461 float aYawDegrees,
462 float aPitchDegrees,
463 float aRollDegrees );
464
465protected:
467 {
469 wxString title;
471
472 std::vector<OUTLINE_NODE*> children;
473
475 {
476 std::for_each( children.begin(), children.end(),
477 []( OUTLINE_NODE* node )
478 {
479 delete node;
480 } );
481 }
482
483 OUTLINE_NODE* AddChild( int aActionHandle, const wxString& aTitle, int aEntryHandle )
484 {
485 OUTLINE_NODE* child = new OUTLINE_NODE
486 {
487 aActionHandle, aTitle, aEntryHandle, {}
488 };
489
490 children.push_back( child );
491
492 return child;
493 }
494 };
495
506 OUTLINE_NODE* addOutlineNode( OUTLINE_NODE* aParent, int aActionHandle,
507 const wxString& aTitle );
508
511 std::string encodeStringForPlotter( const wxString& aUnicode ) override;
512
522 virtual void emitSetRGBColor( double r, double g, double b, double a ) override;
523
530 int allocPdfObject();
531
536 int startPdfObject( int aHandle = -1 );
537
541 void closePdfObject();
542
550 int startPdfStream( int aHandle = -1 );
551
555 void closePdfStream();
556
560 int emitOutline();
561
565 void emitOutlineNode( OUTLINE_NODE* aNode, int aParentHandle, int aNextNode, int aPrevNode );
566
572 int emitGoToAction( int aPageHandle, const VECTOR2I& aBottomLeft, const VECTOR2I& aTopRight );
573 int emitGoToAction( int aPageHandle );
574
575
577
578 void emitStrokeFonts();
579 void emitOutlineFonts();
580
581 std::string encodeByteString( const std::string& aBytes );
582
587 std::vector<int> m_pageHandles;
590
592 wxString m_pageName;
594
596 std::vector<long> m_xrefTable;
597
599 std::vector<wxString> m_pageNumbers;
600
602 std::vector<std::pair<BOX2I, wxString>> m_hyperlinksInPage;
603 std::vector<std::pair<BOX2I, std::vector<wxString>>> m_hyperlinkMenusInPage;
604
606 std::map<int, std::pair<BOX2D, wxString>> m_hyperlinkHandles;
607 std::map<int, std::pair<BOX2D, std::vector<wxString>>> m_hyperlinkMenuHandles;
608
609 std::map<wxString, std::vector<std::pair<BOX2I, wxString>>> m_bookmarksInPage;
610
611 std::map<int, wxImage> m_imageHandles;
612
613 std::unique_ptr<OUTLINE_NODE> m_outlineRoot;
615
618 std::unique_ptr<PDF_STROKE_FONT_MANAGER> m_strokeFontManager;
619 std::unique_ptr<PDF_OUTLINE_FONT_MANAGER> m_outlineFontManager;
620};
621
622
624{
625public:
626 SVG_PLOTTER( const PROJECT* aProject = nullptr );
627
628 static wxString GetDefaultFileExtension()
629 {
630 return wxString( wxT( "svg" ) );
631 }
632
633 virtual PLOT_FORMAT GetPlotterType() const override
634 {
635 return PLOT_FORMAT::SVG;
636 }
637
641 virtual bool StartPlot( const wxString& aPageNumber ) override;
642 virtual bool EndPlot() override;
643
647 virtual void SetCurrentLineWidth( int width, void* aData = nullptr ) override;
648
652 virtual void SetDash( int aLineWidth, LINE_STYLE aLineStyle ) override;
653
654 virtual void SetViewport( const VECTOR2I& aOffset, double aIusPerDecimil, double aScale,
655 bool aMirror ) override;
656 virtual void Rect( const VECTOR2I& p1, const VECTOR2I& p2, FILL_T fill, int width,
657 int aCornerRadius = 0 ) override;
658 virtual void Circle( const VECTOR2I& pos, int diametre, FILL_T fill, int width ) override;
659 virtual void Arc( const VECTOR2D& aCenter, const EDA_ANGLE& aStartAngle,
660 const EDA_ANGLE& aAngle, double aRadius, FILL_T aFill,
661 int aWidth ) override;
662
663 virtual void BezierCurve( const VECTOR2I& aStart, const VECTOR2I& aControl1,
664 const VECTOR2I& aControl2, const VECTOR2I& aEnd,
665 int aTolerance, int aLineThickness ) override;
666
667 virtual void PlotPoly( const std::vector<VECTOR2I>& aCornerList, FILL_T aFill,
668 int aWidth, void * aData ) override;
669
673 virtual void PlotImage( const wxImage& aImage, const VECTOR2I& aPos,
674 double aScaleFactor ) override;
675
676 virtual void PenTo( const VECTOR2I& pos, char plume ) override;
677
688 virtual void SetSvgCoordinatesFormat( unsigned aPrecision ) override;
689
695 virtual void StartBlock( void* aData ) override;
696
702 virtual void EndBlock( void* aData ) override;
703
704 virtual void Text( const VECTOR2I& aPos,
705 const COLOR4D& aColor,
706 const wxString& aText,
707 const EDA_ANGLE& aOrient,
708 const VECTOR2I& aSize,
709 enum GR_TEXT_H_ALIGN_T aH_justify,
710 enum GR_TEXT_V_ALIGN_T aV_justify,
711 int aWidth,
712 bool aItalic,
713 bool aBold,
714 bool aMultilineAllowed,
715 KIFONT::FONT* aFont,
716 const KIFONT::METRICS& aFontMetrics,
717 void* aData = nullptr ) override;
718
719
720 virtual void PlotText( const VECTOR2I& aPos,
721 const COLOR4D& aColor,
722 const wxString& aText,
723 const TEXT_ATTRIBUTES& aAttributes,
724 KIFONT::FONT* aFont,
725 const KIFONT::METRICS& aFontMetrics,
726 void* aData = nullptr ) override;
727
728protected:
733 virtual void emitSetRGBColor( double r, double g, double b, double a ) override;
734
741 void setSVGPlotStyle( int aLineWidth, bool aIsGroup = true,
742 const std::string& aExtraStyle = {} );
743
747 void setFillMode( FILL_T fill );
748
749 FILL_T m_fillMode; // true if the current contour rect, arc, circle, polygon must
750 // be filled
751 uint32_t m_pen_rgb_color; // current rgb color value: each color has a value 0 ... 255,
752 // and the 3 colors are grouped in a 3x8 bits value (written
753 // in hex to svg files)
754 uint32_t m_brush_rgb_color; // same as m_pen_rgb_color, used to fill some contours.
756 bool m_graphics_changed; // true if a pen/brush parameter is modified color, pen size,
757 // fill mode ... the new SVG stype must be output on file
758 LINE_STYLE m_dashed; // plot line style
759 unsigned m_precision; // How fine the step size is
760 // Use 3-6 (3 means um precision, 6 nm precision) in PcbNew
761 // 3-4 in other modules (avoid values >4 to avoid overflow)
762 // see also comment for m_useInch.
763};
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.
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< OverbarInfo > &aOverbars)
Recursively render markup nodes with appropriate styling.
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).
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.
void drawOverbars(const std::vector< OverbarInfo > &aOverbars, const EDA_ANGLE &aOrient, const KIFONT::METRICS &aFontMetrics)
Draw overbar lines above text.
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)
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.
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:65
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