VTK
|
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