VTK
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 =========================================================================*/
20 #ifndef vtkPDFContextDevice2D_h
21 #define vtkPDFContextDevice2D_h
22 
23 #include "vtkIOExportModule.h" // For export macro
24 #include "vtkContextDevice2D.h"
25 #include "vtkNew.h" // For vtkNew!
26 
27 class vtkColor3ub;
28 class vtkPath;
29 class vtkRenderer;
30 class vtkTransform;
31 
32 class VTKIOEXPORT_EXPORT vtkPDFContextDevice2D: public vtkContextDevice2D
33 {
34 public:
35  static vtkPDFContextDevice2D* New();
37  void PrintSelf(ostream &os, vtkIndent indent) VTK_OVERRIDE;
38 
44  void SetHaruObjects(void *doc, void *page);
45 
46  void SetRenderer(vtkRenderer*);
47 
48  void DrawPoly(float *points, int n, unsigned char *colors = 0,
49  int nc_comps = 0) VTK_OVERRIDE;
50  void DrawLines(float *f, int n, unsigned char *colors = 0,
51  int nc_comps = 0) VTK_OVERRIDE;
52  void DrawPoints(float *points, int n, unsigned char* colors = 0,
53  int nc_comps = 0) VTK_OVERRIDE;
54  void DrawPointSprites(vtkImageData *sprite, float *points, int n,
55  unsigned char *colors = 0,
56  int nc_comps = 0) VTK_OVERRIDE;
57  void DrawMarkers(int shape, bool highlight, float *points, int n,
58  unsigned char *colors = 0, int nc_comps = 0) VTK_OVERRIDE;
59  void DrawQuad(float *, int) VTK_OVERRIDE;
60  void DrawQuadStrip(float *, int) VTK_OVERRIDE;
61  void DrawPolygon(float *, int) VTK_OVERRIDE;
62  void DrawColoredPolygon(float *points, int numPoints,
63  unsigned char *colors = nullptr,
64  int nc_comps = 0) VTK_OVERRIDE;
65  void DrawEllipseWedge(float x, float y, float outRx, float outRy,
66  float inRx, float inRy, float startAngle,
67  float stopAngle) VTK_OVERRIDE;
68  void DrawEllipticArc(float x, float y, float rX, float rY,
69  float startAngle, float stopAngle) VTK_OVERRIDE;
70  void DrawString(float *point, const vtkStdString &string) VTK_OVERRIDE;
71  void ComputeStringBounds(const vtkStdString &string,
72  float bounds[4]) VTK_OVERRIDE;
73  void DrawString(float *point, const vtkUnicodeString &string) VTK_OVERRIDE;
74  void ComputeStringBounds(const vtkUnicodeString &string,
75  float bounds[4]) VTK_OVERRIDE;
76  void ComputeJustifiedStringBounds(const char* string,
77  float bounds[4]) VTK_OVERRIDE;
78  void DrawMathTextString(float *point, const vtkStdString &str) VTK_OVERRIDE;
79  void DrawImage(float p[2], float scale, vtkImageData *image) VTK_OVERRIDE;
80  void DrawImage(const vtkRectf& pos, vtkImageData *image) VTK_OVERRIDE;
81  void SetColor4(unsigned char color[4]) VTK_OVERRIDE;
82  void SetTexture(vtkImageData* image, int properties) VTK_OVERRIDE;
83  void SetPointSize(float size) VTK_OVERRIDE;
84  void SetLineWidth(float width) VTK_OVERRIDE;
85  void DrawPolyData(float p[2], float scale, vtkPolyData* polyData,
86  vtkUnsignedCharArray* colors, int scalarMode) VTK_OVERRIDE;
87 
88  void SetLineType(int type) VTK_OVERRIDE;
89  void SetMatrix(vtkMatrix3x3 *m) VTK_OVERRIDE;
90  void GetMatrix(vtkMatrix3x3 *m) VTK_OVERRIDE;
91  void MultiplyMatrix(vtkMatrix3x3 *m) VTK_OVERRIDE;
92  void PushMatrix() VTK_OVERRIDE;
93  void PopMatrix() VTK_OVERRIDE;
94  void SetClipping(int *x) VTK_OVERRIDE;
95  void EnableClipping(bool enable) VTK_OVERRIDE;
96 
97 protected:
99  ~vtkPDFContextDevice2D() VTK_OVERRIDE;
100 
101  void PushGraphicsState();
102  void PopGraphicsState();
103 
104  void ApplyPenState();
105  void ApplyStrokeColor(unsigned char *color, int numComps);
106  void ApplyLineWidth(float width);
107  void ApplyLineType(int type);
108  void Stroke();
109 
110  void ApplyPenStateAsFill();
111  void ApplyBrushState();
112  void ApplyTextPropertyState();
113  void ApplyFillColor(unsigned char *color, int numComps);
114  void ApplyFillAlpha(unsigned char alpha);
115  void Fill(bool stroke = false);
116  void FillEvenOdd(bool stroke = false);
117 
118  void BeginClipPathForTexture();
119  void RegisterTexturePoints(float *data, int numPoints);
120  void FillTexture();
121 
122  // converts input to RGB if needed. Call Delete() on the returned object when
123  // finished with it.
124  vtkImageData* PrepareImageData(vtkImageData *in);
125 
126  void DrawEllipticArcSegments(float x, float y, float rX, float rY,
127  float startAngle, float stopAngle,
128  bool startPath);
129  int GetNumberOfArcIterations(float rX, float rY,
130  float startAngle, float stopAngle);
131 
132  void DrawCrossMarkers(bool highlight, float *points, int n,
133  unsigned char *colors, int nc_comps);
134  void DrawPlusMarkers(bool highlight, float *points, int n,
135  unsigned char *colors, int nc_comps);
136  void DrawSquareMarkers(bool highlight, float *points, int n,
137  unsigned char *colors, int nc_comps);
138  void DrawCircleMarkers(bool highlight, float *points, int n,
139  unsigned char *colors, int nc_comps);
140  void DrawDiamondMarkers(bool highlight, float *points, int n,
141  unsigned char *colors, int nc_comps);
142 
143  void DrawPath(vtkPath *path, float x, float y);
144 
145  void BeginText();
146  float ComputeTextWidth(const vtkStdString &str);
147  // Transforms pos form the VTK anchor point to the PDF anchor point, and
148  // returns a guess at the height of the rendered string.
149  // realWidth is the width computed by ComputTextWidth.
150  float ComputeTextPosition(float pos[2], const vtkStdString &str,
151  float realWidth);
152  void AlignText(double orientation, float width, float height, float *p);
153  void EndText();
154 
155  void ApplyTransform();
156 
157  // Converts a 2D transform matrix into a 3D transform matrix, or vice versa
158  static void Matrix3ToMatrix4(vtkMatrix3x3 *mat3, double mat4[16]);
159  static void Matrix4ToMatrix3(double mat4[16], vtkMatrix3x3 *mat3);
160  static void Matrix4ToMatrix3(double mat4[16], double mat3[9]);
161 
162  // Convert a 3D transform matrix to an HPDF transformation.
163  // trans = {a, b, c, d, x, y}, which define the transform:
164  // | a b x |
165  // | c d y |
166  // | 0 0 1 |
167  static void Matrix4ToHPDFTransform(const double mat4[16], float hpdfMat[6]);
168  static void Matrix3ToHPDFTransform(const double mat4[9], float hpdfMat[6]);
169  static void HPDFTransformToMatrix3(float a, float b, float c, float d,
170  float x, float y, double mat3[9]);
171 
172  struct Details;
173  Details *Impl;
174 
175  // This is a 3D transform, the 2D version doesn't support push/pop.
177 
178  vtkRenderer *Renderer;
179  float PointSize;
180  float ClipBox[4]; // x, y, w, h
181 
182  bool IsInTexturedFill;
183  float TextureBounds[4]; // xmin, xmax, ymin, ymax; used for placing textures
184 
185 private:
186  vtkPDFContextDevice2D(const vtkPDFContextDevice2D&) VTK_DELETE_FUNCTION;
187  void operator=(const vtkPDFContextDevice2D&) VTK_DELETE_FUNCTION;
188 };
189 
190 #endif // vtkPDFContextDevice2D_h
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:41
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:32
abstract specification for renderers
Definition: vtkRenderer.h:57
static vtkContextDevice2D * New()
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
Some derived classes for the different colors commonly used.
Definition: vtkColor.h:194
a simple class to control print indentation
Definition: vtkIndent.h:33
topologically and geometrically regular array of data
Definition: vtkImageData.h:39
Abstract class for drawing 2D primitives.
vtkContextDevice2D implementation for use with vtkPDFExporter.
dynamic, self-adjusting array of unsigned char
Allocate and hold a VTK object.
Definition: vtkNew.h:61
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:33
String class that stores Unicode text.