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
42class vtkMatrix4x4;
44class vtkOpenGLHelper;
46class vtkPath;
47class vtkRenderer;
50class vtkTransform;
51class vtkViewport;
52class vtkWindow;
53
54class VTKRENDERINGCONTEXTOPENGL2_EXPORT vtkOpenGLContextDevice2D : public vtkContextDevice2D
55{
56public:
58 virtual void PrintSelf(ostream &os, vtkIndent indent);
59
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
355protected:
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();
406 vtkOpenGLHelper *LinesBO; // vertex
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
492private:
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
2D array of ids, used for picking.
Abstract class for drawing 2D primitives.
topologically and geometrically regular array of data
Definition: vtkImageData.h:46
a simple class to control print indentation
Definition: vtkIndent.h:40
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:37
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:42
Class for drawing 2D primitives using OpenGL 1.1+.
static vtkOpenGLContextDevice2D * New()
Creates a 2D Painter object.
virtual void DrawPoints(float *points, int n, unsigned char *colors=0, int nc_comps=0)
Draw a series of points - fastest code path due to memory layout of the coordinates.
virtual void DrawPoly(float *f, int n, unsigned char *colors=0, int nc_comps=0)
Draw a poly line using the points - fastest code path due to memory layout of the coordinates.
virtual void DrawPointSprites(vtkImageData *sprite, float *points, int n, unsigned char *colors=0, int nc_comps=0)
Draw a series of point sprites, images centred at the points supplied.
virtual void DrawLines(float *f, int n, unsigned char *colors=0, int nc_comps=0)
Draw lines using the points - memory layout is as follows: l1p1,l1p2,l2p1,l2p2... The lines will be c...
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.
virtual void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
Interface class for querying and using OpenGL extensions.
OpenGL rendering window.
concrete dataset representing a path defined by Bezier curves.
Definition: vtkPath.h:36
abstract specification for renderers
Definition: vtkRenderer.h:64
The ShaderProgram uses one or more Shader objects.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:49
base class for classes that render supplied text to an image.
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:61
String class that stores Unicode text.
abstract specification for Viewports
Definition: vtkViewport.h:48
window superclass for vtkRenderWindow
Definition: vtkWindow.h:35
@ point
Definition: vtkX3D.h:236
@ key
Definition: vtkX3D.h:257
@ points
Definition: vtkX3D.h:446
@ vector
Definition: vtkX3D.h:237
@ orientation
Definition: vtkX3D.h:262
@ startAngle
Definition: vtkX3D.h:486
@ scale
Definition: vtkX3D.h:229
@ type
Definition: vtkX3D.h:516
@ color
Definition: vtkX3D.h:221
@ height
Definition: vtkX3D.h:254
@ image
Definition: vtkX3D.h:374
@ size
Definition: vtkX3D.h:253
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
VTKCOMMONCORE_EXPORT bool operator==(const vtkUnicodeString &lhs, const vtkUnicodeString &rhs)