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
46#ifndef vtkContext2D_h
47#define vtkContext2D_h
48
49#include "vtkDeprecation.h" // for deprecation macros
50#include "vtkObject.h"
51#include "vtkRenderingContext2DModule.h" // For export macro
52
53class vtkWindow;
54
55class vtkContext3D;
56class vtkStdString;
58class vtkTextProperty;
59
60class vtkPoints2D;
61class vtkVector2f;
62class vtkRectf;
65class vtkPen;
66class vtkBrush;
67class vtkImageData;
68class vtkPolyData;
69class vtkTransform2D;
71
72class VTKRENDERINGCONTEXT2D_EXPORT vtkContext2D : public vtkObject
73{
74public:
75 vtkTypeMacro(vtkContext2D, vtkObject);
76 void PrintSelf(ostream& os, vtkIndent indent) override;
77
81 static vtkContext2D* New();
82
89
90 vtkGetObjectMacro(Device, vtkContextDevice2D);
91
97 bool End();
98
102 bool GetBufferIdMode() const;
103
111
119
123 void DrawLine(float x1, float y1, float x2, float y2);
124
128 void DrawLine(float p[4]);
129
134 void DrawLine(vtkPoints2D* points);
135
139 void DrawPoly(float* x, float* y, int n);
140
145 void DrawPoly(vtkPoints2D* points);
146
152 void DrawPoly(float* points, int n);
153
160 void DrawPoly(float* points, int n, unsigned char* colors, int nc_comps);
161
166 void DrawLines(vtkPoints2D* points);
167
172 void DrawLines(float* points, int n);
173
177 void DrawPoint(float x, float y);
178
182 void DrawPoints(float* x, float* y, int n);
183
188 void DrawPoints(vtkPoints2D* points);
189
195 void DrawPoints(float* points, int n);
196
203
205
213 vtkImageData* sprite, float* points, int n, unsigned char* colors, int nc_comps);
215
221 void DrawPointSprites(vtkImageData* sprite, float* points, int n);
222
224
240 virtual void DrawMarkers(
241 int shape, bool highlight, float* points, int n, unsigned char* colors, int nc_comps);
242 virtual void DrawMarkers(int shape, bool highlight, float* points, int n);
243 virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D* points);
244 virtual void DrawMarkers(
245 int shape, bool highlight, vtkPoints2D* points, vtkUnsignedCharArray* colors);
247
251 void DrawRect(float x, float y, float w, float h);
252
254
257 void DrawQuad(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
258 void DrawQuad(float* p);
260
262
266 void DrawQuadStrip(float* p, int n);
268
273 void DrawPolygon(float* x, float* y, int n);
274
280
286 void DrawPolygon(float* points, int n);
287
292 void DrawPolygon(float* x, float* y, int n, unsigned char* color, int nc_comps);
293
298 void DrawPolygon(vtkPoints2D* points, unsigned char* color, int nc_comps);
299
305 void DrawPolygon(float* points, int n, unsigned char* color, int nc_comps);
306
312 void DrawEllipse(float x, float y, float rx, float ry);
313
323 float x, float y, float outRadius, float inRadius, float startAngle, float stopAngle);
324
336 void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy,
337 float startAngle, float stopAngle);
338
344 void DrawArc(float x, float y, float r, float startAngle, float stopAngle);
345
352 void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle, float stopAngle);
353
357 void DrawImage(float x, float y, vtkImageData* image);
358
363 void DrawImage(float x, float y, float scale, vtkImageData* image);
364
370 void DrawImage(const vtkRectf& pos, vtkImageData* image);
371
377 float x, float y, vtkPolyData* polyData, vtkUnsignedCharArray* colors, int scalarMode);
378
380
385 void DrawStringRect(vtkPoints2D* rect, const vtkStdString& string);
386 VTK_DEPRECATED_IN_9_1_0("Use void DrawStringRect(vtkPoints2D* rect, const vtkStdString& string)")
387 void DrawStringRect(vtkPoints2D* rect, const vtkUnicodeString& string);
388 void DrawStringRect(vtkPoints2D* rect, const char* string);
389 void DrawStringRect(const float rect[4], const vtkStdString& string);
391 "Use void DrawStringRect(const float rect[4], const vtkStdString& string)")
392 void DrawStringRect(const float rect[4], const vtkUnicodeString& 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 VTK_DEPRECATED_IN_9_1_0("Use void DrawString(vtkPoints2D* point, const vtkStdString& string)")
403 void DrawString(vtkPoints2D* point, const vtkUnicodeString& string);
404 VTK_DEPRECATED_IN_9_1_0("Use void DrawString(float x, float y, const vtkStdString& string)")
405 void DrawString(float x, float y, const vtkUnicodeString& string);
406 void DrawString(vtkPoints2D* point, const char* string);
407 void DrawString(float x, float y, const char* string);
409
411
420 void ComputeStringBounds(const vtkStdString& string, vtkPoints2D* bounds);
421 void ComputeStringBounds(const vtkStdString& string, float bounds[4]);
423 "Use void ComputeStringBounds(const vtkStdString& string, vtkPoints2D* bounds)")
424 void ComputeStringBounds(const vtkUnicodeString& string, vtkPoints2D* bounds);
426 "Use void ComputeStringBounds(const vtkStdString& string, float bounds[4])")
427 void ComputeStringBounds(const vtkUnicodeString& string, float bounds[4]);
428 void ComputeStringBounds(const char* string, vtkPoints2D* bounds);
429 void ComputeStringBounds(const char* string, float bounds[4]);
431
436 void ComputeJustifiedStringBounds(const char* string, float bounds[4]);
437
444 int ComputeFontSizeForBoundedString(const vtkStdString& string, float width, float height);
445
447
454 void DrawMathTextString(vtkPoints2D* point, const vtkStdString& string);
455 void DrawMathTextString(float x, float y, const vtkStdString& string);
456 void DrawMathTextString(vtkPoints2D* point, const char* string);
457 void DrawMathTextString(float x, float y, const char* string);
459
461
469 void DrawMathTextString(
470 vtkPoints2D* point, const vtkStdString& string, const vtkStdString& fallback);
471 void DrawMathTextString(
472 float x, float y, const vtkStdString& string, const vtkStdString& fallback);
473 void DrawMathTextString(vtkPoints2D* point, const char* string, const char* fallback);
474 void DrawMathTextString(float x, float y, const char* string, const char* fallback);
476
480 bool MathTextIsSupported();
481
487 void ApplyPen(vtkPen* pen);
488
494 vtkPen* GetPen();
495
501 void ApplyBrush(vtkBrush* brush);
502
507 vtkBrush* GetBrush();
508
514 void ApplyTextProp(vtkTextProperty* prop);
515
519 vtkTextProperty* GetTextProp();
520
526 void SetTransform(vtkTransform2D* transform);
527
531 vtkTransform2D* GetTransform();
532
539 void AppendTransform(vtkTransform2D* transform);
540
542
546 void PushMatrix();
547 void PopMatrix();
549
553 void ApplyId(vtkIdType id);
554
560 static int FloatToInt(float x);
561
563
567 vtkGetObjectMacro(Context3D, vtkContext3D);
568 virtual void SetContext3D(vtkContext3D* context);
570
571protected:
573 ~vtkContext2D() override;
574
575 vtkContextDevice2D* Device; // The underlying device
576 vtkTransform2D* Transform; // Current transform
577
579 vtkContext3D* Context3D; // May be very temporary - get at a 3D version.
580
581private:
582 vtkContext2D(const vtkContext2D&) = delete;
583 void operator=(const vtkContext2D&) = delete;
584
591 vtkVector2f CalculateTextPosition(vtkPoints2D* rect);
592
599 vtkVector2f CalculateTextPosition(const float rect[4]);
600};
601
602inline int vtkContext2D::FloatToInt(float x)
603{
604 // Use a tolerance of 1/256 of a pixel when converting.
605 // A float has only 24 bits of precision, so we cannot
606 // make the tolerance too small. For example, a tolerance
607 // of 2^-8 means that the tolerance will be significant
608 // for float values up to 2^16 or 65536.0. But a
609 // tolerance of 2^-16 would only be significant for
610 // float values up to 2^8 or 256.0. A small tolerance
611 // disappears into insignificance when added to a large float.
612 float tol = 0.00390625; // 1.0/256.0
613 tol = (x >= 0 ? tol : -tol);
614 return static_cast<int>(x + tol);
615}
616
617#endif // vtkContext2D_h
2D array of ids, used for picking.
provides a brush that fills shapes drawn by vtkContext2D.
Definition: vtkBrush.h:97
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:73
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:60
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:157
a simple class to control print indentation
Definition: vtkIndent.h:113
abstract base class for most VTK objects
Definition: vtkObject.h:82
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition: vtkPen.h:136
represent and manipulate 2D points
Definition: vtkPoints2D.h:34
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:105
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:39
#define VTK_DEPRECATED_IN_9_1_0(reason)
int vtkIdType
Definition: vtkType.h:332