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 =========================================================================*/
00054 #ifndef __vtkAxisActor_h
00055 #define __vtkAxisActor_h
00056 
00057 #include "vtkActor.h"
00058 
00059 #define VTK_MAX_LABELS    200
00060 #define VTK_MAX_TICKS     1000
00061 
00062 #define VTK_AXIS_TYPE_X   0
00063 #define VTK_AXIS_TYPE_Y   1
00064 #define VTK_AXIS_TYPE_Z   2
00065 
00066 #define VTK_TICKS_INSIDE  0
00067 #define VTK_TICKS_OUTSIDE 1
00068 #define VTK_TICKS_BOTH    2
00069 
00070 #define VTK_AXIS_POS_MINMIN 0
00071 #define VTK_AXIS_POS_MINMAX 1
00072 #define VTK_AXIS_POS_MAXMAX 2
00073 #define VTK_AXIS_POS_MAXMIN 3
00074 
00075 class vtkAxisFollower;
00076 class vtkCamera;
00077 class vtkCoordinate;
00078 class vtkFollower;
00079 class vtkFreeTypeUtilities;
00080 class vtkPoints;
00081 class vtkPolyData;
00082 class vtkPolyDataMapper;
00083 class vtkProperty2D;
00084 class vtkStringArray;
00085 class vtkTextActor;
00086 class vtkTextProperty;
00087 class vtkVectorText;
00088 
00089 class VTK_HYBRID_EXPORT vtkAxisActor : public vtkActor
00090 {
00091  public:
00092   vtkTypeMacro(vtkAxisActor,vtkActor);
00093   void PrintSelf(ostream& os, vtkIndent indent);
00094 
00096   static vtkAxisActor *New();
00097 
00099 
00100   virtual vtkCoordinate *GetPoint1Coordinate();
00101   virtual void SetPoint1(double x[3])
00102   { this->SetPoint1(x[0], x[1], x[2]); }
00103   virtual void SetPoint1(double x, double y, double z);
00104   virtual double *GetPoint1();
00106 
00108 
00109   virtual vtkCoordinate *GetPoint2Coordinate();
00110   virtual void SetPoint2(double x[3])
00111   { this->SetPoint2(x[0], x[1], x[2]); }
00112   virtual void SetPoint2(double x, double y, double z);
00113   virtual double *GetPoint2();
00115 
00117 
00119   vtkSetVector2Macro(Range,double);
00120   vtkGetVectorMacro(Range,double,2);
00122 
00124 
00126   void   SetBounds(double bounds[6]);
00127   void   SetBounds(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);
00128   double *GetBounds(void);
00129   void   GetBounds(double bounds[6]);
00131 
00133 
00134   vtkSetStringMacro(LabelFormat);
00135   vtkGetStringMacro(LabelFormat);
00137 
00139 
00140   vtkSetMacro(MinorTicksVisible, int);
00141   vtkGetMacro(MinorTicksVisible, int);
00142   vtkBooleanMacro(MinorTicksVisible, int);
00144 
00145 
00147 
00148   void SetTitle(const char *t);
00149   vtkGetStringMacro(Title);
00151 
00153 
00154   vtkSetMacro(MajorTickSize, double);
00155   vtkGetMacro(MajorTickSize, double);
00157 
00159 
00160   vtkSetMacro(MinorTickSize, double);
00161   vtkGetMacro(MinorTickSize, double);
00163 
00165 
00166   vtkSetClampMacro(TickLocation, int, VTK_TICKS_INSIDE, VTK_TICKS_BOTH);
00167   vtkGetMacro(TickLocation, int);
00169 
00170   void SetTickLocationToInside(void)
00171   { this->SetTickLocation(VTK_TICKS_INSIDE); };
00172   void SetTickLocationToOutside(void)
00173   { this->SetTickLocation(VTK_TICKS_OUTSIDE); };
00174   void SetTickLocationToBoth(void)
00175   { this->SetTickLocation(VTK_TICKS_BOTH); };
00176 
00178 
00179   vtkSetMacro(AxisVisibility, int);
00180   vtkGetMacro(AxisVisibility, int);
00181   vtkBooleanMacro(AxisVisibility, int);
00183 
00185 
00186   vtkSetMacro(TickVisibility, int);
00187   vtkGetMacro(TickVisibility, int);
00188   vtkBooleanMacro(TickVisibility, int);
00190 
00192 
00193   vtkSetMacro(LabelVisibility, int);
00194   vtkGetMacro(LabelVisibility, int);
00195   vtkBooleanMacro(LabelVisibility, int);
00197 
00199 
00200   vtkSetMacro(TitleVisibility, int);
00201   vtkGetMacro(TitleVisibility, int);
00202   vtkBooleanMacro(TitleVisibility, int);
00204 
00206 
00207   virtual void SetTitleTextProperty(vtkTextProperty *p);
00208   vtkGetObjectMacro(TitleTextProperty,vtkTextProperty);
00210 
00212 
00213   virtual void SetLabelTextProperty(vtkTextProperty *p);
00214   vtkGetObjectMacro(LabelTextProperty,vtkTextProperty);
00216   
00218 
00219   void SetAxisLinesProperty(vtkProperty *);
00220   vtkProperty* GetAxisLinesProperty();
00222 
00224 
00225   void SetGridlinesProperty(vtkProperty *);
00226   vtkProperty* GetGridlinesProperty();
00228 
00230 
00231   void SetInnerGridlinesProperty(vtkProperty *);
00232   vtkProperty* GetInnerGridlinesProperty();
00234 
00236 
00237   void SetGridpolysProperty(vtkProperty *);
00238   vtkProperty* GetGridpolysProperty();
00240 
00242 
00243   vtkSetMacro(DrawGridlines, int);
00244   vtkGetMacro(DrawGridlines, int);
00245   vtkBooleanMacro(DrawGridlines, int);
00247 
00249 
00250   vtkSetMacro(DrawInnerGridlines, int);
00251   vtkGetMacro(DrawInnerGridlines, int);
00252   vtkBooleanMacro(DrawInnerGridlines, int);
00254 
00256 
00257   vtkSetMacro(GridlineXLength, double);
00258   vtkGetMacro(GridlineXLength, double);
00259   vtkSetMacro(GridlineYLength, double);
00260   vtkGetMacro(GridlineYLength, double);
00261   vtkSetMacro(GridlineZLength, double);
00262   vtkGetMacro(GridlineZLength, double);
00264 
00266 
00267   vtkSetMacro(DrawGridpolys, int);
00268   vtkGetMacro(DrawGridpolys, int);
00269   vtkBooleanMacro(DrawGridpolys, int);
00271 
00273 
00274   vtkSetClampMacro(AxisType, int, VTK_AXIS_TYPE_X, VTK_AXIS_TYPE_Z);
00275   vtkGetMacro(AxisType, int);
00276   void SetAxisTypeToX(void) { this->SetAxisType(VTK_AXIS_TYPE_X); };
00277   void SetAxisTypeToY(void) { this->SetAxisType(VTK_AXIS_TYPE_Y); };
00278   void SetAxisTypeToZ(void) { this->SetAxisType(VTK_AXIS_TYPE_Z); };
00280 
00282 
00287   vtkSetClampMacro(AxisPosition, int, VTK_AXIS_POS_MINMIN, VTK_AXIS_POS_MAXMIN);
00288   vtkGetMacro(AxisPosition, int);
00290 
00291   void SetAxisPositionToMinMin(void)
00292   { this->SetAxisPosition(VTK_AXIS_POS_MINMIN); };
00293   void SetAxisPositionToMinMax(void)
00294   { this->SetAxisPosition(VTK_AXIS_POS_MINMAX); };
00295   void SetAxisPositionToMaxMax(void)
00296   { this->SetAxisPosition(VTK_AXIS_POS_MAXMAX); };
00297   void SetAxisPositionToMaxMin(void)
00298   { this->SetAxisPosition(VTK_AXIS_POS_MAXMIN); };
00299 
00301 
00303   virtual void SetCamera(vtkCamera*);
00304   vtkGetObjectMacro(Camera, vtkCamera);
00306 
00308 
00309   virtual int RenderOpaqueGeometry(vtkViewport* viewport);
00310   virtual int RenderTranslucentGeometry(vtkViewport* viewport);
00311   virtual int RenderTranslucentPolygonalGeometry(vtkViewport* viewport);
00312   virtual int RenderOverlay(vtkViewport* viewport);
00313   int HasTranslucentPolygonalGeometry();
00315 
00319   void ReleaseGraphicsResources(vtkWindow *);
00320 
00321 //BTX
00322   double ComputeMaxLabelLength(const double [3]);
00323   double ComputeTitleLength(const double [3]);
00324 //ETX
00325   void SetLabelScale(const double);
00326   void SetTitleScale(const double);
00327 
00329 
00331   vtkSetMacro(MinorStart, double);
00332   vtkGetMacro(MinorStart, double);
00333   double GetMajorStart(int axis);
00334   void SetMajorStart(int axis,double value);
00335   //vtkSetMacro(MajorStart, double);
00336   //vtkGetMacro(MajorStart, double);
00337   vtkSetMacro(DeltaMinor, double);
00338   vtkGetMacro(DeltaMinor, double);
00339   double GetDeltaMajor(int axis);
00340   void SetDeltaMajor(int axis,double value);
00341   //vtkSetMacro(DeltaMajor, double);
00342   //vtkGetMacro(DeltaMajor, double);
00344 
00346 
00350   vtkSetMacro(MinorRangeStart, double);
00351   vtkGetMacro(MinorRangeStart, double);
00352   vtkSetMacro(MajorRangeStart, double);
00353   vtkGetMacro(MajorRangeStart, double);
00354   vtkSetMacro(DeltaRangeMinor, double);
00355   vtkGetMacro(DeltaRangeMinor, double);
00356   vtkSetMacro(DeltaRangeMajor, double);
00357   vtkGetMacro(DeltaRangeMajor, double);
00359 
00360 //BTX
00361   void SetLabels(vtkStringArray *labels);
00362 //ETX
00363 
00364   void BuildAxis(vtkViewport *viewport, bool);
00365 
00366 //BTX
00368 
00369   vtkGetObjectMacro(TitleActor,  vtkAxisFollower);
00371 
00373 
00374   inline vtkAxisFollower** GetLabelActors()
00375     {
00376     return this->LabelActors;
00377     }
00378 //ETX
00380 
00382 
00384   vtkGetMacro(NumberOfLabelsBuilt, int);
00386 
00388 
00389   vtkSetMacro(CalculateTitleOffset, int);
00390   vtkGetMacro(CalculateTitleOffset, int);
00391   vtkBooleanMacro(CalculateTitleOffset, int);
00393 
00395 
00396   vtkSetMacro(CalculateLabelOffset, int);
00397   vtkGetMacro(CalculateLabelOffset, int);
00398   vtkBooleanMacro(CalculateLabelOffset, int);
00400 
00402 
00403   vtkSetMacro(Use2DMode, int);
00404   vtkGetMacro(Use2DMode, int);
00406 
00408 
00409   vtkSetMacro(VerticalOffsetXTitle2D, double);
00410   vtkGetMacro(VerticalOffsetXTitle2D, double);
00412   
00414 
00415   vtkSetMacro(HorizontalOffsetYTitle2D, double);
00416   vtkGetMacro(HorizontalOffsetYTitle2D, double);
00418   
00420 
00421   vtkSetMacro(SaveTitlePosition, int);
00422   vtkGetMacro(SaveTitlePosition, int);
00424   
00425  protected:
00426   vtkAxisActor();
00427   ~vtkAxisActor();
00428 
00429   char  *Title;
00430   double  Range[2];
00431   double  LastRange[2];
00432   char  *LabelFormat;
00433   int    NumberOfLabelsBuilt;
00434   int    MinorTicksVisible;
00435   int    LastMinorTicksVisible;
00436   int    TickLocation;
00437 
00438   int    DrawGridlines;
00439   int    LastDrawGridlines;
00440   double  GridlineXLength;
00441   double  GridlineYLength;
00442   double  GridlineZLength;
00443 
00444   int    DrawInnerGridlines;
00445   int    LastDrawInnerGridlines;
00446   
00447   int    DrawGridpolys;
00448   int    LastDrawGridpolys;
00449   
00450   int    AxisVisibility;
00451   int    TickVisibility;
00452   int    LastTickVisibility;
00453   int    LabelVisibility;
00454   int    TitleVisibility;
00455 
00456   int    AxisType;
00457   int    AxisPosition;
00458   double  Bounds[6];
00459 
00460  private:
00461   vtkAxisActor(const vtkAxisActor&); // Not implemented
00462   void operator=(const vtkAxisActor&); // Not implemented
00463 
00464   void TransformBounds(vtkViewport *, double bnds[6]);
00465 
00466   void BuildLabels(vtkViewport *, bool);
00467   void BuildLabels2D(vtkViewport *, bool);
00468   void SetLabelPositions(vtkViewport *, bool);
00469   void SetLabelPositions2D(vtkViewport *, bool);
00470 
00471   void BuildTitle(bool);
00472   void BuildTitle2D(vtkViewport *viewport, bool);
00473 
00474   void SetAxisPointsAndLines(void);
00475   bool BuildTickPointsForXType(double p1[3], double p2[3], bool);
00476   bool BuildTickPointsForYType(double p1[3], double p2[3], bool);
00477   bool BuildTickPointsForZType(double p1[3], double p2[3], bool);
00478 
00479   bool TickVisibilityChanged(void);
00480   vtkProperty *NewTitleProperty();
00481   vtkProperty2D *NewTitleProperty2D();
00482   vtkProperty *NewLabelProperty();
00483 
00484   bool BoundsDisplayCoordinateChanged(vtkViewport *viewport);
00485 
00486   vtkCoordinate *Point1Coordinate;
00487   vtkCoordinate *Point2Coordinate;
00488 
00489   double  MajorTickSize;
00490   double  MinorTickSize;
00491 
00492   // For each axis (for the inner gridline generation)
00493   double  MajorStart[3];
00494   double  DeltaMajor[3];
00495   double  MinorStart;
00496   double  DeltaMinor;
00497 
00498   // For the ticks, w.r.t to the set range
00499   double  MajorRangeStart;
00500   double  MinorRangeStart;
00501   double  DeltaRangeMinor;
00502   double  DeltaRangeMajor;
00503 
00504   int    LastAxisPosition;
00505   int    LastAxisType;
00506   int    LastTickLocation;
00507   double LastLabelStart;
00508 
00509   vtkPoints         *MinorTickPts;
00510   vtkPoints         *MajorTickPts;
00511   vtkPoints         *GridlinePts;
00512   vtkPoints         *InnerGridlinePts;
00513   vtkPoints         *GridpolyPts;
00514 
00515   vtkVectorText     *TitleVector;
00516   vtkPolyDataMapper *TitleMapper;
00517   vtkAxisFollower   *TitleActor;
00518   vtkTextActor      *TitleActor2D;
00519   vtkTextProperty   *TitleTextProperty;
00520 
00521   vtkVectorText     **LabelVectors;
00522   vtkPolyDataMapper **LabelMappers;
00523   vtkAxisFollower   **LabelActors;
00524   vtkTextActor      **LabelActors2D;
00525   vtkTextProperty    *LabelTextProperty;
00526 
00527   vtkPolyData        *AxisLines;
00528   vtkPolyDataMapper  *AxisLinesMapper;
00529   vtkActor           *AxisLinesActor;
00530   vtkPolyData        *Gridlines;
00531   vtkPolyDataMapper  *GridlinesMapper;
00532   vtkActor           *GridlinesActor;
00533   vtkPolyData        *InnerGridlines;
00534   vtkPolyDataMapper  *InnerGridlinesMapper;
00535   vtkActor           *InnerGridlinesActor;
00536   vtkPolyData        *Gridpolys;
00537   vtkPolyDataMapper  *GridpolysMapper;
00538   vtkActor           *GridpolysActor;
00539 
00540   vtkCamera          *Camera;
00541   vtkTimeStamp        BuildTime;
00542   vtkTimeStamp        BoundsTime;
00543   vtkTimeStamp        LabelBuildTime;
00544   vtkTimeStamp        TitleTextTime;
00545 
00546   int                 AxisHasZeroLength;
00547 
00548   int                 CalculateTitleOffset;
00549   int                 CalculateLabelOffset;
00550 
00552   int                 Use2DMode;
00553 
00556   double              VerticalOffsetXTitle2D;
00557 
00560   double              HorizontalOffsetYTitle2D;
00561 
00566   int          SaveTitlePosition;
00567 
00569   double       TitleConstantPosition[2];
00570 
00572   bool                NeedBuild2D;
00573 
00574   double       LastMinDisplayCoordinate[3];
00575   double       LastMaxDisplayCoordinate[3];
00576 
00578 
00579   vtkFreeTypeUtilities *FreeTypeUtilities;
00580 };
00582 
00583 
00584 #endif