VTK  9.1.0
vtkTextRenderer.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkTextRenderer.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 =========================================================================*/
15 
43 #ifndef vtkTextRenderer_h
44 #define vtkTextRenderer_h
45 
46 #include "vtkDeprecation.h" // for deprecation macros
47 #include "vtkObject.h"
48 #include "vtkRenderingCoreModule.h" // For export macro
49 #include "vtkTuple.h" // For metrics struct
50 #include "vtkVector.h" // For metrics struct
51 
52 class vtkImageData;
53 class vtkPath;
54 class vtkStdString;
55 class vtkUnicodeString;
56 class vtkTextProperty;
57 
58 namespace vtksys
59 {
60 class RegularExpression;
61 }
62 
63 class VTKRENDERINGCORE_EXPORT vtkTextRendererCleanup
64 {
65 public:
68 
69 private:
70  vtkTextRendererCleanup(const vtkTextRendererCleanup& other) = delete;
71  vtkTextRendererCleanup& operator=(const vtkTextRendererCleanup& rhs) = delete;
72 };
73 
74 class VTKRENDERINGCORE_EXPORT vtkTextRenderer : public vtkObject
75 {
76 public:
77  struct Metrics
78  {
83  : BoundingBox(0)
84  , TopLeft(0)
85  , TopRight(0)
86  , BottomLeft(0)
87  , BottomRight(0)
88  , Ascent(0)
89  , Descent(0)
90  {
91  }
92 
99 
101 
110 
120  };
121 
122  vtkTypeMacro(vtkTextRenderer, vtkObject);
123  void PrintSelf(ostream& os, vtkIndent indent) override;
124 
134  static vtkTextRenderer* New();
135 
141 
147  enum Backend
148  {
149  Default = -1,
150  Detect = 0,
153 
154  UserBackend = 16
155  };
156 
158 
161  vtkSetMacro(DefaultBackend, int);
162  vtkGetMacro(DefaultBackend, int);
164 
166 
169  virtual int DetectBackend(const vtkStdString& str);
170  virtual int DetectBackend(const vtkUnicodeString& str);
172 
176  virtual bool FreeTypeIsSupported() { return false; }
177  virtual bool MathTextIsSupported() { return false; }
178 
180 
188  vtkTextProperty* tprop, const vtkStdString& str, int bbox[4], int dpi, int backend = Default)
189  {
190  return this->GetBoundingBoxInternal(tprop, str, bbox, dpi, backend);
191  }
192  VTK_DEPRECATED_IN_9_1_0("Use bool GetBoundingBox(vtkTextProperty* tprop, const vtkStdString& "
193  "str, int bbox[4], int dpi, int backend)")
194  bool GetBoundingBox(vtkTextProperty* tprop, const vtkUnicodeString& str, int bbox[4], int dpi,
195  int backend = Default);
197 
199 
204  bool GetMetrics(vtkTextProperty* tprop, const vtkStdString& str, Metrics& metrics, int dpi,
205  int backend = Default)
206  {
207  return this->GetMetricsInternal(tprop, str, metrics, dpi, backend);
208  }
209  VTK_DEPRECATED_IN_9_1_0("Use bool GetMetrics(vtkTextProperty* tprop, const vtkStdString& str, "
210  "Metrics& metrics, int dpi, int backend)")
211  bool GetMetrics(vtkTextProperty* tprop, const vtkUnicodeString& str, Metrics& metrics, int dpi,
212  int backend = Default);
214 
216 
230  bool RenderString(vtkTextProperty* tprop, const vtkStdString& str, vtkImageData* data,
231  int textDims[2], int dpi, int backend = Default)
232  {
233  return this->RenderStringInternal(tprop, str, data, textDims, dpi, backend);
234  }
235  VTK_DEPRECATED_IN_9_1_0("Use bool RenderString(vtkTextProperty* tprop, const vtkStdString& str, "
236  "vtkImageData* data, int textDims[2], int dpi, int backend)")
237  bool RenderString(vtkTextProperty* tprop, const vtkUnicodeString& str, vtkImageData* data,
238  int textDims[2], int dpi, int backend = Default);
240 
242 
248  int GetConstrainedFontSize(const vtkStdString& str, vtkTextProperty* tprop, int targetWidth,
249  int targetHeight, int dpi, int backend = Default)
250  {
251  return this->GetConstrainedFontSizeInternal(
252  str, tprop, targetWidth, targetHeight, dpi, backend);
253  }
255  "Use int GetConstrainedFontSize(const vtkStdString& str, vtkTextProperty* tprop, int "
256  "targetWidth, int targetHeight, int dpi, int backend)")
257  int GetConstrainedFontSize(const vtkUnicodeString& str, vtkTextProperty* tprop, int targetWidth,
258  int targetHeight, int dpi, int backend = Default);
260 
262 
269  bool StringToPath(
270  vtkTextProperty* tprop, const vtkStdString& str, vtkPath* path, int dpi, int backend = Default)
271  {
272  return this->StringToPathInternal(tprop, str, path, dpi, backend);
273  }
274  VTK_DEPRECATED_IN_9_1_0("Use bool StringToPath(vtkTextProperty* tprop, const vtkStdString& str, "
275  "vtkPath* path, int dpi, int backend)")
276  bool StringToPath(vtkTextProperty* tprop, const vtkUnicodeString& str, vtkPath* path, int dpi,
277  int backend = Default);
279 
286  void SetScaleToPowerOfTwo(bool scale) { this->SetScaleToPowerOfTwoInternal(scale); }
287 
289 
290 protected:
292  ~vtkTextRenderer() override;
293 
295 
299  vtkTextProperty* tprop, const vtkStdString& str, int bbox[4], int dpi, int backend) = 0;
300  VTK_DEPRECATED_IN_9_1_0("Use bool GetBoundingBoxInternal(vtkTextProperty* tprop, const "
301  "vtkStdString& str, int bbox[4], int dpi, int backend)")
302  virtual bool GetBoundingBoxInternal(
303  vtkTextProperty* tprop, const vtkUnicodeString& str, int bbox[4], int dpi, int backend) = 0;
304  virtual bool GetMetricsInternal(
305  vtkTextProperty* tprop, const vtkStdString& str, Metrics& metrics, int dpi, int backend) = 0;
306  VTK_DEPRECATED_IN_9_1_0("Use bool GetMetricsInternal(vtkTextProperty* tprop, const vtkStdString& "
307  "str, Metrics& metrics, int dpi, int backend)")
308  virtual bool GetMetricsInternal(vtkTextProperty* tprop, const vtkUnicodeString& str,
309  Metrics& metrics, int dpi, int backend) = 0;
310  virtual bool RenderStringInternal(vtkTextProperty* tprop, const vtkStdString& str,
311  vtkImageData* data, int textDims[2], int dpi, int backend) = 0;
313  "Use bool RenderStringInternal(vtkTextProperty* tprop, const vtkStdString& str, vtkImageData* "
314  "data, int textDims[2], int dpi, int backend)")
315  virtual bool RenderStringInternal(vtkTextProperty* tprop, const vtkUnicodeString& str,
316  vtkImageData* data, int textDims[2], int dpi, int backend) = 0;
317  virtual int GetConstrainedFontSizeInternal(const vtkStdString& str, vtkTextProperty* tprop,
318  int targetWidth, int targetHeight, int dpi, int backend) = 0;
320  "Use int GetConstrainedFontSizeInternal(const vtkStdString& str, vtkTextProperty* tprop, int "
321  "targetWidth, int targetHeight, int dpi, int backend)")
322  virtual int GetConstrainedFontSizeInternal(const vtkUnicodeString& str, vtkTextProperty* tprop,
323  int targetWidth, int targetHeight, int dpi, int backend) = 0;
324  virtual bool StringToPathInternal(
325  vtkTextProperty* tprop, const vtkStdString& str, vtkPath* path, int dpi, int backend) = 0;
326  VTK_DEPRECATED_IN_9_1_0("Use bool StringToPathInternal(vtkTextProperty* tprop, const "
327  "vtkStdString& str, vtkPath* path, int dpi, int backend)")
328  virtual bool StringToPathInternal(
329  vtkTextProperty* tprop, const vtkUnicodeString& str, vtkPath* path, int dpi, int backend) = 0;
330  virtual void SetScaleToPowerOfTwoInternal(bool scale) = 0;
332 
337  static void SetInstance(vtkTextRenderer* instance);
338 
340 
343  static vtkTextRenderer* Instance;
344  static vtkTextRendererCleanup Cleanup;
346 
347  vtksys::RegularExpression* MathTextRegExp;
348  vtksys::RegularExpression* MathTextRegExp2;
349  vtksys::RegularExpression* MathTextRegExpColumn;
350 
352 
355  virtual void CleanUpFreeTypeEscapes(vtkStdString& str);
356  VTK_DEPRECATED_IN_9_1_0("Use void CleanUpFreeTypeEscapes(vtkStdString& str)")
357  virtual void CleanUpFreeTypeEscapes(vtkUnicodeString& str);
359 
363  int DefaultBackend;
364 
365 private:
366  vtkTextRenderer(const vtkTextRenderer&) = delete;
367  void operator=(const vtkTextRenderer&) = delete;
368 };
369 
370 #endif // vtkTextRenderer_h
vtkTextRendererCleanup
Definition: vtkTextRenderer.h:64
vtkTextRenderer::~vtkTextRenderer
~vtkTextRenderer() override
vtkTextRenderer::Backend
Backend
Available backends.
Definition: vtkTextRenderer.h:148
vtkTextRenderer::DetectBackend
virtual int DetectBackend(const vtkStdString &str)
Determine the appropriate back end needed to render the given string.
vtkX3D::scale
@ scale
Definition: vtkX3D.h:235
vtkTextRenderer::Metrics::Metrics
Metrics()
Construct a Metrics object with all members initialized to 0.
Definition: vtkTextRenderer.h:82
vtkTextRenderer::GetBoundingBoxInternal
virtual bool GetBoundingBoxInternal(vtkTextProperty *tprop, const vtkStdString &str, int bbox[4], int dpi, int backend)=0
Virtual methods for concrete implementations of the public methods.
vtkX3D::data
@ data
Definition: vtkX3D.h:321
vtkTextRenderer::MathTextIsSupported
virtual bool MathTextIsSupported()
Definition: vtkTextRenderer.h:177
vtkPath
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:33
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:82
vtkVector.h
VTK_DEPRECATED_IN_9_1_0
#define VTK_DEPRECATED_IN_9_1_0(reason)
Definition: vtkDeprecation.h:117
vtkTextRenderer::DetectBackend
virtual int DetectBackend(const vtkUnicodeString &str)
Determine the appropriate back end needed to render the given string.
vtkTextRenderer::Metrics::TopLeft
vtkVector2i TopLeft
The corners of the rendered text (or background, if applicable), in pixels.
Definition: vtkTextRenderer.h:105
vtkTextRenderer::GetBoundingBox
bool GetBoundingBox(vtkTextProperty *tprop, const vtkStdString &str, int bbox[4], int dpi, int backend=Default)
Given a text property and a string, get the bounding box {xmin, xmax, ymin, ymax} of the rendered str...
Definition: vtkTextRenderer.h:187
vtkTextRenderer::FreeTypeIsSupported
virtual bool FreeTypeIsSupported()
Test for availability of various backends.
Definition: vtkTextRenderer.h:176
vtkTextRenderer::vtkTextRenderer
vtkTextRenderer()
vtkTextRenderer::Metrics::BottomRight
vtkVector2i BottomRight
The corners of the rendered text (or background, if applicable), in pixels.
Definition: vtkTextRenderer.h:108
vtkTextRenderer::MathText
@ MathText
Definition: vtkTextRenderer.h:152
vtksys
Definition: vtkVASPAnimationReader.h:32
vtkTextRenderer::Metrics::Ascent
vtkVector2i Ascent
Vectors representing the rotated ascent and descent of the text.
Definition: vtkTextRenderer.h:117
vtkImageData
topologically and geometrically regular array of data
Definition: vtkImageData.h:157
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:113
vtkUnicodeString
String class that stores Unicode text.
Definition: vtkUnicodeString.h:80
vtkTextRenderer::Metrics::Descent
vtkVector2i Descent
Vectors representing the rotated ascent and descent of the text.
Definition: vtkTextRenderer.h:118
vtkTextRenderer::Metrics::BoundingBox
vtkTuple< int, 4 > BoundingBox
The axis-aligned bounding box of the rendered text and background, in pixels.
Definition: vtkTextRenderer.h:98
vtkObject.h
vtkTextProperty
represent text properties.
Definition: vtkTextProperty.h:143
vtkTextRenderer::Metrics::BottomLeft
vtkVector2i BottomLeft
The corners of the rendered text (or background, if applicable), in pixels.
Definition: vtkTextRenderer.h:107
vtkTextRendererCleanup::vtkTextRendererCleanup
vtkTextRendererCleanup()
vtkTuple.h
vtkDeprecation.h
vtkTextRenderer::Metrics::TopRight
vtkVector2i TopRight
The corners of the rendered text (or background, if applicable), in pixels.
Definition: vtkTextRenderer.h:106
vtkTextRenderer
Interface for generating images and path data from string data, using multiple backends.
Definition: vtkTextRenderer.h:75
vtkTextRenderer::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkTextRendererCleanup::~vtkTextRendererCleanup
~vtkTextRendererCleanup()
vtkVector2i
Some derived classes for the different vectors commonly used.
Definition: vtkVector.h:478
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:105
vtkTextRenderer::New
static vtkTextRenderer * New()
This is a singleton pattern New.
vtkTuple< int, 4 >
vtkTextRenderer::GetInstance
static vtkTextRenderer * GetInstance()
Return the singleton instance with no reference counting.
vtkTextRenderer::Metrics
Definition: vtkTextRenderer.h:78
vtkTextRenderer::FreeType
@ FreeType
Definition: vtkTextRenderer.h:151