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;
40 class vtkOpenGLExtensionManager;
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  void PrintSelf(ostream &os, vtkIndent indent) override;
56 
60  static vtkOpenGLContextDevice2D *New();
61 
67  void DrawPoly(float *f, int n, unsigned char *colors = nullptr,
68  int nc_comps = 0) override;
69 
76  void DrawLines(float *f, int n, unsigned char *colors = nullptr,
77  int nc_comps = 0) override;
78 
84  void DrawPoints(float *points, int n, unsigned char* colors = nullptr,
85  int nc_comps = 0) override;
86 
93  void DrawPointSprites(vtkImageData *sprite, float *points, int n,
94  unsigned char* colors = nullptr, int nc_comps = 0) override;
95 
107  void DrawMarkers(int shape, bool highlight, float *points, int n,
108  unsigned char *colors = nullptr, int nc_comps = 0) override;
109 
111 
116  vtkSetMacro(MaximumMarkerCacheSize, int)
117  vtkGetMacro(MaximumMarkerCacheSize, int)
119 
123  void DrawQuad(float *points, int n) override;
124 
128  void DrawQuadStrip(float *points, int n) override;
129 
133  void DrawPolygon(float *, int) override;
134  void DrawColoredPolygon(float *points, int numPoints,
135  unsigned char *colors = nullptr,
136  int nc_comps = 0) override;
137 
149  void DrawEllipseWedge(float x, float y, float outRx, float outRy,
150  float inRx, float inRy, float startAngle,
151  float stopAngle) override;
152 
159  void DrawEllipticArc(float x, float y, float rX, float rY,
160  float startAngle, float stopAngle) override;
161 
162 
166  void DrawString(float *point, const vtkStdString &string) override;
167 
176  void ComputeStringBounds(const vtkStdString &string,
177  float bounds[4]) override;
178 
182  void DrawString(float *point, const vtkUnicodeString &string) override;
183 
192  void ComputeStringBounds(const vtkUnicodeString &string,
193  float bounds[4]) override;
194 
200  void ComputeJustifiedStringBounds(const char* string, float bounds[4]) override;
201 
206  void DrawMathTextString(float point[2], const vtkStdString &string) override;
207 
212  void DrawImage(float p[2], float scale, vtkImageData *image) override;
213 
219  void DrawImage(const vtkRectf& pos, vtkImageData *image) override;
220 
225  void DrawPolyData(float p[2], float scale, vtkPolyData* polyData,
226  vtkUnsignedCharArray* colors, int scalarMode) override;
227 
231  void SetColor4(unsigned char color[4]) override;
232 
236  virtual void SetColor(unsigned char color[3]);
237 
241  void SetTexture(vtkImageData* image, int properties = 0) override;
242 
246  void SetPointSize(float size) override;
247 
251  void SetLineWidth(float width) override;
252 
256  void SetLineType(int type) override;
257 
261  void MultiplyMatrix(vtkMatrix3x3 *m) override;
262 
266  void SetMatrix(vtkMatrix3x3 *m) override;
267 
271  void GetMatrix(vtkMatrix3x3 *m) override;
272 
276  void PushMatrix() override;
277 
281  void PopMatrix() override;
282 
287  void SetClipping(int *x) override;
288 
292  void EnableClipping(bool enable) override;
293 
297  void Begin(vtkViewport* viewport) override;
298 
302  void End() override;
303 
311  void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId) override;
312 
320  void BufferIdModeEnd() override;
321 
327  bool SetStringRendererToFreeType();
328 
333  bool SetStringRendererToQt();
334 
338  bool HasGLSL();
339 
341 
344  vtkGetObjectMacro(RenderWindow, vtkOpenGLRenderWindow);
346 
352  virtual void ReleaseGraphicsResources(vtkWindow *window);
353 
355 
358  vtkMatrix4x4 *GetProjectionMatrix();
359  vtkMatrix4x4 *GetModelMatrix();
361 
362 protected:
364  ~vtkOpenGLContextDevice2D() override;
365 
373  int GetNumberOfArcIterations(float rX,
374  float rY,
375  float startAngle,
376  float stopAngle);
377 
382 
386  bool InRender;
387 
389 
392  class Private;
393  Private *Storage;
394 
398 
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, unsigned char* colors = nullptr,
425  int numComp = 0);
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 AddEllipseToPath(vtkPath *path, float x, float y, float rx, float ry,
470  bool reverse);
471 
475  void TransformPath(vtkPath *path) const;
476 
480  void TransformPoint(float &x, float &y) const;
481 
485  void TransformSize(float &dx, float &dy) const;
486 
487 private:
489  void operator=(const vtkOpenGLContextDevice2D &) = delete;
490 
497  vtkImageData *GetMarker(int shape, int size, bool highlight);
498 
499  class vtkMarkerCacheObject
500  {
501  public:
502  vtkTypeUInt64 Key;
503  vtkImageData *Value;
504  bool operator==(vtkTypeUInt64 key)
505  {
506  return this->Key == key;
507  }
508  };
509 
510  void ComputeStringBoundsInternal(const vtkUnicodeString &string,
511  float bounds[4]);
512 
513  vtkTransform *ProjectionMatrix;
514  vtkTransform *ModelMatrix;
515 
516  std::list<vtkMarkerCacheObject> MarkerCache;
517  int MaximumMarkerCacheSize;
518 
523  vtkImageData * GenerateMarker(int shape, int size, bool highlight);
524 
525 };
526 
527 #endif //vtkOpenGLContextDevice2D_h
OpenGL rendering window.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:34
virtual void SetMatrix(vtkMatrix3x3 *m)=0
Set the model view matrix for the display.
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:35
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.
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:32
abstract specification for Viewports
Definition: vtkViewport.h:44
virtual void DrawPolygon(float *p, int n)
Draw a polygon using the specified number of points.
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:57
static vtkContextDevice2D * New()
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
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.
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.
bool InRender
Is the device currently rendering? Prevent multiple End() calls.
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 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.
vtkOpenGLRenderWindow * RenderWindow
The OpenGL render window being used by the device.
a simple class to control print indentation
Definition: vtkIndent.h:33
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:39
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.
virtual void SetPointSize(float size)=0
Set the point size for glyphs/sprites.
dynamic, self-adjusting array of unsigned char
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 DrawColoredPolygon(float *points, int numPoints, unsigned char *colors=nullptr, int nc_comps=0)
Draw a polygon using the specified number of points.
vtkRenderer * Renderer
We need to store a pointer to the renderer for the text rendering.
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:33
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.
The ShaderProgram uses one or more Shader objects.