VTK
dox/Hybrid/vtkPolarAxesActor.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkCubeAxesActor.h
00005   Language:  C++
00006 
00007 Copyright (c) 1993-2001 Ken Martin, Will Schroeder, Bill Lorensen
00008 All rights reserve
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00013      PURPOSE.  See the above copyright notice for more information.
00014 =========================================================================*/
00040 #ifndef __vtkPolarAxesActor_h
00041 #define __vtkPolarAxesActor_h
00042 
00043 #define VTK_MAXIMUM_NUMBER_OF_RADIAL_AXES 50
00044 #define VTK_DEFAULT_NUMBER_OF_RADIAL_AXES 5
00045 #define VTK_MAXIMUM_NUMBER_OF_POLAR_AXIS_TICKS 200
00046 #define VTK_POLAR_ARC_RESOLUTION_PER_DEG 0.2
00047 
00048 #include "vtkActor.h"
00049 
00050 class vtkAxisActor;
00051 class vtkCamera;
00052 class vtkPolyData;
00053 class vtkPolyDataMapper;
00054 class vtkTextProperty;
00055 
00056 class VTK_HYBRID_EXPORT vtkPolarAxesActor : public vtkActor
00057 {
00058 public:
00059   vtkTypeMacro(vtkPolarAxesActor,vtkActor);
00060   void PrintSelf(ostream& os, vtkIndent indent);
00061 
00064   static vtkPolarAxesActor *New();
00065 
00067 
00068   virtual int RenderOpaqueGeometry(vtkViewport*);
00069   virtual int RenderTranslucentPolygonalGeometry(vtkViewport*) {return 0;};
00071 
00073 
00074   virtual void SetPole( double[3] );
00075   virtual void SetPole( double, double, double );
00076   vtkGetVector3Macro( Pole, double );
00078 
00080 
00081   virtual void SetNumberOfRadialAxes( vtkIdType );
00082   vtkGetMacro( NumberOfRadialAxes, vtkIdType );
00084 
00086 
00088   vtkSetClampMacro( NumberOfPolarAxisTicks, vtkIdType, 0, VTK_MAXIMUM_NUMBER_OF_POLAR_AXIS_TICKS );
00089   vtkGetMacro( NumberOfPolarAxisTicks, vtkIdType );
00091 
00093 
00095   vtkSetMacro( AutoSubdividePolarAxis, bool );
00096   vtkGetMacro( AutoSubdividePolarAxis, bool );
00097   vtkBooleanMacro( AutoSubdividePolarAxis, bool );
00099 
00101 
00102   virtual void SetMaximumRadius( double );
00103   vtkGetMacro( MaximumRadius, double );
00105 
00107 
00109   vtkSetMacro( AutoScaleRadius,bool );
00110   vtkGetMacro( AutoScaleRadius,bool );
00112 
00114 
00115   virtual void SetMinimumAngle( double );
00116   vtkGetMacro( MinimumAngle, double );
00118 
00120 
00121   virtual void SetMaximumAngle( double );
00122   vtkGetMacro( MaximumAngle, double );
00124 
00126 
00128   vtkSetClampMacro( SmallestVisiblePolarAngle, double, 0., 5. );
00129   vtkGetMacro( SmallestVisiblePolarAngle, double );
00131 
00133 
00134   vtkSetMacro( RadialUnits, bool ); 
00135   vtkGetMacro( RadialUnits, bool );
00137 
00139 
00142   void SetScreenSize( double screenSize );
00143   vtkGetMacro( ScreenSize, double );
00145 
00147 
00149   virtual void SetCamera(vtkCamera*);
00150   vtkGetObjectMacro( Camera,vtkCamera );
00152 
00154 
00155   vtkSetStringMacro( PolarAxisTitle );
00156   vtkGetStringMacro( PolarAxisTitle );
00158 
00160 
00161   vtkSetStringMacro( PolarLabelFormat );
00162   vtkGetStringMacro( PolarLabelFormat );
00164 
00168   void ReleaseGraphicsResources( vtkWindow* );
00169 
00171 
00173   vtkSetMacro( EnableDistanceLOD, int );
00174   vtkGetMacro( EnableDistanceLOD, int );
00176   
00178 
00179   vtkSetClampMacro( DistanceLODThreshold, double, 0.0, 1.0 );
00180   vtkGetMacro( DistanceLODThreshold, double);
00182 
00184 
00186   vtkSetMacro( EnableViewAngleLOD, int );
00187   vtkGetMacro( EnableViewAngleLOD, int );
00189   
00191 
00192   vtkSetClampMacro( ViewAngleLODThreshold, double, 0., 1. );
00193   vtkGetMacro( ViewAngleLODThreshold, double );
00195 
00197 
00198   vtkSetMacro( PolarAxisVisibility, int );
00199   vtkGetMacro( PolarAxisVisibility, int );
00200   vtkBooleanMacro( PolarAxisVisibility, int );
00202 
00204 
00205   vtkSetMacro( PolarTitleVisibility, int );
00206   vtkGetMacro( PolarTitleVisibility, int );
00207   vtkBooleanMacro( PolarTitleVisibility, int );
00209 
00211 
00212   vtkSetMacro( PolarLabelVisibility, int );
00213   vtkGetMacro( PolarLabelVisibility, int );
00214   vtkBooleanMacro( PolarLabelVisibility, int );
00216 
00218 
00219   vtkSetMacro( PolarTickVisibility, int );
00220   vtkGetMacro( PolarTickVisibility, int );
00221   vtkBooleanMacro( PolarTickVisibility, int );
00223 
00225 
00226   vtkSetMacro( RadialAxesVisibility, int );
00227   vtkGetMacro( RadialAxesVisibility, int );
00228   vtkBooleanMacro( RadialAxesVisibility, int );
00230 
00232 
00233   vtkSetMacro( RadialTitleVisibility, int );
00234   vtkGetMacro( RadialTitleVisibility, int );
00235   vtkBooleanMacro( RadialTitleVisibility, int );
00237 
00239 
00240   vtkSetMacro( PolarArcsVisibility, int );
00241   vtkGetMacro( PolarArcsVisibility, int );
00242   vtkBooleanMacro( PolarArcsVisibility, int );
00244 
00246 
00247   virtual void SetPolarAxisTitleTextProperty(vtkTextProperty *p);
00248   vtkGetObjectMacro(PolarAxisTitleTextProperty,vtkTextProperty);
00250 
00252 
00253   virtual void SetPolarAxisLabelTextProperty(vtkTextProperty *p);
00254   vtkGetObjectMacro(PolarAxisLabelTextProperty,vtkTextProperty);
00256   
00258 
00259   virtual void SetPolarAxisProperty(vtkProperty *);
00260   vtkProperty* GetPolarAxisProperty();
00262 
00264 
00265   virtual void SetRadialAxesProperty(vtkProperty *);
00266   vtkProperty* GetRadialAxesProperty();
00268 
00270 
00271   virtual void SetPolarArcsProperty(vtkProperty *);
00272   vtkProperty* GetPolarArcsProperty();
00274 
00276 
00280   vtkSetVector6Macro(Bounds,double);
00281   double *GetBounds();
00282   void GetBounds(double& xmin, double& xmax, double& ymin, double& ymax,
00283                  double& zmin, double& zmax);
00284   void GetBounds(double bounds[6]);
00286 
00287 protected:
00288   vtkPolarAxesActor();
00289   ~vtkPolarAxesActor();
00290 
00292   void BuildAxes( vtkViewport * );
00293 
00295   void CalculateBounds();
00296 
00298   void SetCommonAxisAttributes( vtkAxisActor* );
00299 
00301   void CreateRadialAxes();
00302 
00304   void BuildRadialAxes();
00305 
00307   void BuildPolarAxisTicks( double );
00308 
00310   void BuildPolarAxisLabelsArcs();
00311 
00313 
00314   double FFix(double );
00315   double FSign(double, double );
00317 
00320   void AutoScale( vtkViewport* viewport );
00321 
00323   double Pole[3]; 
00324 
00326   int NumberOfRadialAxes;
00327 
00329   int NumberOfPolarAxisTicks;
00330 
00333   bool AutoSubdividePolarAxis;
00334 
00336   double MaximumRadius;
00337 
00340   bool AutoScaleRadius;
00341 
00343   double MinimumAngle;
00344 
00346   double MaximumAngle;
00347 
00349   double SmallestVisiblePolarAngle;
00350 
00352   double Bounds[6];
00353 
00355 
00356   vtkPolyData        *PolarArcs;
00357   vtkPolyDataMapper  *PolarArcsMapper;
00358   vtkActor           *PolarArcsActor;
00360 
00362   vtkCamera *Camera;
00363 
00365   vtkAxisActor* PolarAxis;
00366 
00368   vtkAxisActor** RadialAxes;
00369 
00371 
00373   char *PolarAxisTitle;
00374   char  *PolarLabelFormat;
00376 
00378   bool RadialUnits;
00379 
00382   int EnableDistanceLOD;
00383 
00386   double DistanceLODThreshold;
00387 
00390   int EnableViewAngleLOD;
00391 
00394   double ViewAngleLODThreshold;
00395 
00397 
00398   int PolarAxisVisibility;
00399   int PolarTitleVisibility;
00400   int PolarLabelVisibility;
00401   int PolarTickVisibility;
00403 
00405 
00406   int RadialAxesVisibility;
00407   int RadialTitleVisibility;
00409 
00411   int PolarArcsVisibility;
00412 
00413   int   RenderCount;
00414 
00415   int RenderSomething;
00416 
00418 
00419   vtkTextProperty   *PolarAxisTitleTextProperty;
00420   vtkTextProperty   *PolarAxisLabelTextProperty;
00422 
00424   vtkProperty* PolarAxisProperty;
00425 
00427   vtkProperty* RadialAxesProperty;
00428 
00429   vtkTimeStamp BuildTime;
00430 
00432   double TitleScale;
00433 
00435   double LabelScale;
00436 
00438   double LabelScreenOffset;
00439 
00441   double ScreenSize;
00442 
00443 private:
00444   vtkPolarAxesActor( const vtkPolarAxesActor& ); // Not implemented
00445   void operator=( const vtkPolarAxesActor& ); // Not implemented
00446 };
00447 
00448 
00449 #endif