VTK
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 
33 #ifndef vtkContext2D_h
34 #define vtkContext2D_h
35 
36 #include "vtkRenderingContext2DModule.h" // For export macro
37 #include "vtkObject.h"
38 
39 class vtkWindow;
40 
41 class vtkContext3D;
42 class vtkStdString;
43 class vtkUnicodeString;
44 class vtkTextProperty;
45 
46 class vtkPoints2D;
47 class vtkVector2f;
48 class vtkRectf;
50 class vtkContextDevice2D;
51 class vtkPen;
52 class vtkBrush;
53 class vtkImageData;
54 class vtkTransform2D;
56 
57 class VTKRENDERINGCONTEXT2D_EXPORT vtkContext2D : public vtkObject
58 {
59 public:
60  vtkTypeMacro(vtkContext2D, vtkObject);
61  virtual void PrintSelf(ostream &os, vtkIndent indent);
62 
66  static vtkContext2D *New();
67 
73  bool Begin(vtkContextDevice2D *device);
74 
75  vtkGetObjectMacro(Device, vtkContextDevice2D);
76 
82  bool End();
83 
87  bool GetBufferIdMode() const;
88 
95  void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId);
96 
103  void BufferIdModeEnd();
104 
108  void DrawLine(float x1, float y1, float x2, float y2);
109 
113  void DrawLine(float p[4]);
114 
119  void DrawLine(vtkPoints2D *points);
120 
124  void DrawPoly(float *x, float *y, int n);
125 
130  void DrawPoly(vtkPoints2D *points);
131 
137  void DrawPoly(float *points, int n);
138 
145  void DrawPoly(float *points, int n,
146  unsigned char *colors, int nc_comps);
147 
152  void DrawLines(vtkPoints2D *points);
153 
158  void DrawLines(float *points, int n);
159 
163  void DrawPoint(float x, float y);
164 
168  void DrawPoints(float *x, float *y, int n);
169 
174  void DrawPoints(vtkPoints2D *points);
175 
181  void DrawPoints(float *points, int n);
182 
188  void DrawPointSprites(vtkImageData *sprite, vtkPoints2D *points);
189 
191 
197  void DrawPointSprites(vtkImageData *sprite, vtkPoints2D *points,
198  vtkUnsignedCharArray *colors);
199  void DrawPointSprites(vtkImageData *sprite, float *points, int n,
200  unsigned char *colors, int nc_comps);
202 
208  void DrawPointSprites(vtkImageData *sprite, float *points, int n);
209 
211 
223  virtual void DrawMarkers(int shape, bool highlight, float *points, int n,
224  unsigned char *colors, int nc_comps);
225  virtual void DrawMarkers(int shape, bool highlight, float *points, int n);
226  virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D *points);
227  virtual void DrawMarkers(int shape, bool highlight, vtkPoints2D *points,
228  vtkUnsignedCharArray *colors);
230 
234  void DrawRect(float x, float y, float w, float h);
235 
237 
240  void DrawQuad(float x1, float y1, float x2, float y2,
241  float x3, float y3, float x4, float y4);
242  void DrawQuad(float *p);
244 
246 
249  void DrawQuadStrip(vtkPoints2D *points);
250  void DrawQuadStrip(float *p, int n);
252 
257  void DrawPolygon(float *x, float *y, int n);
258 
263  void DrawPolygon(vtkPoints2D *points);
264 
270  void DrawPolygon(float *points, int n);
271 
277  void DrawEllipse(float x, float y, float rx, float ry);
278 
287  void DrawWedge(float x, float y, float outRadius,
288  float inRadius,float startAngle,
289  float stopAngle);
290 
302  void DrawEllipseWedge(float x, float y, float outRx, float outRy,
303  float inRx, float inRy, float startAngle,
304  float stopAngle);
305 
306 
312  void DrawArc(float x, float y, float r, float startAngle,
313  float stopAngle);
314 
321  void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle,
322  float stopAngle);
323 
324 
328  void DrawImage(float x, float y, vtkImageData *image);
329 
334  void DrawImage(float x, float y, float scale, vtkImageData *image);
335 
341  void DrawImage(const vtkRectf& pos, vtkImageData *image);
342 
344 
349  void DrawStringRect(vtkPoints2D *rect, const vtkStdString &string);
350  void DrawStringRect(vtkPoints2D *rect, const vtkUnicodeString &string);
351  void DrawStringRect(vtkPoints2D *rect, const char* string);
353 
355 
358  void DrawString(vtkPoints2D *point, const vtkStdString &string);
359  void DrawString(float x, float y, const vtkStdString &string);
360  void DrawString(vtkPoints2D *point, const vtkUnicodeString &string);
361  void DrawString(float x, float y, const vtkUnicodeString &string);
362  void DrawString(vtkPoints2D *point, const char* string);
363  void DrawString(float x, float y, const char* string);
365 
367 
376  void ComputeStringBounds(const vtkStdString &string, vtkPoints2D *bounds);
377  void ComputeStringBounds(const vtkStdString &string, float bounds[4]);
378  void ComputeStringBounds(const vtkUnicodeString &string, vtkPoints2D *bounds);
379  void ComputeStringBounds(const vtkUnicodeString &string, float bounds[4]);
380  void ComputeStringBounds(const char* string, vtkPoints2D *bounds);
381  void ComputeStringBounds(const char* string, float bounds[4]);
383 
389  void ComputeJustifiedStringBounds(const char* string, float bounds[4]);
390 
397  int ComputeFontSizeForBoundedString(const vtkStdString &string, float width,
398  float height);
399 
401 
408  void DrawMathTextString(vtkPoints2D *point, const vtkStdString &string);
409  void DrawMathTextString(float x, float y, const vtkStdString &string);
410  void DrawMathTextString(vtkPoints2D *point, const char *string);
411  void DrawMathTextString(float x, float y, const char *string);
413 
415 
423  void DrawMathTextString(vtkPoints2D *point, const vtkStdString &string,
424  const vtkStdString &fallback);
425  void DrawMathTextString(float x, float y, const vtkStdString &string,
426  const vtkStdString &fallback);
427  void DrawMathTextString(vtkPoints2D *point, const char *string,
428  const char *fallback);
429  void DrawMathTextString(float x, float y, const char *string,
430  const char *fallback);
432 
433 
437  bool MathTextIsSupported();
438 
444  void ApplyPen(vtkPen *pen);
445 
451  vtkPen* GetPen();
452 
458  void ApplyBrush(vtkBrush *brush);
459 
464  vtkBrush* GetBrush();
465 
471  void ApplyTextProp(vtkTextProperty *prop);
472 
476  vtkTextProperty* GetTextProp();
477 
483  void SetTransform(vtkTransform2D *transform);
484 
488  vtkTransform2D* GetTransform();
489 
496  void AppendTransform(vtkTransform2D *transform);
497 
499 
503  void PushMatrix();
504  void PopMatrix();
506 
510  void ApplyId(vtkIdType id);
511 
517  static int FloatToInt(float x);
518 
520 
524  vtkGetObjectMacro(Context3D, vtkContext3D)
525  virtual void SetContext3D(vtkContext3D *context);
527 
528 protected:
529  vtkContext2D();
530  ~vtkContext2D();
531 
532  vtkContextDevice2D *Device; // The underlying device
533  vtkTransform2D *Transform; // Current transform
534 
536  vtkContext3D *Context3D; // May be very temporary - get at a 3D version.
537 
538 private:
539  vtkContext2D(const vtkContext2D &) VTK_DELETE_FUNCTION;
540  void operator=(const vtkContext2D &) VTK_DELETE_FUNCTION;
541 
548  vtkVector2f CalculateTextPosition(vtkPoints2D* rect);
549 
556  vtkVector2f CalculateTextPosition(float rect[4]);
557 
558 };
559 
560 inline int vtkContext2D::FloatToInt(float x)
561 {
562  // Use a tolerance of 1/256 of a pixel when converting.
563  // A float has only 24 bits of precision, so we cannot
564  // make the tolerance too small. For example, a tolerance
565  // of 2^-8 means that the tolerance will be significant
566  // for float values up to 2^16 or 65536.0. But a
567  // tolerance of 2^-16 would only be significant for
568  // float values up to 2^8 or 256.0. A small tolerance
569  // disappears into insignificance when added to a large float.
570  float tol = 0.00390625; // 1.0/256.0
571  tol = (x >= 0 ? tol : -tol);
572  return static_cast<int>(x + tol);
573 }
574 
575 #endif //vtkContext2D_h
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:47
abstract base class for most VTK objects
Definition: vtkObject.h:59
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int vtkIdType
Definition: vtkType.h:287
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:57
provides a brush that fills shapes drawn by vtkContext2D.
Definition: vtkBrush.h:37
a simple class to control print indentation
Definition: vtkIndent.h:39
represent and manipulate 2D points
Definition: vtkPoints2D.h:36
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
Abstract class for drawing 2D primitives.
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition: vtkPen.h:39
describes linear transformations via a 3x3 matrix
represent text properties.
dynamic, self-adjusting array of unsigned char
2D array of ids, used for picking.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
String class that stores Unicode text.
Transform
Definition: ADIOSDefs.h:39
Class for drawing 3D primitives to a graphical context.
Definition: vtkContext3D.h:40