mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
153 lines
5.6 KiB
C++
153 lines
5.6 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkMatplotlibMathTextUtilities.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkMatplotlibMathTextUtilities - Access to MatPlotLib MathText rendering
|
|
// .SECTION Description
|
|
// vtkMatplotlibMathTextUtilities provides access to the MatPlotLib MathText
|
|
// implementation.
|
|
//
|
|
// This class is aware of a number of environment variables that can be used to
|
|
// configure and debug python initialization (all are optional):
|
|
// - VTK_MATPLOTLIB_DEBUG: Enable verbose debugging output during initialization
|
|
// of the python environment.
|
|
|
|
#ifndef vtkMatplotlibMathTextUtilities_h
|
|
#define vtkMatplotlibMathTextUtilities_h
|
|
|
|
#include "vtkRenderingMatplotlibModule.h" // For export macro
|
|
#include "vtkMathTextUtilities.h"
|
|
|
|
struct _object;
|
|
typedef struct _object PyObject;
|
|
class vtkImageData;
|
|
class vtkPath;
|
|
class vtkPythonInterpreter;
|
|
class vtkTextProperty;
|
|
|
|
class VTKRENDERINGMATPLOTLIB_EXPORT vtkMatplotlibMathTextUtilities :
|
|
public vtkMathTextUtilities
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkMatplotlibMathTextUtilities, vtkMathTextUtilities);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
static vtkMatplotlibMathTextUtilities *New();
|
|
|
|
virtual bool IsAvailable();
|
|
|
|
// Description:
|
|
// Given a text property and a string, get the bounding box {xmin, xmax,
|
|
// ymin, ymax} of the rendered string in pixels. The origin of the bounding
|
|
// box is the anchor point described by the horizontal and vertical
|
|
// justification text property variables.
|
|
// Returns true on success, false otherwise.
|
|
bool GetBoundingBox(vtkTextProperty *tprop, const char *str, int dpi,
|
|
int bbox[4]);
|
|
|
|
bool GetMetrics(vtkTextProperty *tprop, const char *str, int dpi,
|
|
vtkTextRenderer::Metrics &metrics);
|
|
|
|
// Description:
|
|
// Render the given string @a str into the vtkImageData @a data with a
|
|
// resolution of @a dpi. The image is resized automatically. textDims
|
|
// will be overwritten by the pixel width and height of the rendered string.
|
|
// This is useful when ScaleToPowerOfTwo is true, and the image dimensions may
|
|
// not match the dimensions of the rendered text.
|
|
// The origin of the image's extents is aligned with the anchor point
|
|
// described by the text property's vertical and horizontal justification
|
|
// options.
|
|
bool RenderString(const char *str, vtkImageData *data, vtkTextProperty *tprop,
|
|
int dpi, int textDims[2] = NULL);
|
|
|
|
// Description:
|
|
// Parse the MathText expression in str and fill path with a contour of the
|
|
// glyphs. The origin of the path coordinates is aligned with the anchor point
|
|
// described by the text property's horizontal and vertical justification
|
|
// options.
|
|
bool StringToPath(const char *str, vtkPath *path, vtkTextProperty *tprop,
|
|
int dpi);
|
|
|
|
// Description:
|
|
// Set to true if the graphics implmentation requires texture image dimensions
|
|
// to be a power of two. Default is true, but this member will be set
|
|
// appropriately when GL is inited.
|
|
vtkSetMacro(ScaleToPowerOfTwo, bool);
|
|
vtkGetMacro(ScaleToPowerOfTwo, bool);
|
|
|
|
protected:
|
|
vtkMatplotlibMathTextUtilities();
|
|
virtual ~vtkMatplotlibMathTextUtilities();
|
|
|
|
bool InitializeMaskParser();
|
|
bool InitializePathParser();
|
|
bool InitializeFontPropertiesClass();
|
|
|
|
bool CheckForError();
|
|
bool CheckForError(PyObject *object);
|
|
|
|
// Description:
|
|
// Returns a matplotlib.font_manager.FontProperties PyObject, initialized from
|
|
// the vtkTextProperty tprop.
|
|
PyObject * GetFontProperties(vtkTextProperty *tprop);
|
|
|
|
// Description:
|
|
// Cleanup and destroy any python objects. This is called during destructor as
|
|
// well as when the Python interpreter is finalized. Thus this class must
|
|
// handle the case where the internal python objects disappear between calls.
|
|
void CleanupPythonObjects();
|
|
|
|
vtkPythonInterpreter* Interpreter;
|
|
PyObject *MaskParser;
|
|
PyObject *PathParser;
|
|
PyObject *FontPropertiesClass;
|
|
|
|
static void GetJustifiedBBox(int rows, int cols, vtkTextProperty *tprop,
|
|
int bbox[4]);
|
|
|
|
// Rotate the 4 2D corner points by the specified angle (degrees) around the
|
|
// origin and calculate the bounding box
|
|
static void RotateCorners(double angleDeg, double corners[4][2],
|
|
double bbox[4]);
|
|
|
|
bool ScaleToPowerOfTwo;
|
|
bool PrepareImageData(vtkImageData *data, int bbox[4]);
|
|
|
|
private:
|
|
vtkMatplotlibMathTextUtilities(const vtkMatplotlibMathTextUtilities&); // Not implemented.
|
|
void operator=(const vtkMatplotlibMathTextUtilities&); // Not implemented.
|
|
|
|
// Description:
|
|
// Used for runtime checking of matplotlib's mathtext availability.
|
|
// @sa IsAvailable
|
|
enum Availability
|
|
{
|
|
NOT_TESTED = 0,
|
|
AVAILABLE,
|
|
UNAVAILABLE
|
|
};
|
|
|
|
// Description:
|
|
// Function used to check MPL availability and update MPLMathTextAvailable.
|
|
// This will do tests only the first time this method is called. This method
|
|
// is called internally when matplotlib rendering is first needed and is used
|
|
// to implement IsAvailable.
|
|
static Availability CheckMPLAvailability();
|
|
|
|
// Description:
|
|
// Cache the availability of matplotlib in the current python session.
|
|
static Availability MPLMathTextAvailable;
|
|
};
|
|
|
|
#endif
|