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