VTK  9.3.20240612
vtkMatplotlibMathTextUtilities.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
34#ifndef vtkMatplotlibMathTextUtilities_h
35#define vtkMatplotlibMathTextUtilities_h
36
38#include "vtkRenderingMatplotlibModule.h" // For export macro
39
40#include <cstdint> // for std::uint64_t
41#include <vector> // for std::vector
42
43struct _object;
44typedef struct _object PyObject;
45
46VTK_ABI_NAMESPACE_BEGIN
47class vtkImageData;
48class vtkPath;
49class vtkPythonInterpreter;
50class vtkSmartPyObject;
51class vtkTextProperty;
52struct TextColors;
53
54class VTKRENDERINGMATPLOTLIB_EXPORT vtkMatplotlibMathTextUtilities : public vtkMathTextUtilities
55{
56public:
58 void PrintSelf(ostream& os, vtkIndent indent) override;
59
61
62 bool IsAvailable() override;
63
71 bool GetBoundingBox(vtkTextProperty* tprop, const char* str, int dpi, int bbox[4]) override;
72
74 vtkTextProperty* tprop, const char* str, int dpi, vtkTextRenderer::Metrics& metrics) override;
75
87 bool RenderString(const char* str, vtkImageData* image, vtkTextProperty* tprop, int dpi,
88 int textDims[2] = nullptr) override;
89
97 bool StringToPath(const char* str, vtkPath* path, vtkTextProperty* tprop, int dpi) override;
98
100
105 void SetScaleToPowerOfTwo(bool val) override;
106 bool GetScaleToPowerOfTwo() override;
108
109protected:
112
116
118 bool CheckForError(PyObject* object);
119
126 std::string& str, const std::string& strToFind, const std::string& replacementStr);
127
128 static constexpr const char* PipeProtectString = "VTK_PROTECT_PIPE";
129
134 void ComputeTextColors(vtkTextProperty* tprop, TextColors& tcolors);
135
140
146
153
154 vtkPythonInterpreter* Interpreter;
158
159 static void GetJustifiedBBox(int rows, int cols, vtkTextProperty* tprop, int bbox[4]);
160
161 // Rotate the 4 2D corner points by the specified angle (degrees) around the
162 // origin and calculate the bounding box
163 static void RotateCorners(double angleDeg, double corners[4][2], double bbox[4]);
164
166 bool PrepareImageData(vtkImageData* data, int bbox[4]);
167
168 std::vector<int> VerticalLinesPosition;
169 std::vector<int> HorizontalLinesPosition;
170
171private:
173 void operator=(const vtkMatplotlibMathTextUtilities&) = delete;
174
179 enum Availability
180 {
181 NOT_TESTED = 0,
182 AVAILABLE,
183 UNAVAILABLE
184 };
185
192 static Availability CheckMPLAvailability();
193
195
198 static Availability MPLMathTextAvailable;
200
201 typedef std::vector<std::vector<std::string>> GridOfStrings;
202
209 bool ParseString(const char* str, GridOfStrings& strGrid, std::size_t& maxNumberOfCells);
210
217 bool ComputeRowsAndCols(const GridOfStrings& strGrid, const std::size_t& maxNumberOfCells,
218 vtkTextProperty* tprop, PyObject* pyFontProp, int dpi, std::uint64_t& rows,
219 std::uint64_t& cols);
220
226 bool ComputeCellRowsAndCols(const char* cellStr, PyObject* pyFontProp, int dpi,
227 std::uint64_t& rows, std::uint64_t& cols, vtkSmartPyObject* list);
228
234 bool RenderOneCell(vtkImageData* image, int bbox[4], std::int64_t rowStart, std::int64_t colStart,
235 vtkSmartPyObject& pythonData, std::uint64_t pythonRows, std::uint64_t pythonCols,
236 std::uint64_t cellRows, std::uint64_t cellCols, vtkTextProperty* tprop,
237 const TextColors& tcolors);
238
242 bool DrawInteriorLines(vtkImageData* image, int bbox[4], vtkTextProperty* tprop);
243};
244
245VTK_ABI_NAMESPACE_END
246#endif
topologically and geometrically regular array of data
a simple class to control print indentation
Definition vtkIndent.h:108
Abstract interface to equation rendering.
Access to MatPlotLib MathText rendering.
PyObject * GetFontProperties(vtkTextProperty *tprop)
Returns a matplotlib.font_manager.FontProperties PyObject, initialized from the vtkTextProperty tprop...
bool GetBoundingBox(vtkTextProperty *tprop, const char *str, int dpi, int bbox[4]) override
Given a text property and a string, get the bounding box {xmin, xmax, ymin, ymax} of the rendered str...
bool GetMetrics(vtkTextProperty *tprop, const char *str, int dpi, vtkTextRenderer::Metrics &metrics) override
Return the metrics for the rendered str, tprop, and dpi.
void ComputeTextColors(vtkTextProperty *tprop, TextColors &tcolors)
Compute rgba values of the foreground, background and frame of the text property.
void FindAndReplaceInString(std::string &str, const std::string &strToFind, const std::string &replacementStr)
Replace each occurrence of strToFind in str by replacementStr.
bool SetMathTextFont(vtkTextProperty *tprop)
Modify matplotlib.rcParams to customize math text font.
static void GetJustifiedBBox(int rows, int cols, vtkTextProperty *tprop, int bbox[4])
bool CheckForError(PyObject *object)
void CleanupPythonObjects()
Cleanup and destroy any python objects.
bool RenderString(const char *str, vtkImageData *image, vtkTextProperty *tprop, int dpi, int textDims[2]=nullptr) override
Render the given string str into the vtkImageData image with a resolution of dpi.
static vtkMatplotlibMathTextUtilities * New()
bool StringToPath(const char *str, vtkPath *path, vtkTextProperty *tprop, int dpi) override
Parse the MathText expression in str and fill path with a contour of the glyphs.
bool IsAvailable() override
Returns true if mathtext rendering is available.
static void RotateCorners(double angleDeg, double corners[4][2], double bbox[4])
~vtkMatplotlibMathTextUtilities() override
void SetScaleToPowerOfTwo(bool val) override
Set to true if the graphics implementation requires texture image dimensions to be a power of two.
bool PrepareImageData(vtkImageData *data, int bbox[4])
bool GetScaleToPowerOfTwo() override
Set to true if the graphics implementation requires texture image dimensions to be a power of two.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
concrete dataset representing a path defined by Bezier curves.
Definition vtkPath.h:44
represent text properties.
struct _object PyObject