VTK  9.0.1
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 
27 #ifndef vtkContext2D_h
28 #define vtkContext2D_h
29 
30 #include "vtkObject.h"
31 #include "vtkRenderingContext2DModule.h" // For export macro
32 
33 class vtkWindow;
34 
35 class vtkContext3D;
36 class vtkStdString;
37 class vtkUnicodeString;
38 class vtkTextProperty;
39 
40 class vtkPoints2D;
41 class vtkVector2f;
42 class vtkRectf;
44 class vtkContextDevice2D;
45 class vtkPen;
46 class vtkBrush;
47 class vtkImageData;
48 class vtkPolyData;
49 class vtkTransform2D;
51 
52 class VTKRENDERINGCONTEXT2D_EXPORT vtkContext2D : public vtkObject
53 {
54 public:
55  vtkTypeMacro(vtkContext2D, vtkObject);
56  void PrintSelf(ostream& os, vtkIndent indent) override;
57 
61  static vtkContext2D* New();
62 
68  bool Begin(vtkContextDevice2D* device);
69 
70  vtkGetObjectMacro(Device, vtkContextDevice2D);
71 
77  bool End();
78 
82  bool GetBufferIdMode() const;
83 
91 
99 
103  void DrawLine(float x1, float y1, float x2, float y2);
104 
108  void DrawLine(float p[4]);
109 
115 
119  void DrawPoly(float* x, float* y, int n);
120 
126 
132  void DrawPoly(float* points, int n);
133 
140  void DrawPoly(float* points, int n, unsigned char* colors, int nc_comps);
141 
147 
152  void DrawLines(float* points, int n);
153 
157  void DrawPoint(float x, float y);
158 
162  void DrawPoints(float* x, float* y, int n);
163 
169 
175  void DrawPoints(float* points, int n);
176 
183 
185 
193  vtkImageData* sprite, float* points, int n, unsigned char* colors, int nc_comps);
195 
201  void DrawPointSprites(vtkImageData* sprite, float* points, int n);
202 
204 
216  virtual void DrawMarkers(
217  int shape, bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
218  virtual void DrawMarkers(int shape, bool highlight, float* points, int n);
219  virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D* points);
220  virtual void DrawMarkers(
221  int shape, bool highlight, vtkPoints2D* points, vtkUnsignedCharArray* colors);
223 
227  void DrawRect(float x, float y, float w, float h);
228 
230 
233  void DrawQuad(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
234  void DrawQuad(float* p);
236 
238 
242  void DrawQuadStrip(float* p, int n);
244 
249  void DrawPolygon(float* x, float* y, int n);
250 
256 
262  void DrawPolygon(float* points, int n);
263 
268  void DrawPolygon(float* x, float* y, int n, unsigned char* color, int nc_comps);
269 
274  void DrawPolygon(vtkPoints2D* points, unsigned char* color, int nc_comps);
275 
281  void DrawPolygon(float* points, int n, unsigned char* color, int nc_comps);
282 
288  void DrawEllipse(float x, float y, float rx, float ry);
289 
298  void DrawWedge(
299  float x, float y, float outRadius, float inRadius, float startAngle, float stopAngle);
300 
312  void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy,
313  float startAngle, float stopAngle);
314 
320  void DrawArc(float x, float y, float r, float startAngle, float stopAngle);
321 
328  void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle, float stopAngle);
329 
333  void DrawImage(float x, float y, vtkImageData* image);
334 
339  void DrawImage(float x, float y, float scale, vtkImageData* image);
340 
346  void DrawImage(const vtkRectf& pos, vtkImageData* image);
347 
353  float x, float y, vtkPolyData* polyData, vtkUnsignedCharArray* colors, int scalarMode);
354 
356 
361  void DrawStringRect(vtkPoints2D* rect, const vtkStdString& string);
362  void DrawStringRect(vtkPoints2D* rect, const vtkUnicodeString& string);
363  void DrawStringRect(vtkPoints2D* rect, const char* string);
365 
367 
370  void DrawString(vtkPoints2D* point, const vtkStdString& string);
371  void DrawString(float x, float y, const vtkStdString& string);
373  void DrawString(float x, float y, const vtkUnicodeString& string);
374  void DrawString(vtkPoints2D* point, const char* string);
375  void DrawString(float x, float y, const char* string);
377 
379 
388  void ComputeStringBounds(const vtkStdString& string, vtkPoints2D* bounds);
389  void ComputeStringBounds(const vtkStdString& string, float bounds[4]);
390  void ComputeStringBounds(const vtkUnicodeString& string, vtkPoints2D* bounds);
391  void ComputeStringBounds(const vtkUnicodeString& string, float bounds[4]);
392  void ComputeStringBounds(const char* string, vtkPoints2D* bounds);
393  void ComputeStringBounds(const char* string, float bounds[4]);
395 
400  void ComputeJustifiedStringBounds(const char* string, float bounds[4]);
401 
408  int ComputeFontSizeForBoundedString(const vtkStdString& string, float width, float height);
409 
411 
419  void DrawMathTextString(float x, float y, const vtkStdString& string);
420  void DrawMathTextString(vtkPoints2D* point, const char* string);
421  void DrawMathTextString(float x, float y, const char* string);
423 
425 
434  vtkPoints2D* point, const vtkStdString& string, const vtkStdString& fallback);
436  float x, float y, const vtkStdString& string, const vtkStdString& fallback);
437  void DrawMathTextString(vtkPoints2D* point, const char* string, const char* fallback);
438  void DrawMathTextString(float x, float y, const char* string, const char* fallback);
440 
445 
451  void ApplyPen(vtkPen* pen);
452 
459 
465  void ApplyBrush(vtkBrush* brush);
466 
472 
479 
484 
490  void SetTransform(vtkTransform2D* transform);
491 
496 
503  void AppendTransform(vtkTransform2D* transform);
504 
506 
510  void PushMatrix();
511  void PopMatrix();
513 
517  void ApplyId(vtkIdType id);
518 
524  static int FloatToInt(float x);
525 
527 
531  vtkGetObjectMacro(Context3D, vtkContext3D);
532  virtual void SetContext3D(vtkContext3D* context);
534 
535 protected:
537  ~vtkContext2D() override;
538 
539  vtkContextDevice2D* Device; // The underlying device
540  vtkTransform2D* Transform; // Current transform
541 
543  vtkContext3D* Context3D; // May be very temporary - get at a 3D version.
544 
545 private:
546  vtkContext2D(const vtkContext2D&) = delete;
547  void operator=(const vtkContext2D&) = delete;
548 
555  vtkVector2f CalculateTextPosition(vtkPoints2D* rect);
556 
563  vtkVector2f CalculateTextPosition(float rect[4]);
564 };
565 
566 inline int vtkContext2D::FloatToInt(float x)
567 {
568  // Use a tolerance of 1/256 of a pixel when converting.
569  // A float has only 24 bits of precision, so we cannot
570  // make the tolerance too small. For example, a tolerance
571  // of 2^-8 means that the tolerance will be significant
572  // for float values up to 2^16 or 65536.0. But a
573  // tolerance of 2^-16 would only be significant for
574  // float values up to 2^8 or 256.0. A small tolerance
575  // disappears into insignificance when added to a large float.
576  float tol = 0.00390625; // 1.0/256.0
577  tol = (x >= 0 ? tol : -tol);
578  return static_cast<int>(x + tol);
579 }
580 
581 #endif // vtkContext2D_h
2D array of ids, used for picking.
provides a brush that fills shapes drawn by vtkContext2D.
Definition: vtkBrush.h:38
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:53
void DrawStringRect(vtkPoints2D *rect, const vtkUnicodeString &string)
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)
static int FloatToInt(float x)
Float to int conversion, performs truncation but with a rounding tolerance for float values that are ...
Definition: vtkContext2D.h:566
void ComputeStringBounds(const vtkUnicodeString &string, float bounds[4])
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)
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)
void DrawMathTextString(float x, float y, const vtkStdString &string)
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:540
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])
void DrawQuad(float *p)
void DrawRect(float x, float y, float w, float h)
Draw a rectangle with origin at x, y and width w, height h.
void DrawString(vtkPoints2D *point, const vtkUnicodeString &string)
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 DrawImage(const vtkRectf &pos, vtkImageData *image)
Draw the supplied image at the given position.
void DrawMathTextString(vtkPoints2D *point, const char *string)
void DrawImage(float x, float y, vtkImageData *image)
Draw the supplied image at the given x, y location (bottom corner).
void ComputeStringBounds(const vtkUnicodeString &string, vtkPoints2D *bounds)
void DrawMathTextString(float x, float y, const char *string)
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])
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)
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.
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)
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)
virtual void DrawMarkers(int shape, bool highlight, float *points, int n)
void DrawLine(float p[4])
Draw a line between the specified points.
void DrawMathTextString(float x, float y, const char *string, const char *fallback)
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:542
void DrawLine(vtkPoints2D *points)
Draw a line between the specified points.
virtual void SetContext3D(vtkContext3D *context)
void DrawString(float x, float y, const vtkUnicodeString &string)
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)
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)
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:539
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)
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:543
virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D *points, vtkUnsignedCharArray *colors)
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)
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()
Class for drawing 3D primitives to a graphical context.
Definition: vtkContext3D.h:41
Abstract class for drawing 2D primitives.
vtkFrustumSelector is a vtkSelector that selects elements based on whether they are inside or interse...
topologically and geometrically regular array of data
Definition: vtkImageData.h:42
a simple class to control print indentation
Definition: vtkIndent.h:34
abstract base class for most VTK objects
Definition: vtkObject.h:63
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition: vtkPen.h:37
represent and manipulate 2D points
Definition: vtkPoints2D.h:34
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:35
represent text properties.
describes linear transformations via a 3x3 matrix
String class that stores Unicode text.
dynamic, self-adjusting array of unsigned char
window superclass for vtkRenderWindow
Definition: vtkWindow.h:38
@ point
Definition: vtkX3D.h:242
@ points
Definition: vtkX3D.h:452
@ startAngle
Definition: vtkX3D.h:492
@ scale
Definition: vtkX3D.h:235
@ color
Definition: vtkX3D.h:227
@ height
Definition: vtkX3D.h:260
@ image
Definition: vtkX3D.h:380
int vtkIdType
Definition: vtkType.h:338