VTK  9.3.20240420
vtkTextRenderer.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3
37#ifndef vtkTextRenderer_h
38#define vtkTextRenderer_h
39
40#include "vtkObject.h"
41#include "vtkRenderingCoreModule.h" // For export macro
42#include "vtkTuple.h" // For metrics struct
43#include "vtkVector.h" // For metrics struct
44
45VTK_ABI_NAMESPACE_BEGIN
46class vtkImageData;
47class vtkPath;
48class vtkStdString;
49class vtkTextProperty;
50VTK_ABI_NAMESPACE_END
51
52namespace vtksys
53{
54class RegularExpression;
55}
56
57VTK_ABI_NAMESPACE_BEGIN
58
59class VTKRENDERINGCORE_EXPORT vtkTextRendererCleanup
60{
61public:
64
65private:
67 vtkTextRendererCleanup& operator=(const vtkTextRendererCleanup& rhs) = delete;
68};
69
70class VTKRENDERINGCORE_EXPORT vtkTextRenderer : public vtkObject
71{
72public:
73 struct Metrics
74 {
79 : BoundingBox(0)
80 , TopLeft(0)
81 , TopRight(0)
82 , BottomLeft(0)
83 , BottomRight(0)
84 , Ascent(0)
85 , Descent(0)
86 {
87 }
88
95
97
106
116 };
117
119 void PrintSelf(ostream& os, vtkIndent indent) override;
120
131
137
144 {
145 Default = -1,
146 Detect = 0,
149
150 UserBackend = 16
151 };
152
154
157 vtkSetMacro(DefaultBackend, int);
158 vtkGetMacro(DefaultBackend, int);
160
162
165 virtual int DetectBackend(const vtkStdString& str);
167
171 virtual bool FreeTypeIsSupported() { return false; }
172 virtual bool MathTextIsSupported() { return false; }
173
175
183 vtkTextProperty* tprop, const vtkStdString& str, int bbox[4], int dpi, int backend = Default)
184 {
185 return this->GetBoundingBoxInternal(tprop, str, bbox, dpi, backend);
186 }
188
190
195 bool GetMetrics(vtkTextProperty* tprop, const vtkStdString& str, Metrics& metrics, int dpi,
196 int backend = Default)
197 {
198 return this->GetMetricsInternal(tprop, str, metrics, dpi, backend);
199 }
201
203
218 int textDims[2], int dpi, int backend = Default)
219 {
220 return this->RenderStringInternal(tprop, str, data, textDims, dpi, backend);
221 }
223
225
231 int GetConstrainedFontSize(const vtkStdString& str, vtkTextProperty* tprop, int targetWidth,
232 int targetHeight, int dpi, int backend = Default)
233 {
234 return this->GetConstrainedFontSizeInternal(
235 str, tprop, targetWidth, targetHeight, dpi, backend);
236 }
238
240
248 vtkTextProperty* tprop, const vtkStdString& str, vtkPath* path, int dpi, int backend = Default)
249 {
250 return this->StringToPathInternal(tprop, str, path, dpi, backend);
251 }
253
260 void SetScaleToPowerOfTwo(bool scale) { this->SetScaleToPowerOfTwoInternal(scale); }
261
263
264protected:
267
269
273 vtkTextProperty* tprop, const vtkStdString& str, int bbox[4], int dpi, int backend) = 0;
274 virtual bool GetMetricsInternal(
275 vtkTextProperty* tprop, const vtkStdString& str, Metrics& metrics, int dpi, int backend) = 0;
276 virtual bool RenderStringInternal(vtkTextProperty* tprop, const vtkStdString& str,
277 vtkImageData* data, int textDims[2], int dpi, int backend) = 0;
279 int targetWidth, int targetHeight, int dpi, int backend) = 0;
281 vtkTextProperty* tprop, const vtkStdString& str, vtkPath* path, int dpi, int backend) = 0;
282 virtual void SetScaleToPowerOfTwoInternal(bool scale) = 0;
284
289 static void SetInstance(vtkTextRenderer* instance);
290
292
298
299 vtksys::RegularExpression* MathTextRegExp;
300 vtksys::RegularExpression* MathTextRegExp2;
301 vtksys::RegularExpression* MathTextRegExpColumn;
302
304
309
314
315private:
316 vtkTextRenderer(const vtkTextRenderer&) = delete;
317 void operator=(const vtkTextRenderer&) = delete;
318};
319
320VTK_ABI_NAMESPACE_END
321#endif // vtkTextRenderer_h
topologically and geometrically regular array of data
a simple class to control print indentation
Definition vtkIndent.h:108
abstract base class for most VTK objects
Definition vtkObject.h:162
concrete dataset representing a path defined by Bezier curves.
Definition vtkPath.h:44
Wrapper around std::string to keep symbols short.
represent text properties.
Interface for generating images and path data from string data, using multiple backends.
int DefaultBackend
The backend to use when none is specified.
virtual int GetConstrainedFontSizeInternal(const vtkStdString &str, vtkTextProperty *tprop, int targetWidth, int targetHeight, int dpi, int backend)=0
Virtual methods for concrete implementations of the public methods.
bool StringToPath(vtkTextProperty *tprop, const vtkStdString &str, vtkPath *path, int dpi, int backend=Default)
Given a text property and a string, this function populates the vtkPath path with the outline of the ...
virtual bool MathTextIsSupported()
static void SetInstance(vtkTextRenderer *instance)
Set the singleton instance.
int GetConstrainedFontSize(const vtkStdString &str, vtkTextProperty *tprop, int targetWidth, int targetHeight, int dpi, int backend=Default)
This function returns the font size (in points) and sets the size in tprop that is required to fit th...
static vtkTextRenderer * New()
This is a singleton pattern New.
bool RenderString(vtkTextProperty *tprop, const vtkStdString &str, vtkImageData *data, int textDims[2], int dpi, int backend=Default)
Given a text property and a string, this function initializes the vtkImageData *data and renders it i...
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...
static vtkTextRendererCleanup Cleanup
The singleton instance and the singleton cleanup instance.
vtksys::RegularExpression * MathTextRegExpColumn
void SetScaleToPowerOfTwo(bool scale)
Set to true if the graphics implementation requires texture image dimensions to be a power of two.
virtual void SetScaleToPowerOfTwoInternal(bool scale)=0
Virtual methods for concrete implementations of the public methods.
static vtkTextRenderer * Instance
The singleton instance and the singleton cleanup instance.
vtksys::RegularExpression * MathTextRegExp
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.
virtual bool RenderStringInternal(vtkTextProperty *tprop, const vtkStdString &str, vtkImageData *data, int textDims[2], int dpi, int backend)=0
Virtual methods for concrete implementations of the public methods.
Backend
Available backends.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual bool FreeTypeIsSupported()
Test for availability of various backends.
virtual bool GetMetricsInternal(vtkTextProperty *tprop, const vtkStdString &str, Metrics &metrics, int dpi, int backend)=0
Virtual methods for concrete implementations of the public methods.
vtksys::RegularExpression * MathTextRegExp2
bool GetMetrics(vtkTextProperty *tprop, const vtkStdString &str, Metrics &metrics, int dpi, int backend=Default)
Given a text property and a string, get some metrics for the rendered string.
virtual bool StringToPathInternal(vtkTextProperty *tprop, const vtkStdString &str, vtkPath *path, int dpi, int backend)=0
Virtual methods for concrete implementations of the public methods.
virtual void CleanUpFreeTypeEscapes(vtkStdString &str)
Replace all instances of "\$" with "$".
virtual int DetectBackend(const vtkStdString &str)
Determine the appropriate back end needed to render the given string.
static vtkTextRenderer * GetInstance()
Return the singleton instance with no reference counting.
~vtkTextRenderer() override
templated base type for containers of constant size.
Definition vtkTuple.h:27
Some derived classes for the different vectors commonly used.
Definition vtkVector.h:470
vtkVector2i BottomRight
The corners of the rendered text (or background, if applicable), in pixels.
vtkVector2i Descent
Vectors representing the rotated ascent and descent of the text.
vtkVector2i Ascent
Vectors representing the rotated ascent and descent of the text.
Metrics()
Construct a Metrics object with all members initialized to 0.
vtkVector2i TopRight
The corners of the rendered text (or background, if applicable), in pixels.
vtkVector2i BottomLeft
The corners of the rendered text (or background, if applicable), in pixels.
vtkVector2i TopLeft
The corners of the rendered text (or background, if applicable), in pixels.
vtkTuple< int, 4 > BoundingBox
The axis-aligned bounding box of the rendered text and background, in pixels.