VTK  9.0.1
vtkPDFContextDevice2D.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkPDFContextDevice2D.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
25 #ifndef vtkPDFContextDevice2D_h
26 #define vtkPDFContextDevice2D_h
27 
28 #include "vtkContextDevice2D.h"
29 #include "vtkIOExportPDFModule.h" // For export macro
30 #include "vtkNew.h" // For vtkNew!
31 
32 class vtkColor3ub;
33 class vtkPath;
34 class vtkRenderer;
35 class vtkTransform;
36 
37 class VTKIOEXPORTPDF_EXPORT vtkPDFContextDevice2D : public vtkContextDevice2D
38 {
39 public:
40  static vtkPDFContextDevice2D* New();
42  void PrintSelf(ostream& os, vtkIndent indent) override;
43 
49  void SetHaruObjects(void* doc, void* page);
50 
51  void SetRenderer(vtkRenderer*);
52 
53  void DrawPoly(float* points, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
54  void DrawLines(float* f, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
55  void DrawPoints(float* points, int n, unsigned char* colors = nullptr, int nc_comps = 0) override;
56  void DrawPointSprites(vtkImageData* sprite, float* points, int n, unsigned char* colors = nullptr,
57  int nc_comps = 0) override;
58  void DrawMarkers(int shape, bool highlight, float* points, int n, unsigned char* colors = nullptr,
59  int nc_comps = 0) override;
60  void DrawQuad(float*, int) override;
61  void DrawQuadStrip(float*, int) override;
62  void DrawPolygon(float*, int) override;
63  void DrawColoredPolygon(
64  float* points, int numPoints, unsigned char* colors = nullptr, int nc_comps = 0) override;
65  void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy,
66  float startAngle, float stopAngle) override;
67  void DrawEllipticArc(
68  float x, float y, float rX, float rY, float startAngle, float stopAngle) override;
69  void DrawString(float* point, const vtkStdString& string) override;
70  void ComputeStringBounds(const vtkStdString& string, float bounds[4]) override;
71  void DrawString(float* point, const vtkUnicodeString& string) override;
72  void ComputeStringBounds(const vtkUnicodeString& string, float bounds[4]) override;
73  void ComputeJustifiedStringBounds(const char* string, float bounds[4]) override;
74  void DrawMathTextString(float* point, const vtkStdString& str) override;
75  void DrawImage(float p[2], float scale, vtkImageData* image) override;
76  void DrawImage(const vtkRectf& pos, vtkImageData* image) override;
77  void SetColor4(unsigned char color[4]) override;
78  void SetTexture(vtkImageData* image, int properties) override;
79  void SetPointSize(float size) override;
80  void SetLineWidth(float width) override;
81  void DrawPolyData(float p[2], float scale, vtkPolyData* polyData, vtkUnsignedCharArray* colors,
82  int scalarMode) override;
83 
84  void SetLineType(int type) override;
85  void SetMatrix(vtkMatrix3x3* m) override;
86  void GetMatrix(vtkMatrix3x3* m) override;
87  void MultiplyMatrix(vtkMatrix3x3* m) override;
88  void PushMatrix() override;
89  void PopMatrix() override;
90  void SetClipping(int* x) override;
91  void EnableClipping(bool enable) override;
92 
93 protected:
95  ~vtkPDFContextDevice2D() override;
96 
97  void PushGraphicsState();
98  void PopGraphicsState();
99 
100  void ApplyPenState();
101  void ApplyStrokeColor(unsigned char* color, int numComps);
102  void ApplyLineWidth(float width);
103  void ApplyLineType(int type);
104  void Stroke();
105 
106  void ApplyPenStateAsFill();
107  void ApplyBrushState();
108  void ApplyTextPropertyState();
109  void ApplyFillColor(unsigned char* color, int numComps);
110  void ApplyFillAlpha(unsigned char alpha);
111  void Fill(bool stroke = false);
112  void FillEvenOdd(bool stroke = false);
113 
114  void BeginClipPathForTexture();
115  void RegisterTexturePoints(float* data, int numPoints);
116  void FillTexture();
117 
118  // converts input to RGB if needed. Call Delete() on the returned object when
119  // finished with it.
120  vtkImageData* PrepareImageData(vtkImageData* in);
121 
122  void DrawEllipticArcSegments(
123  float x, float y, float rX, float rY, float startAngle, float stopAngle, bool startPath);
124  int GetNumberOfArcIterations(float rX, float rY, float startAngle, float stopAngle);
125 
126  void DrawCrossMarkers(bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
127  void DrawPlusMarkers(bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
128  void DrawSquareMarkers(bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
129  void DrawCircleMarkers(bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
130  void DrawDiamondMarkers(
131  bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
132 
133  void DrawPath(vtkPath* path, float x, float y);
134 
135  void ApplyTransform();
136 
137  // This is weird, but the pen width must not be affected by the transform's
138  // scaling factors. This function returns the unscaled x/y components of
139  // the pen width.
140  vtkVector2f GetUnscaledPenWidth();
141 
142  // Converts a 2D transform matrix into a 3D transform matrix, or vice versa
143  static void Matrix3ToMatrix4(vtkMatrix3x3* mat3, double mat4[16]);
144  static void Matrix4ToMatrix3(double mat4[16], vtkMatrix3x3* mat3);
145  static void Matrix4ToMatrix3(double mat4[16], double mat3[9]);
146 
147  // Convert a 3D transform matrix to an HPDF transformation.
148  // trans = {a, b, c, d, x, y}, which define the transform:
149  // | a b x |
150  // | c d y |
151  // | 0 0 1 |
152  static void Matrix4ToHPDFTransform(const double mat4[16], float hpdfMat[6]);
153  static void Matrix3ToHPDFTransform(const double mat4[9], float hpdfMat[6]);
154  static void HPDFTransformToMatrix3(
155  float a, float b, float c, float d, float x, float y, double mat3[9]);
156 
157  struct Details;
158  Details* Impl;
159 
160  // This is a 3D transform, the 2D version doesn't support push/pop.
162 
164  float PointSize;
165  float ClipBox[4]; // x, y, w, h
166 
168  float TextureBounds[4]; // xmin, xmax, ymin, ymax; used for placing textures
169 
170 private:
172  void operator=(const vtkPDFContextDevice2D&) = delete;
173 };
174 
175 #endif // vtkPDFContextDevice2D_h
vtkContextDevice2D::DrawMarkers
virtual void DrawMarkers(int shape, bool highlight, float *points, int n, unsigned char *colors=nullptr, int nc_comps=0)
Draw a series of markers centered at the points supplied.
vtkContextDevice2D::ComputeStringBounds
virtual void ComputeStringBounds(const vtkStdString &string, float bounds[4])=0
Compute the bounds of the supplied string.
vtkContextDevice2D::DrawQuadStrip
virtual void DrawQuadStrip(float *, int)
Draw a quad using the specified number of points.
Definition: vtkContextDevice2D.h:115
vtkContextDevice2D::New
static vtkContextDevice2D * New()
vtkContextDevice2D::PopMatrix
virtual void PopMatrix()=0
Pop the current matrix off of the stack.
vtkX3D::alpha
@ alpha
Definition: vtkX3D.h:256
vtkX3D::scale
@ scale
Definition: vtkX3D.h:235
vtkContextDevice2D::DrawPolyData
virtual void DrawPolyData(float p[2], float scale, vtkPolyData *polyData, vtkUnsignedCharArray *colors, int scalarMode)
Draw the supplied PolyData at the given x, y (p[0], p[1]) (bottom corner), scaled by scale (1....
vtkX3D::type
@ type
Definition: vtkX3D.h:522
vtkContextDevice2D::DrawQuad
virtual void DrawQuad(float *, int)
Draw a quad using the specified number of points.
Definition: vtkContextDevice2D.h:110
vtkContextDevice2D::MultiplyMatrix
virtual void MultiplyMatrix(vtkMatrix3x3 *m)=0
Multiply the current model view matrix by the supplied one.
vtkX3D::data
@ data
Definition: vtkX3D.h:321
vtkX3D::image
@ image
Definition: vtkX3D.h:380
vtkContextDevice2D::SetMatrix
virtual void SetMatrix(vtkMatrix3x3 *m)=0
Set the model view matrix for the display.
vtkPath
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:32
vtkContextDevice2D::DrawString
virtual void DrawString(float *point, const vtkStdString &string)=0
Draw some text to the screen.
vtkUnsignedCharArray
dynamic, self-adjusting array of unsigned char
Definition: vtkUnsignedCharArray.h:35
vtkPDFContextDevice2D::Matrix
vtkNew< vtkTransform > Matrix
Definition: vtkPDFContextDevice2D.h:161
vtkContextDevice2D::SetColor4
virtual void SetColor4(unsigned char color[4])=0
Set the color for the device using unsigned char of length 4, RGBA.
vtkPDFContextDevice2D::Renderer
vtkRenderer * Renderer
Definition: vtkPDFContextDevice2D.h:163
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
vtkContextDevice2D::SetClipping
virtual void SetClipping(int *x)=0
Supply an int array of length 4 with x1, y1, width, height specifying clipping region for the device ...
vtkContextDevice2D::DrawColoredPolygon
virtual void DrawColoredPolygon(float *points, int numPoints, unsigned char *colors=nullptr, int nc_comps=0)
Draw a polygon using the specified number of points.
vtkContextDevice2D::PushMatrix
virtual void PushMatrix()=0
Push the current matrix onto the stack.
vtkMatrix3x3
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:33
vtkContextDevice2D::ComputeJustifiedStringBounds
virtual void ComputeJustifiedStringBounds(const char *string, float bounds[4])=0
Compute the bounds of the supplied string while taking into account the justification of the currentl...
vtkContextDevice2D::DrawPolygon
virtual void DrawPolygon(float *p, int n)
Draw a polygon using the specified number of points.
Definition: vtkContextDevice2D.h:121
vtkContextDevice2D::DrawImage
virtual void DrawImage(float p[2], float scale, vtkImageData *image)=0
Draw the supplied image at the given x, y (p[0], p[1]) (bottom corner), scaled by scale (1....
vtkX3D::color
@ color
Definition: vtkX3D.h:227
vtkX3D::points
@ points
Definition: vtkX3D.h:452
vtkX3D::point
@ point
Definition: vtkX3D.h:242
vtkContextDevice2D::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkContextDevice2D::DrawEllipticArc
virtual void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle, float stopAngle)=0
Draw an elliptic arc with center at x,y with radii rX and rY between angles startAngle and stopAngle ...
vtkContextDevice2D::SetLineType
virtual void SetLineType(int type)=0
Set the line type type (using anonymous enum in vtkPen).
vtkContextDevice2D::SetPointSize
virtual void SetPointSize(float size)=0
Set the point size for glyphs/sprites.
vtkImageData
topologically and geometrically regular array of data
Definition: vtkImageData.h:41
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkPDFContextDevice2D
vtkContextDevice2D implementation for use with vtkPDFExporter.
Definition: vtkPDFContextDevice2D.h:37
vtkUnicodeString
String class that stores Unicode text.
Definition: vtkUnicodeString.h:69
vtkX3D::size
@ size
Definition: vtkX3D.h:259
vtkNew< vtkTransform >
vtkContextDevice2D::DrawPointSprites
virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n, unsigned char *colors=nullptr, int nc_comps=0)=0
Draw a series of point sprites, images centred at the points supplied.
vtkX3D::startAngle
@ startAngle
Definition: vtkX3D.h:492
vtkContextDevice2D::DrawPoly
virtual void DrawPoly(float *points, int n, unsigned char *colors=nullptr, int nc_comps=0)=0
Draw a poly line using the points - fastest code path due to memory layout of the coordinates.
vtkContextDevice2D::GetMatrix
virtual void GetMatrix(vtkMatrix3x3 *m)=0
Set the model view matrix for the display.
vtkContextDevice2D
Abstract class for drawing 2D primitives.
Definition: vtkContextDevice2D.h:50
vtkContextDevice2D::DrawLines
virtual void DrawLines(float *f, int n, unsigned char *colors=nullptr, int nc_comps=0)=0
Draw lines using the points - memory layout is as follows: l1p1,l1p2,l2p1,l2p2...
vtkNew.h
vtkContextDevice2D::SetTexture
virtual void SetTexture(vtkImageData *image, int properties)=0
Set the texture for the device, it is used to fill the polygons.
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:67
vtkColor3ub
Some derived classes for the different colors commonly used.
Definition: vtkColor.h:194
vtkContextDevice2D::DrawMathTextString
virtual void DrawMathTextString(float *point, const vtkStdString &string)=0
Draw text using MathText markup for mathematical equations.
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:84
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:34
vtkContextDevice2D::DrawEllipseWedge
virtual void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy, float startAngle, float stopAngle)=0
Draw an elliptic wedge with center at x, y, outer radii outRx, outRy, inner radii inRx,...
vtkContextDevice2D::SetLineWidth
virtual void SetLineWidth(float width)=0
Set the line width.
vtkPDFContextDevice2D::PointSize
float PointSize
Definition: vtkPDFContextDevice2D.h:164
vtkRectf
Definition: vtkRect.h:326
vtkPDFContextDevice2D::Impl
Details * Impl
Definition: vtkPDFContextDevice2D.h:157
vtkContextDevice2D::EnableClipping
virtual void EnableClipping(bool enable)=0
Enable or disable the clipping of the scene.
vtkVector2f
Definition: vtkVector.h:432
vtkPDFContextDevice2D::IsInTexturedFill
bool IsInTexturedFill
Definition: vtkPDFContextDevice2D.h:167
vtkContextDevice2D::DrawPoints
virtual void DrawPoints(float *points, int n, unsigned char *colors=nullptr, int nc_comps=0)=0
Draw a series of points - fastest code path due to memory layout of the coordinates.
vtkContextDevice2D.h