VTK
dox/Rendering/Annotation/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 =========================================================================*/
00056 #ifndef __vtkAxisActor_h
00057 #define __vtkAxisActor_h
00058 
00059 #include "vtkRenderingAnnotationModule.h" // For export macro
00060 #include "vtkActor.h"
00061 
00062 #define VTK_MAX_LABELS    200
00063 #define VTK_MAX_TICKS     1000
00064 
00065 #define VTK_AXIS_TYPE_X   0
00066 #define VTK_AXIS_TYPE_Y   1
00067 #define VTK_AXIS_TYPE_Z   2
00068 
00069 #define VTK_TICKS_INSIDE  0
00070 #define VTK_TICKS_OUTSIDE 1
00071 #define VTK_TICKS_BOTH    2
00072 
00073 #define VTK_AXIS_POS_MINMIN 0
00074 #define VTK_AXIS_POS_MINMAX 1
00075 #define VTK_AXIS_POS_MAXMAX 2
00076 #define VTK_AXIS_POS_MAXMIN 3
00077 
00078 class vtkAxisFollower;
00079 class vtkCamera;
00080 class vtkCoordinate;
00081 class vtkFollower;
00082 class vtkPoints;
00083 class vtkPolyData;
00084 class vtkPolyDataMapper;
00085 class vtkProperty2D;
00086 class vtkStringArray;
00087 class vtkTextActor;
00088 class vtkTextProperty;
00089 class vtkVectorText;
00090 
00091 class VTKRENDERINGANNOTATION_EXPORT vtkAxisActor : public vtkActor
00092 {
00093  public:
00094   vtkTypeMacro(vtkAxisActor,vtkActor);
00095   void PrintSelf(ostream& os, vtkIndent indent);
00096 
00098   static vtkAxisActor *New();
00099 
00101 
00102   virtual vtkCoordinate *GetPoint1Coordinate();
00103   virtual void SetPoint1(double x[3])
00104   { this->SetPoint1(x[0], x[1], x[2]); }
00105   virtual void SetPoint1(double x, double y, double z);
00106   virtual double *GetPoint1();
00108 
00110 
00111   virtual vtkCoordinate *GetPoint2Coordinate();
00112   virtual void SetPoint2(double x[3])
00113   { this->SetPoint2(x[0], x[1], x[2]); }
00114   virtual void SetPoint2(double x, double y, double z);
00115   virtual double *GetPoint2();
00117 
00119 
00121   vtkSetVector2Macro(Range,double);
00122   vtkGetVectorMacro(Range,double,2);
00124 
00126 
00128   void   SetBounds(double bounds[6]);
00129   void   SetBounds(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);
00130   double *GetBounds(void);
00131   void   GetBounds(double bounds[6]);
00133 
00135 
00136   vtkSetStringMacro(LabelFormat);
00137   vtkGetStringMacro(LabelFormat);
00139 
00141 
00142   vtkSetMacro(MinorTicksVisible, int);
00143   vtkGetMacro(MinorTicksVisible, int);
00144   vtkBooleanMacro(MinorTicksVisible, int);
00146 
00147 
00149 
00150   void SetTitle(const char *t);
00151   vtkGetStringMacro(Title);
00153 
00155 
00156   vtkSetMacro(MajorTickSize, double);
00157   vtkGetMacro(MajorTickSize, double);
00159 
00161 
00162   vtkSetMacro(MinorTickSize, double);
00163   vtkGetMacro(MinorTickSize, double);
00165 
00167 
00168   vtkSetClampMacro(TickLocation, int, VTK_TICKS_INSIDE, VTK_TICKS_BOTH);
00169   vtkGetMacro(TickLocation, int);
00171 
00172   void SetTickLocationToInside(void)
00173   { this->SetTickLocation(VTK_TICKS_INSIDE); };
00174   void SetTickLocationToOutside(void)
00175   { this->SetTickLocation(VTK_TICKS_OUTSIDE); };
00176   void SetTickLocationToBoth(void)
00177   { this->SetTickLocation(VTK_TICKS_BOTH); };
00178 
00180 
00181   vtkSetMacro(AxisVisibility, int);
00182   vtkGetMacro(AxisVisibility, int);
00183   vtkBooleanMacro(AxisVisibility, int);
00185 
00187 
00188   vtkSetMacro(TickVisibility, int);
00189   vtkGetMacro(TickVisibility, int);
00190   vtkBooleanMacro(TickVisibility, int);
00192 
00194 
00195   vtkSetMacro(LabelVisibility, int);
00196   vtkGetMacro(LabelVisibility, int);
00197   vtkBooleanMacro(LabelVisibility, int);
00199 
00201 
00202   vtkSetMacro(TitleVisibility, int);
00203   vtkGetMacro(TitleVisibility, int);
00204   vtkBooleanMacro(TitleVisibility, int);
00206 
00208 
00209   virtual void SetTitleTextProperty(vtkTextProperty *p);
00210   vtkGetObjectMacro(TitleTextProperty,vtkTextProperty);
00212 
00214 
00215   virtual void SetLabelTextProperty(vtkTextProperty *p);
00216   vtkGetObjectMacro(LabelTextProperty,vtkTextProperty);
00218 
00220 
00221   void SetAxisLinesProperty(vtkProperty *);
00222   vtkProperty* GetAxisLinesProperty();
00224 
00226 
00227   void SetGridlinesProperty(vtkProperty *);
00228   vtkProperty* GetGridlinesProperty();
00230 
00232 
00233   void SetInnerGridlinesProperty(vtkProperty *);
00234   vtkProperty* GetInnerGridlinesProperty();
00236 
00238 
00239   void SetGridpolysProperty(vtkProperty *);
00240   vtkProperty* GetGridpolysProperty();
00242 
00244 
00245   vtkSetMacro(DrawGridlines, int);
00246   vtkGetMacro(DrawGridlines, int);
00247   vtkBooleanMacro(DrawGridlines, int);
00249 
00251 
00254   vtkSetMacro(DrawGridlinesOnly, int);
00255   vtkGetMacro(DrawGridlinesOnly, int);
00256   vtkBooleanMacro(DrawGridlinesOnly, int);
00258 
00259   vtkSetMacro(DrawGridlinesLocation, int);
00260   vtkGetMacro(DrawGridlinesLocation, int);
00261 
00263 
00264   vtkSetMacro(DrawInnerGridlines, int);
00265   vtkGetMacro(DrawInnerGridlines, int);
00266   vtkBooleanMacro(DrawInnerGridlines, int);
00268 
00270 
00271   vtkSetMacro(GridlineXLength, double);
00272   vtkGetMacro(GridlineXLength, double);
00273   vtkSetMacro(GridlineYLength, double);
00274   vtkGetMacro(GridlineYLength, double);
00275   vtkSetMacro(GridlineZLength, double);
00276   vtkGetMacro(GridlineZLength, double);
00278 
00280 
00281   vtkSetMacro(DrawGridpolys, int);
00282   vtkGetMacro(DrawGridpolys, int);
00283   vtkBooleanMacro(DrawGridpolys, int);
00285 
00287 
00288   vtkSetClampMacro(AxisType, int, VTK_AXIS_TYPE_X, VTK_AXIS_TYPE_Z);
00289   vtkGetMacro(AxisType, int);
00290   void SetAxisTypeToX(void) { this->SetAxisType(VTK_AXIS_TYPE_X); };
00291   void SetAxisTypeToY(void) { this->SetAxisType(VTK_AXIS_TYPE_Y); };
00292   void SetAxisTypeToZ(void) { this->SetAxisType(VTK_AXIS_TYPE_Z); };
00294 
00296 
00301   vtkSetClampMacro(AxisPosition, int, VTK_AXIS_POS_MINMIN, VTK_AXIS_POS_MAXMIN);
00302   vtkGetMacro(AxisPosition, int);
00304 
00305   void SetAxisPositionToMinMin(void)
00306   { this->SetAxisPosition(VTK_AXIS_POS_MINMIN); };
00307   void SetAxisPositionToMinMax(void)
00308   { this->SetAxisPosition(VTK_AXIS_POS_MINMAX); };
00309   void SetAxisPositionToMaxMax(void)
00310   { this->SetAxisPosition(VTK_AXIS_POS_MAXMAX); };
00311   void SetAxisPositionToMaxMin(void)
00312   { this->SetAxisPosition(VTK_AXIS_POS_MAXMIN); };
00313 
00315 
00317   virtual void SetCamera(vtkCamera*);
00318   vtkGetObjectMacro(Camera, vtkCamera);
00320 
00322 
00323   virtual int RenderOpaqueGeometry(vtkViewport* viewport);
00324   virtual int RenderTranslucentGeometry(vtkViewport* viewport);
00325   virtual int RenderTranslucentPolygonalGeometry(vtkViewport* viewport);
00326   virtual int RenderOverlay(vtkViewport* viewport);
00327   int HasTranslucentPolygonalGeometry();
00329 
00333   void ReleaseGraphicsResources(vtkWindow *);
00334 
00335 //BTX
00336   double ComputeMaxLabelLength(const double [3]);
00337   double ComputeTitleLength(const double [3]);
00338 //ETX
00339   void SetLabelScale(const double);
00340   void SetTitleScale(const double);
00341 
00343 
00345   vtkSetMacro(MinorStart, double);
00346   vtkGetMacro(MinorStart, double);
00347   double GetMajorStart(int axis);
00348   void SetMajorStart(int axis,double value);
00349   //vtkSetMacro(MajorStart, double);
00350   //vtkGetMacro(MajorStart, double);
00351   vtkSetMacro(DeltaMinor, double);
00352   vtkGetMacro(DeltaMinor, double);
00353   double GetDeltaMajor(int axis);
00354   void SetDeltaMajor(int axis,double value);
00355   //vtkSetMacro(DeltaMajor, double);
00356   //vtkGetMacro(DeltaMajor, double);
00358 
00360 
00364   vtkSetMacro(MinorRangeStart, double);
00365   vtkGetMacro(MinorRangeStart, double);
00366   vtkSetMacro(MajorRangeStart, double);
00367   vtkGetMacro(MajorRangeStart, double);
00368   vtkSetMacro(DeltaRangeMinor, double);
00369   vtkGetMacro(DeltaRangeMinor, double);
00370   vtkSetMacro(DeltaRangeMajor, double);
00371   vtkGetMacro(DeltaRangeMajor, double);
00373 
00374 //BTX
00375   void SetLabels(vtkStringArray *labels);
00376 //ETX
00377 
00378   void BuildAxis(vtkViewport *viewport, bool);
00379 
00380 //BTX
00382 
00383   vtkGetObjectMacro(TitleActor,  vtkAxisFollower);
00385 
00387 
00388   inline vtkAxisFollower** GetLabelActors()
00389     {
00390     return this->LabelActors;
00391     }
00392 //ETX
00394 
00396 
00398   vtkGetMacro(NumberOfLabelsBuilt, int);
00400 
00402 
00403   vtkSetMacro(CalculateTitleOffset, int);
00404   vtkGetMacro(CalculateTitleOffset, int);
00405   vtkBooleanMacro(CalculateTitleOffset, int);
00407 
00409 
00410   vtkSetMacro(CalculateLabelOffset, int);
00411   vtkGetMacro(CalculateLabelOffset, int);
00412   vtkBooleanMacro(CalculateLabelOffset, int);
00414 
00416 
00417   vtkSetMacro(Use2DMode, int);
00418   vtkGetMacro(Use2DMode, int);
00420 
00422 
00423   vtkSetMacro(VerticalOffsetXTitle2D, double);
00424   vtkGetMacro(VerticalOffsetXTitle2D, double);
00426 
00428 
00429   vtkSetMacro(HorizontalOffsetYTitle2D, double);
00430   vtkGetMacro(HorizontalOffsetYTitle2D, double);
00432 
00434 
00435   vtkSetMacro(SaveTitlePosition, int);
00436   vtkGetMacro(SaveTitlePosition, int);
00438 
00440 
00441   vtkSetVector3Macro(AxisBaseForX, double);
00442   vtkGetVector3Macro(AxisBaseForX, double);
00444 
00446 
00447   vtkSetVector3Macro(AxisBaseForY, double);
00448   vtkGetVector3Macro(AxisBaseForY, double);
00450 
00452 
00453   vtkSetVector3Macro(AxisBaseForZ, double);
00454   vtkGetVector3Macro(AxisBaseForZ, double);
00456 
00458 
00459   vtkSetMacro(AxisOnOrigin,int);
00460   vtkGetMacro(AxisOnOrigin,int);
00462 
00464 
00465   vtkSetMacro(LabelOffset, double);
00466   vtkGetMacro(LabelOffset, double);
00467   vtkSetMacro(TitleOffset, double);
00468   vtkGetMacro(TitleOffset, double);
00469   vtkSetMacro(ScreenSize, double);
00470   vtkGetMacro(ScreenSize, double);
00472 
00473  protected:
00474   vtkAxisActor();
00475   ~vtkAxisActor();
00476 
00477   char  *Title;
00478   double  Range[2];
00479   double  LastRange[2];
00480   char  *LabelFormat;
00481   int    NumberOfLabelsBuilt;
00482   int    MinorTicksVisible;
00483   int    LastMinorTicksVisible;
00484   int    TickLocation;
00485 
00486   int    DrawGridlines;
00487   int    DrawGridlinesOnly;
00488   int    LastDrawGridlines;
00489   int    DrawGridlinesLocation; // 0: all | 1: closest | 2: farest
00490   int    LastDrawGridlinesLocation; // 0: all | 1: closest | 2: farest
00491   double GridlineXLength;
00492   double GridlineYLength;
00493   double GridlineZLength;
00494 
00495   int    DrawInnerGridlines;
00496   int    LastDrawInnerGridlines;
00497 
00498   int    DrawGridpolys;
00499   int    LastDrawGridpolys;
00500 
00501   int    AxisVisibility;
00502   int    TickVisibility;
00503   int    LastTickVisibility;
00504   int    LabelVisibility;
00505   int    TitleVisibility;
00506 
00507   int    AxisType;
00508   int    AxisPosition;
00509   double  Bounds[6];
00510 
00511   double AxisBaseForX[3];
00512   double AxisBaseForY[3];
00513   double AxisBaseForZ[3];
00514 
00515  private:
00516   vtkAxisActor(const vtkAxisActor&); // Not implemented
00517   void operator=(const vtkAxisActor&); // Not implemented
00518 
00519   void TransformBounds(vtkViewport *, double bnds[6]);
00520 
00521   void BuildLabels(vtkViewport *, bool);
00522   void BuildLabels2D(vtkViewport *, bool);
00523   void SetLabelPositions(vtkViewport *, bool);
00524   void SetLabelPositions2D(vtkViewport *, bool);
00525 
00526   void BuildTitle(bool);
00527   void BuildTitle2D(vtkViewport *viewport, bool);
00528 
00529   void SetAxisPointsAndLines(void);
00530   bool BuildTickPoints(double p1[3], double p2[3], bool force);
00531 
00532   bool TickVisibilityChanged(void);
00533   vtkProperty *NewTitleProperty();
00534   vtkProperty2D *NewTitleProperty2D();
00535   vtkProperty *NewLabelProperty();
00536 
00537   bool BoundsDisplayCoordinateChanged(vtkViewport *viewport);
00538 
00539   vtkCoordinate *Point1Coordinate;
00540   vtkCoordinate *Point2Coordinate;
00541 
00542   double  MajorTickSize;
00543   double  MinorTickSize;
00544 
00545   // For each axis (for the inner gridline generation)
00546   double  MajorStart[3];
00547   double  DeltaMajor[3];
00548   double  MinorStart;
00549   double  DeltaMinor;
00550 
00551   // For the ticks, w.r.t to the set range
00552   double  MajorRangeStart;
00553   double  MinorRangeStart;
00554   double  DeltaRangeMinor;
00555   double  DeltaRangeMajor;
00556 
00557   int    LastAxisPosition;
00558   int    LastAxisType;
00559   int    LastTickLocation;
00560   double LastLabelStart;
00561 
00562   vtkPoints         *MinorTickPts;
00563   vtkPoints         *MajorTickPts;
00564   vtkPoints         *GridlinePts;
00565   vtkPoints         *InnerGridlinePts;
00566   vtkPoints         *GridpolyPts;
00567 
00568   vtkVectorText     *TitleVector;
00569   vtkPolyDataMapper *TitleMapper;
00570   vtkAxisFollower   *TitleActor;
00571   vtkTextActor      *TitleActor2D;
00572   vtkTextProperty   *TitleTextProperty;
00573 
00574   vtkVectorText     **LabelVectors;
00575   vtkPolyDataMapper **LabelMappers;
00576   vtkAxisFollower   **LabelActors;
00577   vtkTextActor      **LabelActors2D;
00578   vtkTextProperty    *LabelTextProperty;
00579 
00580   vtkPolyData        *AxisLines;
00581   vtkPolyDataMapper  *AxisLinesMapper;
00582   vtkActor           *AxisLinesActor;
00583   vtkPolyData        *Gridlines;
00584   vtkPolyDataMapper  *GridlinesMapper;
00585   vtkActor           *GridlinesActor;
00586   vtkPolyData        *InnerGridlines;
00587   vtkPolyDataMapper  *InnerGridlinesMapper;
00588   vtkActor           *InnerGridlinesActor;
00589   vtkPolyData        *Gridpolys;
00590   vtkPolyDataMapper  *GridpolysMapper;
00591   vtkActor           *GridpolysActor;
00592 
00593   vtkCamera          *Camera;
00594   vtkTimeStamp        BuildTime;
00595   vtkTimeStamp        BuildTickPointsTime;
00596   vtkTimeStamp        BoundsTime;
00597   vtkTimeStamp        LabelBuildTime;
00598   vtkTimeStamp        TitleTextTime;
00599 
00600   int                 AxisOnOrigin;
00601 
00602   int                 AxisHasZeroLength;
00603 
00604   int                 CalculateTitleOffset;
00605   int                 CalculateLabelOffset;
00606 
00608   int                 Use2DMode;
00609 
00612   double              VerticalOffsetXTitle2D;
00613 
00616   double              HorizontalOffsetYTitle2D;
00617 
00622   int          SaveTitlePosition;
00623 
00625   double       TitleConstantPosition[2];
00626 
00628   bool                NeedBuild2D;
00629 
00630   double       LastMinDisplayCoordinate[3];
00631   double       LastMaxDisplayCoordinate[3];
00632 
00634 
00635   double ScreenSize;
00636   double LabelOffset;
00637   double TitleOffset;
00638 };
00640 
00641 #endif