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 "vtkRenderingContextOpenGL2Module.h" // For export macro
37 #include "vtkContextDevice2D.h"
38 
39 #include <vector> // STL Header
40 #include <list> // for std::list
41 
42 class vtkMatrix4x4;
44 class vtkOpenGLHelper;
46 class vtkPath;
47 class vtkRenderer;
48 class vtkShaderProgram;
49 class vtkStringToImage;
50 class vtkTransform;
51 class vtkViewport;
52 class vtkWindow;
53 
54 class VTKRENDERINGCONTEXTOPENGL2_EXPORT vtkOpenGLContextDevice2D : public vtkContextDevice2D
55 {
56 public:
58  virtual void PrintSelf(ostream &os, vtkIndent indent);
59 
63  static vtkOpenGLContextDevice2D *New();
64 
70  virtual void DrawPoly(float *f, int n, unsigned char *colors = 0,
71  int nc_comps = 0);
72 
79  virtual void DrawLines(float *f, int n, unsigned char *colors = 0,
80  int nc_comps = 0);
81 
87  virtual void DrawPoints(float *points, int n, unsigned char* colors = 0,
88  int nc_comps = 0);
89 
96  virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n,
97  unsigned char* colors = 0, int nc_comps = 0);
98 
110  virtual void DrawMarkers(int shape, bool highlight, float *points, int n,
111  unsigned char *colors = 0, int nc_comps = 0);
112 
114 
119  vtkSetMacro(MaximumMarkerCacheSize, int)
120  vtkGetMacro(MaximumMarkerCacheSize, int)
122 
126  virtual void DrawQuad(float *points, int n);
127 
131  virtual void DrawQuadStrip(float *points, int n);
132 
136  virtual void DrawPolygon(float *, int);
137 
149  virtual void DrawEllipseWedge(float x, float y, float outRx, float outRy,
150  float inRx, float inRy, float startAngle,
151  float stopAngle);
152 
159  virtual void DrawEllipticArc(float x, float y, float rX, float rY,
160  float startAngle, float stopAngle);
161 
162 
166  virtual void DrawString(float *point, const vtkStdString &string);
167 
176  virtual void ComputeStringBounds(const vtkStdString &string,
177  float bounds[4]);
178 
182  virtual void DrawString(float *point, const vtkUnicodeString &string);
183 
192  virtual void ComputeStringBounds(const vtkUnicodeString &string,
193  float bounds[4]);
194 
200  virtual void ComputeJustifiedStringBounds(const char* string, float bounds[4]);
201 
206  virtual void DrawMathTextString(float point[2], const vtkStdString &string);
207 
212  virtual void DrawImage(float p[2], float scale, vtkImageData *image);
213 
219  void DrawImage(const vtkRectf& pos, vtkImageData *image);
220 
224  virtual void SetColor4(unsigned char color[4]);
225 
229  virtual void SetColor(unsigned char color[3]);
230 
234  virtual void SetTexture(vtkImageData* image, int properties = 0);
235 
239  virtual void SetPointSize(float size);
240 
244  virtual void SetLineWidth(float width);
245 
249  virtual void SetLineType(int type);
250 
254  virtual void MultiplyMatrix(vtkMatrix3x3 *m);
255 
259  virtual void SetMatrix(vtkMatrix3x3 *m);
260 
264  virtual void GetMatrix(vtkMatrix3x3 *m);
265 
269  virtual void PushMatrix();
270 
274  virtual void PopMatrix();
275 
280  virtual void SetClipping(int *x);
281 
285  virtual void EnableClipping(bool enable);
286 
290  virtual void Begin(vtkViewport* viewport);
291 
295  virtual void End();
296 
304  virtual void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId);
305 
313  virtual void BufferIdModeEnd();
314 
320  bool SetStringRendererToFreeType();
321 
326  bool SetStringRendererToQt();
327 
331  bool HasGLSL();
332 
334 
337  vtkGetObjectMacro(RenderWindow, vtkOpenGLRenderWindow);
339 
345  virtual void ReleaseGraphicsResources(vtkWindow *window);
346 
348 
351  vtkMatrix4x4 *GetProjectionMatrix();
352  vtkMatrix4x4 *GetModelMatrix();
354 
355 protected:
357  virtual ~vtkOpenGLContextDevice2D();
358 
366  int GetNumberOfArcIterations(float rX,
367  float rY,
368  float startAngle,
369  float stopAngle);
370 
374  int Geometry[2];
375 
379  vtkRenderer *Renderer;
380 
384  vtkStringToImage *TextRenderer;
385 
389  bool InRender;
390 
392 
395  class Private;
396  Private *Storage;
398 
402  vtkOpenGLRenderWindow* RenderWindow;
403 
404  vtkOpenGLHelper *LinesCBO; // vertex + color
405  void ReadyLinesCBOProgram();
407  void ReadyLinesBOProgram();
408  vtkOpenGLHelper *VCBO; // vertex + color
409  void ReadyVCBOProgram();
410  vtkOpenGLHelper *VBO; // vertex
411  void ReadyVBOProgram();
412  vtkOpenGLHelper *VTBO; // vertex + tcoord
413  void ReadyVTBOProgram();
414  vtkOpenGLHelper *SCBO; // sprite + color
415  void ReadySCBOProgram();
416  vtkOpenGLHelper *SBO; // sprite
417  void ReadySBOProgram();
418 
419  void SetMatrices(vtkShaderProgram *prog);
420  void BuildVBO(vtkOpenGLHelper *cbo,
421  float *v, int nv,
422  unsigned char *coolors, int nc,
423  float *tcoords);
424  void CoreDrawTriangles(std::vector<float> &tverts);
425 
426  // used for stipples
427  unsigned short LinePattern;
428 
430 
434  void DrawMarkersGL2PS(int shape, bool highlight, float *points, int n,
435  unsigned char *colors, int nc_comps);
436  void DrawCrossMarkersGL2PS(bool highlight, float *points, int n,
437  unsigned char *colors, int nc_comps);
438  void DrawPlusMarkersGL2PS(bool highlight, float *points, int n,
439  unsigned char *colors, int nc_comps);
440  void DrawSquareMarkersGL2PS(bool highlight, float *points, int n,
441  unsigned char *colors, int nc_comps);
442  void DrawCircleMarkersGL2PS(bool highlight, float *points, int n,
443  unsigned char *colors, int nc_comps);
444  void DrawDiamondMarkersGL2PS(bool highlight, float *points, int n,
445  unsigned char *colors, int nc_comps);
447 
449 
452  void DrawImageGL2PS(float p[2], vtkImageData *image);
453  void DrawImageGL2PS(float p[2], float scale, vtkImageData *image);
454  void DrawImageGL2PS(const vtkRectf &rect, vtkImageData *image);
456 
458 
461  void DrawCircleGL2PS(float x, float y, float rX, float rY);
462  void DrawWedgeGL2PS(float x, float y, float outRx, float outRy,
463  float inRx, float inRy);
465 
469  void DrawMathTextStringGL2PS(float point[2], const vtkStdString &string);
470 
474  void AddEllipseToPath(vtkPath *path, float x, float y, float rx, float ry,
475  bool reverse);
476 
480  void TransformPath(vtkPath *path) const;
481 
485  void TransformPoint(float &x, float &y) const;
486 
490  void TransformSize(float &dx, float &dy) const;
491 
492 private:
493  vtkOpenGLContextDevice2D(const vtkOpenGLContextDevice2D &) VTK_DELETE_FUNCTION;
494  void operator=(const vtkOpenGLContextDevice2D &) VTK_DELETE_FUNCTION;
495 
496  void AlignText(double orientation, float width, float height, float *p);
497 
504  vtkImageData *GetMarker(int shape, int size, bool highlight);
505 
506  class vtkMarkerCacheObject
507  {
508  public:
509  vtkTypeUInt64 Key;
510  vtkImageData *Value;
511  bool operator==(vtkTypeUInt64 key)
512  {
513  return this->Key == key;
514  }
515  };
516 
517  vtkTransform *ProjectionMatrix;
518  vtkTransform *ModelMatrix;
519 
520  std::list<vtkMarkerCacheObject> MarkerCache;
521  int MaximumMarkerCacheSize;
522 
527  vtkImageData * GenerateMarker(int shape, int size, bool highlight);
528 
529 };
530 
531 #endif //vtkOpenGLContextDevice2D_h
OpenGL rendering window.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:47
virtual void SetMatrix(vtkMatrix3x3 *m)=0
Set the model view matrix for the display.
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:41
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...
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:35
abstract specification for Viewports
Definition: vtkViewport.h:47
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()
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:60
virtual void DrawPoints(float *points, int n, unsigned char *colors=0, int nc_comps=0)=0
Draw a series of points - fastest code path due to memory layout of the coordinates.
virtual void Begin(vtkViewport *)
Begin drawing, pass in the viewport to set up the view.
virtual void DrawPolygon(float *, int)
Draw a polygon using the specified number of points.
virtual void DrawMarkers(int shape, bool highlight, float *points, int n, unsigned char *colors=0, int nc_comps=0)
Draw a series of markers centered at the points supplied.
base class for classes that render supplied text to an image.
virtual void SetColor4(unsigned char color[4])=0
Set the color for the device using unsigned char of length 4, RGBA.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:34
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 DrawPoly(float *points, int n, unsigned char *colors=0, int nc_comps=0)=0
Draw a poly line using the points - fastest code path due to memory layout of the coordinates...
a simple class to control print indentation
Definition: vtkIndent.h:39
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 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.
Interface class for querying and using OpenGL extensions.
virtual void SetPointSize(float size)=0
Set the point size for glyphs/sprites.
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...
virtual void GetMatrix(vtkMatrix3x3 *m)=0
Set the model view matrix for the display.
virtual void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
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).
virtual void DrawLines(float *f, int n, unsigned char *colors=0, int nc_comps=0)=0
Draw lines using the points - memory layout is as follows: l1p1,l1p2,l2p1,l2p2... ...
virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n, unsigned char *colors=0, int nc_comps=0)=0
Draw a series of point sprites, images centred at the points supplied.
String class that stores Unicode text.
The ShaderProgram uses one or more Shader objects.