VTK
vtkOpenGLContextDevice2D.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkOpenGLContextDevice2D.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 vtkOpenGLContextDevice2D_h
34 #define vtkOpenGLContextDevice2D_h
35 
36 #include "vtkRenderingContextOpenGLModule.h" // For export macro
37 #include "vtkContextDevice2D.h"
38 
39 #include <list> // for std::list
40 
41 class vtkWindow;
42 class vtkViewport;
43 class vtkRenderer;
44 class vtkTextRenderer;
47 
48 class VTKRENDERINGCONTEXTOPENGL_EXPORT vtkOpenGLContextDevice2D : public vtkContextDevice2D
49 {
50 public:
52  void PrintSelf(ostream &os, vtkIndent indent) override;
53 
57  static vtkOpenGLContextDevice2D *New();
58 
65  void DrawPoly(float *f, int n, unsigned char *colors = 0,
66  int nc_comps = 0) override;
67 
74  void DrawLines(float *f, int n, unsigned char *colors = 0,
75  int nc_comps = 0) override;
76 
82  void DrawPoints(float *points, int n, unsigned char* colors = 0,
83  int nc_comps = 0) override;
84 
91  void DrawPointSprites(vtkImageData *sprite, float *points, int n,
92  unsigned char* colors = 0, int nc_comps = 0) override;
93 
105  void DrawMarkers(int shape, bool highlight, float *points, int n,
106  unsigned char *colors = 0, int nc_comps = 0) override;
107 
109 
114  vtkSetMacro(MaximumMarkerCacheSize, int)
115  vtkGetMacro(MaximumMarkerCacheSize, int)
117 
121  void DrawQuad(float *points, int n) override;
122 
126  void DrawQuadStrip(float *points, int n) override;
127 
131  void DrawPolygon(float *, int) override;
132 
144  void DrawEllipseWedge(float x, float y, float outRx, float outRy,
145  float inRx, float inRy, float startAngle,
146  float stopAngle) override;
147 
154  void DrawEllipticArc(float x, float y, float rX, float rY,
155  float startAngle, float stopAngle) override;
156 
157 
161  void DrawString(float *point, const vtkStdString &string) override;
162 
171  void ComputeStringBounds(const vtkStdString &string,
172  float bounds[4]) override;
173 
177  void DrawString(float *point, const vtkUnicodeString &string) override;
178 
187  void ComputeStringBounds(const vtkUnicodeString &string,
188  float bounds[4]) override;
189 
195  void ComputeJustifiedStringBounds(const char* string, float bounds[4]) override;
196 
201  void DrawMathTextString(float point[2], const vtkStdString &string) override;
202 
207  void DrawImage(float p[2], float scale, vtkImageData *image) override;
208 
214  void DrawImage(const vtkRectf& pos, vtkImageData *image) override;
215 
222  void DrawPolyData(float p[2], float scale, vtkPolyData* polyData,
223  vtkUnsignedCharArray* colors, int scalarMode) override;
224 
228  void SetColor4(unsigned char color[4]) override;
229 
233  virtual void SetColor(unsigned char color[3]);
234 
238  void SetTexture(vtkImageData* image, int properties = 0) override;
239 
243  void SetPointSize(float size) override;
244 
248  void SetLineWidth(float width) override;
249 
253  void SetLineType(int type) override;
254 
258  void MultiplyMatrix(vtkMatrix3x3 *m) override;
259 
263  void SetMatrix(vtkMatrix3x3 *m) override;
264 
268  void GetMatrix(vtkMatrix3x3 *m) override;
269 
273  void PushMatrix() override;
274 
278  void PopMatrix() override;
279 
284  void SetClipping(int *x) override;
285 
289  void EnableClipping(bool enable) override;
290 
294  void Begin(vtkViewport* viewport) override;
295 
299  void End() override;
300 
308  void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId) override;
309 
317  void BufferIdModeEnd() override;
318 
324  bool SetStringRendererToFreeType();
325 
330  bool SetStringRendererToQt();
331 
335  bool HasGLSL();
336 
338 
341  vtkGetObjectMacro(RenderWindow, vtkOpenGLRenderWindow);
343 
349  virtual void ReleaseGraphicsResources(vtkWindow *window);
350 
351 protected:
353  ~vtkOpenGLContextDevice2D() override;
354 
362  int GetNumberOfArcIterations(float rX,
363  float rY,
364  float startAngle,
365  float stopAngle);
366 
370  int Geometry[2];
371 
376 
380  bool InRender;
381 
383 
386  class Private;
387  Private *Storage;
389 
393  virtual bool LoadExtensions(vtkOpenGLExtensionManager *m);
394 
399 
400 private:
402  void operator=(const vtkOpenGLContextDevice2D &) = delete;
403 
410  vtkImageData *GetMarker(int shape, int size, bool highlight);
411 
412  class vtkMarkerCacheObject
413  {
414  public:
415  vtkTypeUInt64 Key;
416  vtkImageData *Value;
417  bool operator==(vtkTypeUInt64 key)
418  {
419  return this->Key == key;
420  }
421  };
422 
423  std::list<vtkMarkerCacheObject> MarkerCache;
424  int MaximumMarkerCacheSize;
425 
430  vtkImageData * GenerateMarker(int shape, int size, bool highlight);
431 
432  void ComputeStringBoundsInternal(const vtkUnicodeString &string,
433  float bounds[4]);
434 
435 
436 };
437 
438 #endif //vtkOpenGLContextDevice2D_h
OpenGL rendering window.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:40
virtual void SetMatrix(vtkMatrix3x3 *m)=0
Set the model view matrix for the display.
virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n, unsigned char *colors=nullptr, int nc_comps=0)=0
Draw a series of point sprites, images centred at the points supplied.
virtual void SetClipping(int *x)=0
Supply a float array of length 4 with x1, y1, width, height specifying clipping region for the device...
virtual void BufferIdModeEnd()
Finalize BufferId creation Mode.
virtual void ComputeJustifiedStringBounds(const char *string, float bounds[4])=0
Compute the bounds of the supplied string while taking into account the justification of the currentl...
virtual void DrawPoly(float *points, int n, unsigned char *colors=nullptr, int nc_comps=0)=0
Draw a poly line using the points - fastest code path due to memory layout of the coordinates.
abstract specification for Viewports
Definition: vtkViewport.h:47
virtual void DrawPolygon(float *p, int n)
Draw a polygon using the specified number of points.
vtkRenderer * Renderer
We need to store a pointer to the renderer for the text rendering.
Class for drawing 2D primitives using OpenGL 1.1+.
virtual void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId)
Start BufferId creation Mode.
abstract specification for renderers
Definition: vtkRenderer.h:63
static vtkContextDevice2D * New()
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
virtual void DrawPolyData(float p[2], float scale, vtkPolyData *polyData, vtkUnsignedCharArray *colors, int scalarMode)
Draw the supplied PolyData at the given x, y (p[0], p[1]) (bottom corner), scaled by scale (1....
virtual void Begin(vtkViewport *)
Begin drawing, pass in the viewport to set up the view.
virtual void SetColor4(unsigned char color[4])=0
Set the color for the device using unsigned char of length 4, RGBA.
bool InRender
Is the device currently rendering? Prevent multiple End() calls.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
virtual void EnableClipping(bool enable)=0
Enable or disable the clipping of the scene.
virtual void SetLineWidth(float width)=0
Set the line width.
virtual void DrawPoints(float *points, int n, unsigned char *colors=nullptr, int nc_comps=0)=0
Draw a series of points - fastest code path due to memory layout of the coordinates.
a simple class to control print indentation
Definition: vtkIndent.h:39
virtual void DrawMarkers(int shape, bool highlight, float *points, int n, unsigned char *colors=nullptr, int nc_comps=0)
Draw a series of markers centered at the points supplied.
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
virtual void DrawQuadStrip(float *, int)
Draw a quad using the specified number of points.
Abstract class for drawing 2D primitives.
virtual void PopMatrix()=0
Pop the current matrix off of the stack.
virtual void DrawLines(float *f, int n, unsigned char *colors=nullptr, int nc_comps=0)=0
Draw lines using the points - memory layout is as follows: l1p1,l1p2,l2p1,l2p2...
virtual void SetTexture(vtkImageData *image, int properties)=0
Set the texture for the device, it is used to fill the polygons.
virtual void DrawMathTextString(float *point, const vtkStdString &string)=0
Draw text using MathText markup for mathematical equations.
vtkOpenGLRenderWindow * RenderWindow
The OpenGL render window being used by the device.
Interface class for querying and using OpenGL extensions.
virtual void SetPointSize(float size)=0
Set the point size for glyphs/sprites.
dynamic, self-adjusting array of unsigned char
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
virtual void DrawQuad(float *, int)
Draw a quad using the specified number of points.
2D array of ids, used for picking.
virtual void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle, float stopAngle)=0
Draw an elliptic arc with center at x,y with radii rX and rY between angles startAngle and stopAngle ...
virtual void MultiplyMatrix(vtkMatrix3x3 *m)=0
Multiply the current model view matrix by the supplied one.
virtual void DrawString(float *point, const vtkStdString &string)=0
Draw some text to the screen.
virtual void End()
End drawing, clean up the view.
virtual void DrawEllipseWedge(float x, float y, float outRx, float outRy, float inRx, float inRy, float startAngle, float stopAngle)=0
Draw an elliptic wedge with center at x, y, outer radii outRx, outRy, inner radii inRx,...
Interface for generating images and path data from string data, using multiple backends.
virtual void GetMatrix(vtkMatrix3x3 *m)=0
Set the model view matrix for the display.
virtual void ComputeStringBounds(const vtkStdString &string, float bounds[4])=0
Compute the bounds of the supplied string.
VTKCOMMONCORE_EXPORT bool operator==(const vtkUnicodeString &lhs, const vtkUnicodeString &rhs)
virtual void PushMatrix()=0
Push the current matrix onto the stack.
virtual void DrawImage(float p[2], float scale, vtkImageData *image)=0
Draw the supplied image at the given x, y (p[0], p[1]) (bottom corner), scaled by scale (1....
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:36
virtual void SetLineType(int type)=0
Set the line type type (using anonymous enum in vtkPen).
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
String class that stores Unicode text.