VTK  9.2.20230321
vtkMatplotlibMathTextUtilities.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkMatplotlibMathTextUtilities.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 =========================================================================*/
46 #ifndef vtkMatplotlibMathTextUtilities_h
47 #define vtkMatplotlibMathTextUtilities_h
48 
49 #include "vtkMathTextUtilities.h"
50 #include "vtkRenderingMatplotlibModule.h" // For export macro
51 
52 #include <cstdint> // for std::uint64_t
53 #include <vector> // for std::vector
54 
55 struct _object;
56 typedef struct _object PyObject;
57 
58 VTK_ABI_NAMESPACE_BEGIN
59 class vtkImageData;
60 class vtkPath;
61 class vtkPythonInterpreter;
62 class vtkSmartPyObject;
63 class vtkTextProperty;
64 struct TextColors;
65 
66 class VTKRENDERINGMATPLOTLIB_EXPORT vtkMatplotlibMathTextUtilities : public vtkMathTextUtilities
67 {
68 public:
70  void PrintSelf(ostream& os, vtkIndent indent) override;
71 
73 
74  bool IsAvailable() override;
75 
83  bool GetBoundingBox(vtkTextProperty* tprop, const char* str, int dpi, int bbox[4]) override;
84 
85  bool GetMetrics(
86  vtkTextProperty* tprop, const char* str, int dpi, vtkTextRenderer::Metrics& metrics) override;
87 
99  bool RenderString(const char* str, vtkImageData* image, vtkTextProperty* tprop, int dpi,
100  int textDims[2] = nullptr) override;
101 
109  bool StringToPath(const char* str, vtkPath* path, vtkTextProperty* tprop, int dpi) override;
110 
112 
117  void SetScaleToPowerOfTwo(bool val) override;
118  bool GetScaleToPowerOfTwo() override;
120 
121 protected:
124 
128 
130  bool CheckForError(PyObject* object);
131 
138  std::string& str, const std::string& strToFind, const std::string& replacementStr);
139 
140  static constexpr const char* PipeProtectString = "VTK_PROTECT_PIPE";
141 
146  void ComputeTextColors(vtkTextProperty* tprop, TextColors& tcolors);
147 
152 
158 
165 
166  vtkPythonInterpreter* Interpreter;
170 
171  static void GetJustifiedBBox(int rows, int cols, vtkTextProperty* tprop, int bbox[4]);
172 
173  // Rotate the 4 2D corner points by the specified angle (degrees) around the
174  // origin and calculate the bounding box
175  static void RotateCorners(double angleDeg, double corners[4][2], double bbox[4]);
176 
178  bool PrepareImageData(vtkImageData* data, int bbox[4]);
179 
180  std::vector<int> VerticalLinesPosition;
181  std::vector<int> HorizontalLinesPosition;
182 
183 private:
185  void operator=(const vtkMatplotlibMathTextUtilities&) = delete;
186 
191  enum Availability
192  {
193  NOT_TESTED = 0,
194  AVAILABLE,
195  UNAVAILABLE
196  };
197 
204  static Availability CheckMPLAvailability();
205 
207 
210  static Availability MPLMathTextAvailable;
212 
213  typedef std::vector<std::vector<std::string>> GridOfStrings;
214 
221  bool ParseString(const char* str, GridOfStrings& strGrid, std::size_t& maxNumberOfCells);
222 
229  bool ComputeRowsAndCols(const GridOfStrings& strGrid, const std::size_t& maxNumberOfCells,
230  vtkTextProperty* tprop, PyObject* pyFontProp, int dpi, std::uint64_t& rows,
231  std::uint64_t& cols);
232 
238  bool ComputeCellRowsAndCols(const char* cellStr, PyObject* pyFontProp, int dpi,
239  std::uint64_t& rows, std::uint64_t& cols, vtkSmartPyObject* list);
240 
246  bool RenderOneCell(vtkImageData* image, int bbox[4], const std::int64_t rowStart,
247  const std::int64_t colStart, vtkSmartPyObject& pythonData, const std::uint64_t pythonRows,
248  const std::uint64_t pythonCols, const std::uint64_t cellRows, const std::uint64_t cellCols,
249  vtkTextProperty* tprop, const TextColors& tcolors);
250 
254  bool DrawInteriorLines(vtkImageData* image, int bbox[4], vtkTextProperty* tprop);
255 };
256 
257 VTK_ABI_NAMESPACE_END
258 #endif
topologically and geometrically regular array of data
Definition: vtkImageData.h:164
a simple class to control print indentation
Definition: vtkIndent.h:120
Abstract interface to equation rendering.
Access to MatPlotLib MathText rendering.
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.
static vtkMatplotlibMathTextUtilities * New()
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.
PyObject * GetFontProperties(vtkTextProperty *tprop)
Returns a matplotlib.font_manager.FontProperties PyObject, initialized from the vtkTextProperty tprop...
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:37
represent text properties.
@ image
Definition: vtkX3D.h:386
@ data
Definition: vtkX3D.h:327
@ string
Definition: vtkX3D.h:502
struct _object PyObject