VTK  9.2.20230527
vtkContext2D.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkContext2D.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 
52 #ifndef vtkContext2D_h
53 #define vtkContext2D_h
54 
55 #include "vtkObject.h"
56 #include "vtkRenderingContext2DModule.h" // For export macro
57 
58 VTK_ABI_NAMESPACE_BEGIN
59 class vtkWindow;
60 
61 class vtkContext3D;
62 class vtkStdString;
63 class vtkTextProperty;
64 
65 class vtkPoints2D;
66 class vtkVector2f;
67 class vtkRectf;
69 class vtkContextDevice2D;
70 class vtkPen;
71 class vtkBrush;
72 class vtkImageData;
73 class vtkPolyData;
74 class vtkTransform2D;
76 
77 class VTKRENDERINGCONTEXT2D_EXPORT vtkContext2D : public vtkObject
78 {
79 public:
80  vtkTypeMacro(vtkContext2D, vtkObject);
81  void PrintSelf(ostream& os, vtkIndent indent) override;
82 
86  static vtkContext2D* New();
87 
93  bool Begin(vtkContextDevice2D* device);
94 
95  vtkGetObjectMacro(Device, vtkContextDevice2D);
96 
102  bool End();
103 
107  bool GetBufferIdMode() const;
108 
116 
124 
128  void DrawLine(float x1, float y1, float x2, float y2);
129 
133  void DrawLine(float p[4]);
134 
140 
144  void DrawPoly(float* x, float* y, int n);
145 
151 
157  void DrawPoly(float* points, int n);
158 
165  void DrawPoly(float* points, int n, unsigned char* colors, int nc_comps);
166 
172 
177  void DrawLines(float* points, int n);
178 
182  void DrawPoint(float x, float y);
183 
187  void DrawPoints(float* x, float* y, int n);
188 
194 
200  void DrawPoints(float* points, int n);
201 
208 
210 
218  vtkImageData* sprite, float* points, int n, unsigned char* colors, int nc_comps);
220 
226  void DrawPointSprites(vtkImageData* sprite, float* points, int n);
227 
229 
245  virtual void DrawMarkers(
246  int shape, bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
247  virtual void DrawMarkers(int shape, bool highlight, float* points, int n);
248  virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D* points);
249  virtual void DrawMarkers(
250  int shape, bool highlight, vtkPoints2D* points, vtkUnsignedCharArray* colors);
252 
256  void DrawRect(float x, float y, float w, float h);
257 
259 
262  void DrawQuad(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
263  void DrawQuad(float* p);
265 
267 
271  void DrawQuadStrip(float* p, int n);
273 
278  void DrawPolygon(float* x, float* y, int n);
279 
285 
291  void DrawPolygon(float* points, int n);
292 
297  void DrawPolygon(float* x, float* y, int n, unsigned char* color, int nc_comps);
298 
303  void DrawPolygon(vtkPoints2D* points, unsigned char* color, int nc_comps);
304 
310  void DrawPolygon(float* points, int n, unsigned char* color, int nc_comps);
311 
317  void DrawEllipse(float x, float y, float rx, float ry);
318 
327  void DrawWedge(
328  float x, float y, float outRadius, float inRadius, float startAngle, float stopAngle);
329 
341  void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy,
342  float startAngle, float stopAngle);
343 
349  void DrawArc(float x, float y, float r, float startAngle, float stopAngle);
350 
357  void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle, float stopAngle);
358 
362  void DrawImage(float x, float y, vtkImageData* image);
363 
368  void DrawImage(float x, float y, float scale, vtkImageData* image);
369 
375  void DrawImage(const vtkRectf& pos, vtkImageData* image);
376 
382  float x, float y, vtkPolyData* polyData, vtkUnsignedCharArray* colors, int scalarMode);
383 
385 
390  void DrawStringRect(vtkPoints2D* rect, const vtkStdString& string);
391  void DrawStringRect(vtkPoints2D* rect, const char* string);
392  void DrawStringRect(const float rect[4], const vtkStdString& string);
393  void DrawStringRect(const float rect[4], const char* string);
395 
397 
400  void DrawString(vtkPoints2D* point, const vtkStdString& string);
401  void DrawString(float x, float y, const vtkStdString& string);
402  void DrawString(vtkPoints2D* point, const char* string);
403  void DrawString(float x, float y, const char* string);
405 
407 
416  void ComputeStringBounds(const vtkStdString& string, vtkPoints2D* bounds);
417  void ComputeStringBounds(const vtkStdString& string, float bounds[4]);
418  void ComputeStringBounds(const char* string, vtkPoints2D* bounds);
419  void ComputeStringBounds(const char* string, float bounds[4]);
421 
426  void ComputeJustifiedStringBounds(const char* string, float bounds[4]);
427 
434  int ComputeFontSizeForBoundedString(const vtkStdString& string, float width, float height);
435 
437 
445  void DrawMathTextString(float x, float y, const vtkStdString& string);
446  void DrawMathTextString(vtkPoints2D* point, const char* string);
447  void DrawMathTextString(float x, float y, const char* string);
449 
451 
460  vtkPoints2D* point, const vtkStdString& string, const vtkStdString& fallback);
462  float x, float y, const vtkStdString& string, const vtkStdString& fallback);
463  void DrawMathTextString(vtkPoints2D* point, const char* string, const char* fallback);
464  void DrawMathTextString(float x, float y, const char* string, const char* fallback);
466 
471 
477  void ApplyPen(vtkPen* pen);
478 
485 
491  void ApplyBrush(vtkBrush* brush);
492 
498 
505 
510 
516  void SetTransform(vtkTransform2D* transform);
517 
522 
529  void AppendTransform(vtkTransform2D* transform);
530 
532 
536  void PushMatrix();
537  void PopMatrix();
539 
543  void ApplyId(vtkIdType id);
544 
550  static int FloatToInt(float x);
551 
553 
557  vtkGetObjectMacro(Context3D, vtkContext3D);
558  virtual void SetContext3D(vtkContext3D* context);
560 
561 protected:
563  ~vtkContext2D() override;
564 
565  vtkContextDevice2D* Device; // The underlying device
566  vtkTransform2D* Transform; // Current transform
567 
569  vtkContext3D* Context3D; // May be very temporary - get at a 3D version.
570 
571 private:
572  vtkContext2D(const vtkContext2D&) = delete;
573  void operator=(const vtkContext2D&) = delete;
574 
581  vtkVector2f CalculateTextPosition(vtkPoints2D* rect);
582 
589  vtkVector2f CalculateTextPosition(const float rect[4]);
590 };
591 
592 inline int vtkContext2D::FloatToInt(float x)
593 {
594  // Use a tolerance of 1/256 of a pixel when converting.
595  // A float has only 24 bits of precision, so we cannot
596  // make the tolerance too small. For example, a tolerance
597  // of 2^-8 means that the tolerance will be significant
598  // for float values up to 2^16 or 65536.0. But a
599  // tolerance of 2^-16 would only be significant for
600  // float values up to 2^8 or 256.0. A small tolerance
601  // disappears into insignificance when added to a large float.
602  float tol = 0.00390625; // 1.0/256.0
603  tol = (x >= 0 ? tol : -tol);
604  return static_cast<int>(x + tol);
605 }
606 
607 VTK_ABI_NAMESPACE_END
608 #endif // vtkContext2D_h
2D array of ids, used for picking.
provides a brush that fills shapes drawn by vtkContext2D.
Definition: vtkBrush.h:101
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:78
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void DrawString(float x, float y, const vtkStdString &string)
Draw some text to the screen.
static int FloatToInt(float x)
Float to int conversion, performs truncation but with a rounding tolerance for float values that are ...
Definition: vtkContext2D.h:592
void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy, float startAngle, float stopAngle)
Draw an elliptic wedge with center at x, y, outer radii outRx, outRy, inner radii inRx,...
~vtkContext2D() override
void SetTransform(vtkTransform2D *transform)
Set the transform for the context, the underlying device will use the matrix of the transform.
void DrawString(float x, float y, const char *string)
Draw some text to the screen.
void DrawMathTextString(vtkPoints2D *point, const vtkStdString &string)
Draw a MathText formatted equation to the screen.
void DrawArc(float x, float y, float r, float startAngle, float stopAngle)
Draw a circular arc with center at x,y with radius r between angles startAngle and stopAngle (express...
void DrawPoly(float *x, float *y, int n)
Draw a poly line between the specified points.
void DrawStringRect(vtkPoints2D *rect, const vtkStdString &string)
Draw some text to the screen in a bounding rectangle with the alignment of the text properties respec...
void DrawPoints(float *points, int n)
Draw a poly line between the specified points, where the float array is of size 2*n and the points ar...
void DrawQuadStrip(vtkPoints2D *points)
Draw a strip of quads.
void ComputeStringBounds(const char *string, vtkPoints2D *bounds)
Compute the bounds of the supplied string.
void DrawMathTextString(float x, float y, const vtkStdString &string)
Draw a MathText formatted equation to the screen.
void DrawPointSprites(vtkImageData *sprite, vtkPoints2D *points)
Draw a series of point sprites, images centred at the points supplied.
void DrawPoint(float x, float y)
Draw a point at the supplied x and y coordinate.
void DrawPolygon(float *x, float *y, int n, unsigned char *color, int nc_comps)
Draw a polygon specified specified by the points using the x and y arrays supplied.
void DrawWedge(float x, float y, float outRadius, float inRadius, float startAngle, float stopAngle)
Draw a circular wedge with center at x, y, outer radius outRadius, inner radius inRadius between angl...
void DrawPointSprites(vtkImageData *sprite, vtkPoints2D *points, vtkUnsignedCharArray *colors)
Draw a series of point sprites, images centred at the points supplied.
bool GetBufferIdMode() const
Tell if the context is in BufferId creation mode.
vtkTransform2D * Transform
Definition: vtkContext2D.h:566
void ApplyPen(vtkPen *pen)
Apply the supplied pen which controls the outlines of shapes, as well as lines, points and related pr...
void AppendTransform(vtkTransform2D *transform)
Append the transform for the context, the underlying device will use the matrix of the transform.
void ApplyId(vtkIdType id)
Apply id as a color.
void PushMatrix()
Push/pop the transformation matrix for the painter (sets the underlying matrix for the device when av...
bool Begin(vtkContextDevice2D *device)
Begin painting on a vtkContextDevice2D, no painting can occur before this call has been made.
void DrawString(vtkPoints2D *point, const vtkStdString &string)
Draw some text to the screen.
void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle, float stopAngle)
Draw an elliptic arc with center at x,y with radii rX and rY between angles startAngle and stopAngle ...
void ComputeStringBounds(const char *string, float bounds[4])
Compute the bounds of the supplied string.
void DrawQuad(float *p)
Draw a quadrilateral at the specified points (4 points, 8 floats in x, y).
void DrawRect(float x, float y, float w, float h)
Draw a rectangle with origin at x, y and width w, height h.
void DrawPoly(float *points, int n, unsigned char *colors, int nc_comps)
Draw a poly line between the specified points, where the float array is of size 2*n and the points ar...
bool End()
Ends painting on the device, you would not usually need to call this as it should be called by the de...
vtkPen * GetPen()
Get the pen which controls the outlines of shapes, as well as lines, points and related primitives.
void DrawStringRect(const float rect[4], const vtkStdString &string)
Draw some text to the screen in a bounding rectangle with the alignment of the text properties respec...
void DrawImage(const vtkRectf &pos, vtkImageData *image)
Draw the supplied image at the given position.
void DrawMathTextString(vtkPoints2D *point, const char *string)
Draw a MathText formatted equation to the screen.
void DrawImage(float x, float y, vtkImageData *image)
Draw the supplied image at the given x, y location (bottom corner).
void DrawMathTextString(float x, float y, const char *string)
Draw a MathText formatted equation to the screen.
void DrawPolygon(float *points, int n)
Draw a polygon defined by the specified points, where the float array is of size 2*n and the points a...
void DrawPolygon(float *points, int n, unsigned char *color, int nc_comps)
Draw a polygon defined by the specified points, where the float array is of size 2*n and the points a...
int ComputeFontSizeForBoundedString(const vtkStdString &string, float width, float height)
Calculate the largest possible font size where the supplied string will fit within the specified boun...
void DrawPointSprites(vtkImageData *sprite, float *points, int n)
Draw a series of point sprites, images centred at the points supplied.
vtkTransform2D * GetTransform()
Compute the current transform applied to the context.
void ComputeStringBounds(const vtkStdString &string, float bounds[4])
Compute the bounds of the supplied string.
void DrawPoints(float *x, float *y, int n)
Draw the specified number of points using the x and y arrays supplied.
virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D *points)
Draw a series of markers centered at the points supplied.
void DrawPolygon(float *x, float *y, int n)
Draw a polygon specified specified by the points using the x and y arrays supplied.
void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId)
Start BufferId creation Mode.
void DrawStringRect(const float rect[4], const char *string)
Draw some text to the screen in a bounding rectangle with the alignment of the text properties respec...
bool MathTextIsSupported()
Return true if MathText rendering available on the current device.
static vtkContext2D * New()
Creates a 2D Painter object.
void DrawPoly(vtkPoints2D *points)
Draw a poly line between the specified points - fastest code path due to memory layout of the coordin...
vtkBrush * GetBrush()
Get the pen which controls the outlines of shapes as well as lines, points and related primitives.
vtkTextProperty * GetTextProp()
Get the text properties object for the vtkContext2D.
void DrawMathTextString(vtkPoints2D *point, const char *string, const char *fallback)
Draw a MathText formatted equation to the screen.
void ApplyTextProp(vtkTextProperty *prop)
Apply the supplied text property which controls how text is rendered.
void DrawPointSprites(vtkImageData *sprite, float *points, int n, unsigned char *colors, int nc_comps)
Draw a series of point sprites, images centred at the points supplied.
virtual void DrawMarkers(int shape, bool highlight, float *points, int n)
Draw a series of markers centered at the points supplied.
void DrawLine(float p[4])
Draw a line between the specified points.
void DrawMathTextString(float x, float y, const char *string, const char *fallback)
Draw a MathText formatted equation to the screen.
void ComputeJustifiedStringBounds(const char *string, float bounds[4])
Compute the bounds of the supplied string while taking into account the justification and rotation of...
void DrawPolygon(vtkPoints2D *points)
Draw a polygon defined by the specified points - fastest code path due to memory layout of the coordi...
vtkAbstractContextBufferId * BufferId
Definition: vtkContext2D.h:568
void DrawLine(vtkPoints2D *points)
Draw a line between the specified points.
virtual void SetContext3D(vtkContext3D *context)
Get the vtkContext3D device, in order to do some 3D rendering.
void ApplyBrush(vtkBrush *brush)
Apply the supplied brush which controls the outlines of shapes, as well as lines, points and related ...
void DrawStringRect(vtkPoints2D *rect, const char *string)
Draw some text to the screen in a bounding rectangle with the alignment of the text properties respec...
void ComputeStringBounds(const vtkStdString &string, vtkPoints2D *bounds)
Compute the bounds of the supplied string.
void DrawImage(float x, float y, float scale, vtkImageData *image)
Draw the supplied image at the given x, y location (bottom corner).
void BufferIdModeEnd()
Finalize BufferId creation Mode.
void DrawQuad(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
Draw a quadrilateral at the specified points (4 points, 8 floats in x, y).
void DrawQuadStrip(float *p, int n)
Draw a strip of quads.
void DrawPoly(float *points, int n)
Draw a poly line between the specified points, where the float array is of size 2*n and the points ar...
vtkContextDevice2D * Device
Definition: vtkContext2D.h:565
void DrawEllipse(float x, float y, float rx, float ry)
Draw an ellipse with center at x, y and radii rx, ry.
void DrawLines(float *points, int n)
Draw multiple lines between the specified pairs of points.
void DrawMathTextString(vtkPoints2D *point, const vtkStdString &string, const vtkStdString &fallback)
Draw a MathText formatted equation to the screen.
void DrawLines(vtkPoints2D *points)
Draw multiple lines between the specified pairs of points.
void DrawMathTextString(float x, float y, const vtkStdString &string, const vtkStdString &fallback)
Draw a MathText formatted equation to the screen.
void DrawPoints(vtkPoints2D *points)
Draw a poly line between the specified points - fastest code path due to memory layout of the coordin...
vtkContext3D * Context3D
Definition: vtkContext2D.h:569
virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D *points, vtkUnsignedCharArray *colors)
Draw a series of markers centered at the points supplied.
void DrawPolyData(float x, float y, vtkPolyData *polyData, vtkUnsignedCharArray *colors, int scalarMode)
Draw the supplied polyData at the given x, y position (bottom corner).
void DrawLine(float x1, float y1, float x2, float y2)
Draw a line between the specified points.
void DrawString(vtkPoints2D *point, const char *string)
Draw some text to the screen.
virtual void DrawMarkers(int shape, bool highlight, float *points, int n, unsigned char *colors, int nc_comps)
Draw a series of markers centered at the points supplied.
void DrawPolygon(vtkPoints2D *points, unsigned char *color, int nc_comps)
Draw a polygon defined by the specified points - fastest code path due to memory layout of the coordi...
void PopMatrix()
Push/pop the transformation matrix for the painter (sets the underlying matrix for the device when av...
Class for drawing 3D primitives to a graphical context.
Definition: vtkContext3D.h:61
Abstract class for drawing 2D primitives.
topologically and geometrically regular array of data
Definition: vtkImageData.h:164
a simple class to control print indentation
Definition: vtkIndent.h:120
abstract base class for most VTK objects
Definition: vtkObject.h:83
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition: vtkPen.h:140
represent and manipulate 2D points
Definition: vtkPoints2D.h:38
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:201
Computes the portion of a dataset which is inside a selection.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:110
represent text properties.
describes linear transformations via a 3x3 matrix
dynamic, self-adjusting array of unsigned char
window superclass for vtkRenderWindow
Definition: vtkWindow.h:40
@ point
Definition: vtkX3D.h:248
@ points
Definition: vtkX3D.h:458
@ startAngle
Definition: vtkX3D.h:498
@ scale
Definition: vtkX3D.h:241
@ color
Definition: vtkX3D.h:233
@ height
Definition: vtkX3D.h:266
@ image
Definition: vtkX3D.h:386
int vtkIdType
Definition: vtkType.h:327