User:Marcus.hanwell: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
mNo edit summary
mNo edit summary
 
Line 1: Line 1:
== 2D API ==
== 2D API ==


The 2D API is currently made of of two levels, a concreate class called vtk2DPainter that is called by the paint functions of components operating within the 2D API, and a vtk2DPaintDevice which is called by the vtk2DPainter to actually draw to a context. The vtk2DPainter contains a pointer to the derived class of the vtk2DPaintDevice to do low level painting. This is the class that must be implemented for a new backend to be supported. The vtk2DPainter builds up more complex 2D constructs on top of the basic constructs implemented in the device.


<graphviz renderer='neato' caption='2D API'>
digraph TWOD {
  node [
    fontsize = 10
    fontname = Helvetica
    shape = record
    height = 0.1
  ]
  edge [
    fontsize = 10
    fontname = Helvetica
  ]
  // Classes
  vtk2DPainter
  vtk2DPaintDevice
  vtk2DGLPaintDevice
  vtk2DQtPaintDevice
  vtk2DCairoPaintDevice
//
// Subclass relationships
//
// A -> B means
// A is the superclass of B
// The notation is a bit counterintuitive but required to obtain
// the desired top-to-bottom layout
edge [
  arrowtail = onormal
  arrowhead = none
]
  vtk2DPaintDevice -> vtk2DGLPaintDevice
  vtk2DPaintDevice -> vtk2DQtPaintDevice
  vtk2DPaintDevice -> vtk2DCairoPaintDevice
//
// "owns the lifetime of"
//
edge [
  arrowtail = diamond
  arrowhead = none
]
//
// "has a pointer to"
//
edge [
  arrowtail = odiamond
  arrowhead = none
]
  vtk2DPainter -> vtk2DPaintDevice
}
</graphviz>
The class relationship diagram is shown above. The headers for the two classes look as follows.
<source lang="cpp">
class VTK_CHARTS_EXPORT vtk2DPainter : public vtkObject
{
public:
  vtkTypeRevisionMacro(vtk2DPainter, vtkObject);
  virtual void PrintSelf(ostream &os, vtkIndent indent);
  static vtk2DPainter *New();
 
  bool Begin(vtk2DPaintDevice *device);
  bool End();
  // Line drawing functions
  void DrawLine(float x1, float y1, float x2, float y2);
  void DrawLine(vtkPoints2D *points);
  void DrawPoly(float *x, float *y, int n);
  void DrawPoly(vtkPoints2D *points);
  void DrawRectangle(float x, float y, float width, float height);
  void DrawRectangle(float *p);
  void DrawRectangle(vtkPoints2D *points);
  // Point drawing functions
  void DrawPoint(float x, float y);
  void DrawPoints(float *x, float *y, int n);
  void DrawPoints(vtkPoints2D *points);
  // Manage the state of the painter
  void SetColor(int r, int g, int b, int a);
  void SetPointSize(float size);
  void SetLineWidth(float width);
protected:
  vtk2DPainter();
  ~vtk2DPainter();
};
</source>
While the vtk2DPaintDevice header for the equivalent primitives is,
<source lang="cpp">
class VTK_CHARTS_EXPORT vtk2DPaintDevice : public vtkObject
{
public:
  vtkTypeRevisionMacro(vtk2DPaintDevice, vtkObject);
  virtual void PrintSelf(ostream &os, vtkIndent indent);
  static vtk2DPaintDevice *New();
 
  // Set up the paint device context
  virtual void Begin(vtkRenderer* renderer) { }
 
  // Clean anything up once rendering has been completed
  virtual void End() { }
  // Line drawing functions
  virtual void DrawPoly(vtkPoints2D *points) = 0;
  // Point drawing functions
  virtual void DrawPoints(vtkPoints2D *points) = 0;
  // Manage the state of the painter
  void SetColor(int r, int g, int b, int a);
  void SetPointSize(float size);
  void SetLineWidth(float width);
protected:
  vtk2DPaintDevice();
  ~vtk2DPaintDevice();
};
</source>


<graphviz renderer='neato' caption='Chart Classes'>
<graphviz renderer='neato' caption='Chart Classes'>

Latest revision as of 17:29, 21 October 2009

2D API

Chart Classes