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 
30 #ifndef vtkOpenGLContextDevice2D_h
31 #define vtkOpenGLContextDevice2D_h
32 
33 #include "vtkRenderingContextOpenGL2Module.h" // For export macro
34 #include "vtkContextDevice2D.h"
35 
36 #include <vector> // STL Header
37 #include <list> // for std::list
38 
39 class vtkMatrix4x4;
41 class vtkOpenGLHelper;
43 class vtkPath;
44 class vtkRenderer;
45 class vtkShaderProgram;
46 class vtkStringToImage;
47 class vtkTransform;
48 class vtkViewport;
49 class vtkWindow;
50 
51 class VTKRENDERINGCONTEXTOPENGL2_EXPORT vtkOpenGLContextDevice2D : public vtkContextDevice2D
52 {
53 public:
55  virtual void PrintSelf(ostream &os, vtkIndent indent);
56 
60  static vtkOpenGLContextDevice2D *New();
61 
67  virtual void DrawPoly(float *f, int n, unsigned char *colors = 0,
68  int nc_comps = 0);
69 
76  virtual void DrawLines(float *f, int n, unsigned char *colors = 0,
77  int nc_comps = 0);
78 
84  virtual void DrawPoints(float *points, int n, unsigned char* colors = 0,
85  int nc_comps = 0);
86 
93  virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n,
94  unsigned char* colors = 0, int nc_comps = 0);
95 
107  virtual void DrawMarkers(int shape, bool highlight, float *points, int n,
108  unsigned char *colors = 0, int nc_comps = 0);
109 
111 
116  vtkSetMacro(MaximumMarkerCacheSize, int)
117  vtkGetMacro(MaximumMarkerCacheSize, int)
119 
123  virtual void DrawQuad(float *points, int n);
124 
128  virtual void DrawQuadStrip(float *points, int n);
129 
133  virtual void DrawPolygon(float *, int);
134 
146  virtual void DrawEllipseWedge(float x, float y, float outRx, float outRy,
147  float inRx, float inRy, float startAngle,
148  float stopAngle);
149 
156  virtual void DrawEllipticArc(float x, float y, float rX, float rY,
157  float startAngle, float stopAngle);
158 
159 
163  virtual void DrawString(float *point, const vtkStdString &string);
164 
173  virtual void ComputeStringBounds(const vtkStdString &string,
174  float bounds[4]);
175 
179  virtual void DrawString(float *point, const vtkUnicodeString &string);
180 
189  virtual void ComputeStringBounds(const vtkUnicodeString &string,
190  float bounds[4]);
191 
197  virtual void ComputeJustifiedStringBounds(const char* string, float bounds[4]);
198 
203  virtual void DrawMathTextString(float point[2], const vtkStdString &string);
204 
209  virtual void DrawImage(float p[2], float scale, vtkImageData *image);
210 
216  void DrawImage(const vtkRectf& pos, vtkImageData *image);
217 
221  virtual void SetColor4(unsigned char color[4]);
222 
226  virtual void SetColor(unsigned char color[3]);
227 
231  virtual void SetTexture(vtkImageData* image, int properties = 0);
232 
236  virtual void SetPointSize(float size);
237 
241  virtual void SetLineWidth(float width);
242 
246  virtual void SetLineType(int type);
247 
251  virtual void MultiplyMatrix(vtkMatrix3x3 *m);
252 
256  virtual void SetMatrix(vtkMatrix3x3 *m);
257 
261  virtual void GetMatrix(vtkMatrix3x3 *m);
262 
266  virtual void PushMatrix();
267 
271  virtual void PopMatrix();
272 
277  virtual void SetClipping(int *x);
278 
282  virtual void EnableClipping(bool enable);
283 
287  virtual void Begin(vtkViewport* viewport);
288 
292  virtual void End();
293 
301  virtual void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId);
302 
310  virtual void BufferIdModeEnd();
311 
317  bool SetStringRendererToFreeType();
318 
323  bool SetStringRendererToQt();
324 
328  bool HasGLSL();
329 
331 
334  vtkGetObjectMacro(RenderWindow, vtkOpenGLRenderWindow);
336 
342  virtual void ReleaseGraphicsResources(vtkWindow *window);
343 
345 
348  vtkMatrix4x4 *GetProjectionMatrix();
349  vtkMatrix4x4 *GetModelMatrix();
351 
352 protected:
354  virtual ~vtkOpenGLContextDevice2D();
355 
363  int GetNumberOfArcIterations(float rX,
364  float rY,
365  float startAngle,
366  float stopAngle);
367 
371  int Geometry[2];
372 
376  vtkRenderer *Renderer;
377 
381  vtkStringToImage *TextRenderer;
382 
386  bool InRender;
387 
389 
392  class Private;
393  Private *Storage;
395 
399  vtkOpenGLRenderWindow* RenderWindow;
400 
401  vtkOpenGLHelper *LinesCBO; // vertex + color
402  void ReadyLinesCBOProgram();
404  void ReadyLinesBOProgram();
405  vtkOpenGLHelper *VCBO; // vertex + color
406  void ReadyVCBOProgram();
407  vtkOpenGLHelper *VBO; // vertex
408  void ReadyVBOProgram();
409  vtkOpenGLHelper *VTBO; // vertex + tcoord
410  void ReadyVTBOProgram();
411  vtkOpenGLHelper *SCBO; // sprite + color
412  void ReadySCBOProgram();
413  vtkOpenGLHelper *SBO; // sprite
414  void ReadySBOProgram();
415 
416  void SetMatrices(vtkShaderProgram *prog);
417  void BuildVBO(vtkOpenGLHelper *cbo,
418  float *v, int nv,
419  unsigned char *coolors, int nc,
420  float *tcoords);
421  void CoreDrawTriangles(std::vector<float> &tverts);
422 
423  // used for stipples
424  unsigned short LinePattern;
425 
427 
431  void DrawMarkersGL2PS(int shape, bool highlight, float *points, int n,
432  unsigned char *colors, int nc_comps);
433  void DrawCrossMarkersGL2PS(bool highlight, float *points, int n,
434  unsigned char *colors, int nc_comps);
435  void DrawPlusMarkersGL2PS(bool highlight, float *points, int n,
436  unsigned char *colors, int nc_comps);
437  void DrawSquareMarkersGL2PS(bool highlight, float *points, int n,
438  unsigned char *colors, int nc_comps);
439  void DrawCircleMarkersGL2PS(bool highlight, float *points, int n,
440  unsigned char *colors, int nc_comps);
441  void DrawDiamondMarkersGL2PS(bool highlight, float *points, int n,
442  unsigned char *colors, int nc_comps);
444 
446 
449  void DrawImageGL2PS(float p[2], vtkImageData *image);
450  void DrawImageGL2PS(float p[2], float scale, vtkImageData *image);
451  void DrawImageGL2PS(const vtkRectf &rect, vtkImageData *image);
453 
455 
458  void DrawCircleGL2PS(float x, float y, float rX, float rY);
459  void DrawWedgeGL2PS(float x, float y, float outRx, float outRy,
460  float inRx, float inRy);
462 
466  void DrawMathTextStringGL2PS(float point[2], const vtkStdString &string);
467 
471  void AddEllipseToPath(vtkPath *path, float x, float y, float rx, float ry,
472  bool reverse);
473 
477  void TransformPath(vtkPath *path) const;
478 
482  void TransformPoint(float &x, float &y) const;
483 
487  void TransformSize(float &dx, float &dy) const;
488 
489 private:
490  vtkOpenGLContextDevice2D(const vtkOpenGLContextDevice2D &) VTK_DELETE_FUNCTION;
491  void operator=(const vtkOpenGLContextDevice2D &) VTK_DELETE_FUNCTION;
492 
493  void AlignText(double orientation, float width, float height, float *p);
494 
501  vtkImageData *GetMarker(int shape, int size, bool highlight);
502 
503  class vtkMarkerCacheObject
504  {
505  public:
506  vtkTypeUInt64 Key;
507  vtkImageData *Value;
508  bool operator==(vtkTypeUInt64 key)
509  {
510  return this->Key == key;
511  }
512  };
513 
514  vtkTransform *ProjectionMatrix;
515  vtkTransform *ModelMatrix;
516 
517  std::list<vtkMarkerCacheObject> MarkerCache;
518  int MaximumMarkerCacheSize;
519 
524  vtkImageData * GenerateMarker(int shape, int size, bool highlight);
525 
526 };
527 
528 #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.