VTK  9.1.0
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
36#ifndef vtkContext2D_h
37#define vtkContext2D_h
38
39#include "vtkDeprecation.h" // for deprecation macros
40#include "vtkObject.h"
41#include "vtkRenderingContext2DModule.h" // For export macro
42
43class vtkWindow;
44
45class vtkContext3D;
46class vtkStdString;
48class vtkTextProperty;
49
50class vtkPoints2D;
51class vtkVector2f;
52class vtkRectf;
55class vtkPen;
56class vtkBrush;
57class vtkImageData;
58class vtkPolyData;
59class vtkTransform2D;
61
62class VTKRENDERINGCONTEXT2D_EXPORT vtkContext2D : public vtkObject
63{
64public:
65 vtkTypeMacro(vtkContext2D, vtkObject);
66 void PrintSelf(ostream& os, vtkIndent indent) override;
67
71 static vtkContext2D* New();
72
79
80 vtkGetObjectMacro(Device, vtkContextDevice2D);
81
87 bool End();
88
92 bool GetBufferIdMode() const;
93
101
109
113 void DrawLine(float x1, float y1, float x2, float y2);
114
118 void DrawLine(float p[4]);
119
125
129 void DrawPoly(float* x, float* y, int n);
130
136
142 void DrawPoly(float* points, int n);
143
150 void DrawPoly(float* points, int n, unsigned char* colors, int nc_comps);
151
157
162 void DrawLines(float* points, int n);
163
167 void DrawPoint(float x, float y);
168
172 void DrawPoints(float* x, float* y, int n);
173
179
185 void DrawPoints(float* points, int n);
186
193
195
203 vtkImageData* sprite, float* points, int n, unsigned char* colors, int nc_comps);
205
211 void DrawPointSprites(vtkImageData* sprite, float* points, int n);
212
214
230 virtual void DrawMarkers(
231 int shape, bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
232 virtual void DrawMarkers(int shape, bool highlight, float* points, int n);
233 virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D* points);
234 virtual void DrawMarkers(
235 int shape, bool highlight, vtkPoints2D* points, vtkUnsignedCharArray* colors);
237
241 void DrawRect(float x, float y, float w, float h);
242
244
247 void DrawQuad(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
248 void DrawQuad(float* p);
250
252
256 void DrawQuadStrip(float* p, int n);
258
263 void DrawPolygon(float* x, float* y, int n);
264
270
276 void DrawPolygon(float* points, int n);
277
282 void DrawPolygon(float* x, float* y, int n, unsigned char* color, int nc_comps);
283
288 void DrawPolygon(vtkPoints2D* points, unsigned char* color, int nc_comps);
289
295 void DrawPolygon(float* points, int n, unsigned char* color, int nc_comps);
296
302 void DrawEllipse(float x, float y, float rx, float ry);
303
313 float x, float y, float outRadius, float inRadius, float startAngle, float stopAngle);
314
326 void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy,
327 float startAngle, float stopAngle);
328
334 void DrawArc(float x, float y, float r, float startAngle, float stopAngle);
335
342 void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle, float stopAngle);
343
347 void DrawImage(float x, float y, vtkImageData* image);
348
353 void DrawImage(float x, float y, float scale, vtkImageData* image);
354
361
367 float x, float y, vtkPolyData* polyData, vtkUnsignedCharArray* colors, int scalarMode);
368
370
375 void DrawStringRect(vtkPoints2D* rect, const vtkStdString& string);
376 VTK_DEPRECATED_IN_9_1_0("Use void DrawStringRect(vtkPoints2D* rect, const vtkStdString& string)")
377 void DrawStringRect(vtkPoints2D* rect, const vtkUnicodeString& string);
378 void DrawStringRect(vtkPoints2D* rect, const char* string);
379 void DrawStringRect(const float rect[4], const vtkStdString& string);
381 "Use void DrawStringRect(const float rect[4], const vtkStdString& string)")
382 void DrawStringRect(const float rect[4], const vtkUnicodeString& string);
383 void DrawStringRect(const float rect[4], const char* string);
385
387
390 void DrawString(vtkPoints2D* point, const vtkStdString& string);
391 void DrawString(float x, float y, const vtkStdString& string);
392 VTK_DEPRECATED_IN_9_1_0("Use void DrawString(vtkPoints2D* point, const vtkStdString& string)")
393 void DrawString(vtkPoints2D* point, const vtkUnicodeString& string);
394 VTK_DEPRECATED_IN_9_1_0("Use void DrawString(float x, float y, const vtkStdString& string)")
395 void DrawString(float x, float y, const vtkUnicodeString& string);
396 void DrawString(vtkPoints2D* point, const char* string);
397 void DrawString(float x, float y, const char* string);
399
401
410 void ComputeStringBounds(const vtkStdString& string, vtkPoints2D* bounds);
411 void ComputeStringBounds(const vtkStdString& string, float bounds[4]);
413 "Use void ComputeStringBounds(const vtkStdString& string, vtkPoints2D* bounds)")
414 void ComputeStringBounds(const vtkUnicodeString& string, vtkPoints2D* bounds);
416 "Use void ComputeStringBounds(const vtkStdString& string, float bounds[4])")
417 void ComputeStringBounds(const vtkUnicodeString& 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
444 void DrawMathTextString(vtkPoints2D* point, const vtkStdString& string);
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
459 void DrawMathTextString(
460 vtkPoints2D* point, const vtkStdString& string, const vtkStdString& fallback);
461 void DrawMathTextString(
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
470 bool MathTextIsSupported();
471
477 void ApplyPen(vtkPen* pen);
478
484 vtkPen* GetPen();
485
491 void ApplyBrush(vtkBrush* brush);
492
497 vtkBrush* GetBrush();
498
504 void ApplyTextProp(vtkTextProperty* prop);
505
509 vtkTextProperty* GetTextProp();
510
516 void SetTransform(vtkTransform2D* transform);
517
521 vtkTransform2D* GetTransform();
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
561protected:
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
571private:
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
592inline 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#endif // vtkContext2D_h
2D array of ids, used for picking.
provides a brush that fills shapes drawn by vtkContext2D.
Definition: vtkBrush.h:47
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:63
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
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,...
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 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.
bool Begin(vtkContextDevice2D *device)
Begin painting on a vtkContextDevice2D, no painting can occur before this call has been made.
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 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.
static vtkContext2D * New()
Creates a 2D Painter object.
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...
void DrawImage(const vtkRectf &pos, vtkImageData *image)
Draw the supplied image at the given position.
void DrawImage(float x, float y, vtkImageData *image)
Draw the supplied image at the given x, y location (bottom corner).
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...
void DrawPointSprites(vtkImageData *sprite, float *points, int n)
Draw a series of point sprites, images centred at the points supplied.
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 DrawPoly(vtkPoints2D *points)
Draw a poly line between the specified points - fastest code path due to memory layout of the coordin...
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 DrawPolygon(vtkPoints2D *points)
Draw a polygon defined by the specified points - fastest code path due to memory layout of the coordi...
void DrawLine(vtkPoints2D *points)
Draw a line between the specified points.
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...
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 DrawLines(vtkPoints2D *points)
Draw multiple lines between the specified pairs of points.
void DrawPoints(vtkPoints2D *points)
Draw a poly line between the specified points - fastest code path due to memory layout of the coordin...
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.
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...
Class for drawing 3D primitives to a graphical context.
Definition: vtkContext3D.h:50
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:57
a simple class to control print indentation
Definition: vtkIndent.h:43
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:46
represent and manipulate 2D points
Definition: vtkPoints2D.h:34
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:95
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:45
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:45
@ Transform
Definition: vtkX3D.h:47
@ 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
#define VTK_DEPRECATED_IN_9_1_0(reason)
int vtkIdType
Definition: vtkType.h:332