00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
00074
00075
00076
00077
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
00273 double ComputeMaxLabelLength(const double [3]);
00274 double ComputeTitleLength(const double [3]);
00275
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
00309 void SetLabels(vtkStringArray *labels);
00310
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&);
00345 void operator=(const vtkAxisActor&);
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
00368 double MajorStart;
00369 double MinorStart;
00370
00371 double DeltaMinor;
00372 double DeltaMajor;
00373
00374
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