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 =========================================================================*/ 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