VTK
dox/Hybrid/vtkAxisActor.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkAxisActor.h
00005   Language:  C++
00006 
00007 Copyright (c) 1993-2000 Ken Martin, Will Schroeder, Bill Lorensen
00008 All rights reserved.
00009      This software is distributed WITHOUT ANY WARRANTY; without even
00010      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00011      PURPOSE.  See the above copyright notice for more information.
00012 =========================================================================*/
00051 #ifndef __vtkAxisActor_h
00052 #define __vtkAxisActor_h
00053 
00054 #include "vtkActor.h"
00055 
00056 #define VTK_MAX_LABELS    200
00057 #define VTK_MAX_TICKS     1000
00058 
00059 #define VTK_AXIS_TYPE_X   0
00060 #define VTK_AXIS_TYPE_Y   1
00061 #define VTK_AXIS_TYPE_Z   2
00062 
00063 #define VTK_TICKS_INSIDE  0
00064 #define VTK_TICKS_OUTSIDE 1
00065 #define VTK_TICKS_BOTH    2
00066 
00067 #define VTK_AXIS_POS_MINMIN 0
00068 #define VTK_AXIS_POS_MINMAX 1
00069 #define VTK_AXIS_POS_MAXMAX 2
00070 #define VTK_AXIS_POS_MAXMIN 3
00071 
00072 // ****************************************************************************
00073 //  Modifications:
00074 //    Kathleen Bonnell, Tue Aug 31 16:17:43 PDT 2004
00075 //    Added TitleTextTime timestamp, so that title can be updated appropriately
00076 //    when its text changes.  Changed Titles Set macro for a user-defined
00077 //    set so TitleTextTime can be updated.
00078 //
00079 // ****************************************************************************
00080 
00081 class vtkCamera;
00082 class vtkCoordinate;
00083 class vtkFollower;
00084 class vtkPoints;
00085 class vtkPolyData;
00086 class vtkPolyDataMapper;
00087 class vtkStringArray;
00088 class vtkVectorText;
00089 
00090 class VTK_HYBRID_EXPORT vtkAxisActor : public vtkActor
00091 {
00092 public:
00093   vtkTypeMacro(vtkAxisActor,vtkActor);
00094   void PrintSelf(ostream& os, vtkIndent indent);
00095 
00097   static vtkAxisActor *New();
00098 
00100 
00101   virtual vtkCoordinate *GetPoint1Coordinate();
00102   virtual void SetPoint1(double x[3])
00103     { this->SetPoint1(x[0], x[1], x[2]); }
00104   virtual void SetPoint1(double x, double y, double z);
00105   virtual double *GetPoint1();
00107 
00109 
00110   virtual vtkCoordinate *GetPoint2Coordinate();
00111   virtual void SetPoint2(double x[3])
00112     { this->SetPoint2(x[0], x[1], x[2]); }
00113   virtual void SetPoint2(double x, double y, double z);
00114   virtual double *GetPoint2();
00116 
00118 
00120   vtkSetVector2Macro(Range,double);
00121   vtkGetVectorMacro(Range,double,2);
00123 
00125 
00127   void   SetBounds(double bounds[6]);
00128   void   SetBounds(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);
00129   double *GetBounds(void);
00130   void   GetBounds(double bounds[6]);
00132 
00134 
00135   vtkSetStringMacro(LabelFormat);
00136   vtkGetStringMacro(LabelFormat);
00138 
00140 
00141   vtkSetMacro(MinorTicksVisible, int);
00142   vtkGetMacro(MinorTicksVisible, int);
00143   vtkBooleanMacro(MinorTicksVisible, int);
00145 
00146 
00148 
00149   void SetTitle(const char *t);
00150   vtkGetStringMacro(Title);
00152 
00154 
00155   vtkSetMacro(MajorTickSize, double);
00156   vtkGetMacro(MajorTickSize, double);
00158 
00160 
00161   vtkSetMacro(MinorTickSize, double);
00162   vtkGetMacro(MinorTickSize, double);
00164 
00166 
00167   vtkSetClampMacro(TickLocation, int, VTK_TICKS_INSIDE, VTK_TICKS_BOTH);
00168   vtkGetMacro(TickLocation, int);
00170 
00171   void SetTickLocationToInside(void)
00172     { this->SetTickLocation(VTK_TICKS_INSIDE); };
00173   void SetTickLocationToOutside(void)
00174     { this->SetTickLocation(VTK_TICKS_OUTSIDE); };
00175   void SetTickLocationToBoth(void)
00176     { this->SetTickLocation(VTK_TICKS_BOTH); };
00177 
00179 
00180   vtkSetMacro(AxisVisibility, int);
00181   vtkGetMacro(AxisVisibility, int);
00182   vtkBooleanMacro(AxisVisibility, int);
00184 
00186 
00187   vtkSetMacro(TickVisibility, int);
00188   vtkGetMacro(TickVisibility, int);
00189   vtkBooleanMacro(TickVisibility, int);
00191 
00193 
00194   vtkSetMacro(LabelVisibility, int);
00195   vtkGetMacro(LabelVisibility, int);
00196   vtkBooleanMacro(LabelVisibility, int);
00198 
00200 
00201   vtkSetMacro(TitleVisibility, int);
00202   vtkGetMacro(TitleVisibility, int);
00203   vtkBooleanMacro(TitleVisibility, int);
00205 
00207 
00208   vtkSetMacro(DrawGridlines, int);
00209   vtkGetMacro(DrawGridlines, int);
00210   vtkBooleanMacro(DrawGridlines, int);
00212 
00214 
00215   vtkSetMacro(GridlineXLength, double);
00216   vtkGetMacro(GridlineXLength, double);
00217   vtkSetMacro(GridlineYLength, double);
00218   vtkGetMacro(GridlineYLength, double);
00219   vtkSetMacro(GridlineZLength, double);
00220   vtkGetMacro(GridlineZLength, double);
00222 
00224 
00225   vtkSetClampMacro(AxisType, int, VTK_AXIS_TYPE_X, VTK_AXIS_TYPE_Z);
00226   vtkGetMacro(AxisType, int);
00227   void SetAxisTypeToX(void) { this->SetAxisType(VTK_AXIS_TYPE_X); };
00228   void SetAxisTypeToY(void) { this->SetAxisType(VTK_AXIS_TYPE_Y); };
00229   void SetAxisTypeToZ(void) { this->SetAxisType(VTK_AXIS_TYPE_Z); };
00231 
00233 
00238   vtkSetClampMacro(AxisPosition, int, VTK_AXIS_POS_MINMIN, VTK_AXIS_POS_MAXMIN);
00239   vtkGetMacro(AxisPosition, int);
00241 
00242   void SetAxisPositionToMinMin(void)
00243       { this->SetAxisPosition(VTK_AXIS_POS_MINMIN); };
00244   void SetAxisPositionToMinMax(void)
00245       { this->SetAxisPosition(VTK_AXIS_POS_MINMAX); };
00246   void SetAxisPositionToMaxMax(void)
00247       { this->SetAxisPosition(VTK_AXIS_POS_MAXMAX); };
00248   void SetAxisPositionToMaxMin(void)
00249       { this->SetAxisPosition(VTK_AXIS_POS_MAXMIN); };
00250 
00252 
00254   virtual void SetCamera(vtkCamera*);
00255   vtkGetObjectMacro(Camera, vtkCamera);
00257 
00259 
00260   virtual int RenderOpaqueGeometry(vtkViewport* viewport);
00261   virtual int RenderTranslucentGeometry(vtkViewport *) {return 0;}
00263 
00267   void ReleaseGraphicsResources(vtkWindow *);
00268 
00270   void ShallowCopy(vtkProp *prop);
00271 
00272 //BTX
00273   double ComputeMaxLabelLength(const double [3]);
00274   double ComputeTitleLength(const double [3]);
00275 //ETX
00276   void SetLabelScale(const double);
00277   void SetTitleScale(const double);
00278 
00279 
00281 
00283   vtkSetMacro(MinorStart, double);
00284   vtkGetMacro(MinorStart, double);
00285   vtkSetMacro(MajorStart, double);
00286   vtkGetMacro(MajorStart, double);
00287   vtkSetMacro(DeltaMinor, double);
00288   vtkGetMacro(DeltaMinor, double);
00289   vtkSetMacro(DeltaMajor, double);
00290   vtkGetMacro(DeltaMajor, double);
00292 
00294 
00298   vtkSetMacro(MinorRangeStart, double);
00299   vtkGetMacro(MinorRangeStart, double);
00300   vtkSetMacro(MajorRangeStart, double);
00301   vtkGetMacro(MajorRangeStart, double);
00302   vtkSetMacro(DeltaRangeMinor, double);
00303   vtkGetMacro(DeltaRangeMinor, double);
00304   vtkSetMacro(DeltaRangeMajor, double);
00305   vtkGetMacro(DeltaRangeMajor, double);
00307 
00308 //BTX
00309   void SetLabels(vtkStringArray *labels);
00310 //ETX
00311 
00312   void BuildAxis(vtkViewport *viewport, bool);
00313 
00314 protected:
00315   vtkAxisActor();
00316   ~vtkAxisActor();
00317 
00318   char  *Title;
00319   double  Range[2];
00320   double  LastRange[2];
00321   char  *LabelFormat;
00322   int    NumberOfLabelsBuilt;
00323   int    MinorTicksVisible;
00324   int    LastMinorTicksVisible;
00325   int    TickLocation;
00326 
00327   int    DrawGridlines;
00328   int    LastDrawGridlines;
00329   double  GridlineXLength;
00330   double  GridlineYLength;
00331   double  GridlineZLength;
00332 
00333   int    AxisVisibility;
00334   int    TickVisibility;
00335   int    LastTickVisibility;
00336   int    LabelVisibility;
00337   int    TitleVisibility;
00338 
00339   int    AxisType;
00340   int    AxisPosition;
00341   double  Bounds[6];
00342 
00343 private:
00344   vtkAxisActor(const vtkAxisActor&); // Not implemented
00345   void operator=(const vtkAxisActor&); // Not implemented
00346 
00347   void TransformBounds(vtkViewport *, double bnds[6]);
00348 
00349   void BuildLabels(vtkViewport *, bool);
00350   void SetLabelPositions(vtkViewport *, bool);
00351 
00352   void BuildTitle(bool);
00353 
00354   void SetAxisPointsAndLines(void);
00355   bool BuildTickPointsForXType(double p1[3], double p2[3], bool);
00356   bool BuildTickPointsForYType(double p1[3], double p2[3], bool);
00357   bool BuildTickPointsForZType(double p1[3], double p2[3], bool);
00358 
00359   bool TickVisibilityChanged(void);
00360 
00361   vtkCoordinate *Point1Coordinate;
00362   vtkCoordinate *Point2Coordinate;
00363 
00364   double  MajorTickSize;
00365   double  MinorTickSize;
00366 
00367   // for the positions
00368   double  MajorStart;
00369   double  MinorStart;
00370 
00371   double  DeltaMinor;
00372   double  DeltaMajor;
00373 
00374   // For the ticks, w.r.t to the set range
00375   double  MajorRangeStart;
00376   double  MinorRangeStart;
00377   double  DeltaRangeMinor;
00378   double  DeltaRangeMajor;
00379 
00380   int    LastAxisPosition;
00381   int    LastAxisType;
00382   int    LastTickLocation;
00383   double  LastLabelStart;
00384 
00385   vtkPoints         *MinorTickPts;
00386   vtkPoints         *MajorTickPts;
00387   vtkPoints         *GridlinePts;
00388 
00389   vtkVectorText     *TitleVector;
00390   vtkPolyDataMapper *TitleMapper;
00391   vtkFollower       *TitleActor;
00392 
00393   vtkVectorText     **LabelVectors;
00394   vtkPolyDataMapper **LabelMappers;
00395   vtkFollower       **LabelActors;
00396 
00397   vtkPolyData        *Axis;
00398   vtkPolyDataMapper  *AxisMapper;
00399   vtkActor           *AxisActor;
00400 
00401   vtkCamera          *Camera;
00402   vtkTimeStamp        BuildTime;
00403   vtkTimeStamp        BoundsTime;
00404   vtkTimeStamp        LabelBuildTime;
00405   vtkTimeStamp        TitleTextTime;
00406 
00407   int                 AxisHasZeroLength;
00408 };
00409 
00410 
00411 #endif