VTK
dox/Charts/vtkContext2D.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkContext2D.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 
00032 #ifndef __vtkContext2D_h
00033 #define __vtkContext2D_h
00034 
00035 #include "vtkObject.h"
00036 
00037 class vtkWindow;
00038 
00039 class vtkStdString;
00040 class vtkUnicodeString;
00041 class vtkTextProperty;
00042 
00043 class vtkPoints2D;
00044 class vtkVector2f;
00045 class vtkRectf;
00046 class vtkUnsignedCharArray;
00047 class vtkContextDevice2D;
00048 class vtkPen;
00049 class vtkBrush;
00050 class vtkImageData;
00051 class vtkTransform2D;
00052 class vtkAbstractContextBufferId;
00053 
00054 class VTK_CHARTS_EXPORT vtkContext2D : public vtkObject
00055 {
00056 public:
00057   vtkTypeMacro(vtkContext2D, vtkObject);
00058   virtual void PrintSelf(ostream &os, vtkIndent indent);
00059 
00061   static vtkContext2D *New();
00062 
00063 //BTX
00067   bool Begin(vtkContextDevice2D *device);
00068 
00069   vtkGetObjectMacro(Device, vtkContextDevice2D);
00070 
00074   bool End();
00075 
00078   bool GetBufferIdMode() const;
00079 
00082   void BufferIdModeBegin(vtkAbstractContextBufferId *bufferId);
00083 
00087   void BufferIdModeEnd();
00088 
00090   void DrawLine(float x1, float y1, float x2, float y2);
00091 
00093   void DrawLine(float p[4]);
00094 
00097   void DrawLine(vtkPoints2D *points);
00098 
00100   void DrawPoly(float *x, float *y, int n);
00101 
00104   void DrawPoly(vtkPoints2D *points);
00105 
00109   void DrawPoly(float *points, int n);
00110 
00112 
00117   void DrawPoly(float *points, int n,
00118                 unsigned char *colors, int nc_comps);
00120 
00122   void DrawPoint(float x, float y);
00123 
00125   void DrawPoints(float *x, float *y, int n);
00126 
00129   void DrawPoints(vtkPoints2D *points);
00130 
00134   void DrawPoints(float *points, int n);
00135 
00139   void DrawPointSprites(vtkImageData *sprite, vtkPoints2D *points);
00140 
00142 
00147   void DrawPointSprites(vtkImageData *sprite, vtkPoints2D *points,
00148                         vtkUnsignedCharArray *colors);
00149   void DrawPointSprites(vtkImageData *sprite, float *points, int n,
00150                         unsigned char *colors, int nc_comps);
00152 
00156   void DrawPointSprites(vtkImageData *sprite, float *points, int n);
00157 
00159   void DrawRect(float x, float y, float w, float h);
00160 
00162 
00164   void DrawQuad(float x1, float y1, float x2, float y2,
00165                 float x3, float y3, float x4, float y4);
00166   void DrawQuad(float *p);
00168 
00170 
00171   void DrawQuadStrip(vtkPoints2D *points);
00172   void DrawQuadStrip(float *p, int n);
00174 
00177   void DrawPolygon(float *x, float *y, int n);
00178 
00181   void DrawPolygon(vtkPoints2D *points);
00182 
00186   void DrawPolygon(float *points, int n);
00187 
00190   void DrawEllipse(float x, float y, float rx, float ry);
00191 
00193 
00198   void DrawWedge(float x, float y, float outRadius,
00199                  float inRadius,float startAngle,
00200                  float stopAngle);
00202 
00204 
00210   void DrawEllipseWedge(float x, float y, float outRx, float outRy,
00211                         float inRx, float inRy, float startAngle,
00212                         float stopAngle);
00214 
00215 
00217 
00220   void DrawArc(float x, float y, float r, float startAngle,
00221                float stopAngle);
00223 
00225 
00228   void DrawEllipticArc(float x, float y, float rX, float rY, float startAngle,
00229                        float stopAngle);
00231 
00232 
00234   void DrawImage(float x, float y, vtkImageData *image);
00235 
00238   void DrawImage(float x, float y, float scale, vtkImageData *image);
00239 
00243   void DrawImage(const vtkRectf& pos, vtkImageData *image);
00244 
00246 
00249   void DrawStringRect(vtkPoints2D *rect, const vtkStdString &string);
00250   void DrawStringRect(vtkPoints2D *rect, const vtkUnicodeString &string);
00251   void DrawStringRect(vtkPoints2D *rect, const char* string);
00253 
00255 
00256   void DrawString(vtkPoints2D *point, const vtkStdString &string);
00257   void DrawString(float x, float y, const vtkStdString &string);
00258   void DrawString(vtkPoints2D *point, const vtkUnicodeString &string);
00259   void DrawString(float x, float y, const vtkUnicodeString &string);
00260   void DrawString(vtkPoints2D *point, const char* string);
00261   void DrawString(float x, float y, const char* string);
00263 
00265 
00270   void ComputeStringBounds(const vtkStdString &string, vtkPoints2D *bounds);
00271   void ComputeStringBounds(const vtkStdString &string, float bounds[4]);
00272   void ComputeStringBounds(const vtkUnicodeString &string, vtkPoints2D *bounds);
00273   void ComputeStringBounds(const vtkUnicodeString &string, float bounds[4]);
00274   void ComputeStringBounds(const char* string, vtkPoints2D *bounds);
00275   void ComputeStringBounds(const char* string, float bounds[4]);
00277 
00282   void ApplyPen(vtkPen *pen);
00283 
00287   vtkPen* GetPen();
00288 
00293   void ApplyBrush(vtkBrush *brush);
00294 
00297   vtkBrush* GetBrush();
00298 
00302   void ApplyTextProp(vtkTextProperty *prop);
00303 
00305   vtkTextProperty* GetTextProp();
00306 
00310   void SetTransform(vtkTransform2D *transform);
00311 
00313   vtkTransform2D* GetTransform();
00314 
00319   void AppendTransform(vtkTransform2D *transform);
00320 
00322 
00324   void PushMatrix();
00325   void PopMatrix();
00327 
00329   void ApplyId(vtkIdType id);
00330 
00334   static int FloatToInt(float x);
00335 
00336 //BTX
00337 protected:
00338   vtkContext2D();
00339   ~vtkContext2D();
00340 
00341   vtkContextDevice2D *Device; // The underlying device
00342   vtkTransform2D *Transform;  // Current transform
00343 
00344   vtkAbstractContextBufferId *BufferId;
00345 
00346 private:
00347   vtkContext2D(const vtkContext2D &); // Not implemented.
00348   void operator=(const vtkContext2D &);   // Not implemented.
00349 
00351   vtkVector2f CalculateTextPosition(vtkPoints2D* rect);
00352 
00353 //ETX
00354 };
00355 
00356 inline int vtkContext2D::FloatToInt(float x)
00357 {
00358   // Use a tolerance of 1/256 of a pixel when converting.
00359   // A float has only 24 bits of precision, so we cannot
00360   // make the tolerance too small.  For example, a tolerance
00361   // of 2^-8 means that the tolerance will be significant
00362   // for float values up to 2^16 or 65536.0.  But a
00363   // tolerance of 2^-16 would only be significant for
00364   // float values up to 2^8 or 256.0.  A small tolerance
00365   // disappears into insignificance when added to a large float.
00366   float tol = 0.00390625; // 1.0/256.0
00367   tol = (x >= 0 ? tol : -tol);
00368   return static_cast<int>(x + tol);
00369 }
00370 
00371 #endif //__vtkContext2D_h