VTK
vtkPolarAxesActor.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkCubeAxesActor.h
5  Language: C++
6 
7 Copyright (c) 1993-2001 Ken Martin, Will Schroeder, Bill Lorensen
8 All rights reserve
9  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
10 
11  This software is distributed WITHOUT ANY WARRANTY; without even
12  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13  PURPOSE. See the above copyright notice for more information.
14 =========================================================================*/
33 #ifndef vtkPolarAxesActor_h
34 #define vtkPolarAxesActor_h
35 
36 #define VTK_MAXIMUM_NUMBER_OF_RADIAL_AXES 50
37 #define VTK_DEFAULT_NUMBER_OF_RADIAL_AXES 5
38 #define VTK_MAXIMUM_NUMBER_OF_POLAR_AXIS_TICKS 200
39 #define VTK_MAXIMUM_RATIO 1000.0
40 #define VTK_POLAR_ARC_RESOLUTION_PER_DEG 0.2
41 
42 #include "vtkActor.h"
43 #include "vtkAxisActor.h" // access to enum values
44 #include "vtkRenderingAnnotationModule.h" // For export macro
45 #include <list> // To process exponent list as reference
46 
47 class vtkCamera;
48 class vtkPolyData;
49 class vtkPolyDataMapper;
50 class vtkProperty;
51 class vtkStringArray;
52 class vtkTextProperty;
53 
54 class VTKRENDERINGANNOTATION_EXPORT vtkPolarAxesActor : public vtkActor
55 {
56 public:
57  vtkTypeMacro(vtkPolarAxesActor, vtkActor);
58  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
59 
64  static vtkPolarAxesActor* New();
65 
67 
70  int RenderOpaqueGeometry(vtkViewport*) VTK_OVERRIDE;
71  int RenderOverlay(vtkViewport*) VTK_OVERRIDE;
72  int RenderTranslucentPolygonalGeometry(vtkViewport*) VTK_OVERRIDE { return 0; };
74 
76 
79  virtual void SetPole(double[3]);
80  virtual void SetPole(double, double, double);
81  vtkGetVector3Macro(Pole, double);
83 
85 
89  vtkSetMacro(Log, bool);
90  vtkGetMacro(Log, bool);
91  vtkBooleanMacro(Log, bool);
93 
95 
98  vtkSetClampMacro(RequestedNumberOfRadialAxes, vtkIdType, 0, VTK_MAXIMUM_NUMBER_OF_RADIAL_AXES);
99  vtkGetMacro(RequestedNumberOfRadialAxes, vtkIdType);
101 
103 
107  virtual void SetNumberOfPolarAxisTicks(int);
108  int GetNumberOfPolarAxisTicks();
110 
112 
116  vtkSetMacro(AutoSubdividePolarAxis, bool);
117  vtkGetMacro(AutoSubdividePolarAxis, bool);
118  vtkBooleanMacro(AutoSubdividePolarAxis, bool);
120 
122 
125  vtkSetVector2Macro(Range, double);
126  vtkGetVectorMacro(Range, double, 2);
128 
130 
133  virtual void SetMinimumRadius(double);
134  vtkGetMacro(MinimumRadius, double);
136 
138 
141  virtual void SetMaximumRadius(double);
142  vtkGetMacro(MaximumRadius, double);
144 
146 
149  virtual void SetMinimumAngle(double);
150  vtkGetMacro(MinimumAngle, double);
152 
154 
157  virtual void SetMaximumAngle(double);
158  vtkGetMacro(MaximumAngle, double);
160 
162 
167  vtkSetClampMacro(SmallestVisiblePolarAngle, double, 0., 5.);
168  vtkGetMacro(SmallestVisiblePolarAngle, double);
170 
172 
177  vtkSetClampMacro(TickLocation, int, vtkAxisActor::VTK_TICKS_INSIDE, vtkAxisActor::VTK_TICKS_BOTH);
178  vtkGetMacro(TickLocation, int);
180 
182 
185  vtkSetMacro(RadialUnits, bool);
186  vtkGetMacro(RadialUnits, bool);
188 
190 
196  vtkSetMacro(ScreenSize, double);
197  vtkGetMacro(ScreenSize, double);
199 
201 
205  virtual void SetCamera(vtkCamera*);
206  vtkGetObjectMacro(Camera, vtkCamera);
208 
210 
214  vtkSetStringMacro(PolarAxisTitle);
215  vtkGetStringMacro(PolarAxisTitle);
217 
219 
222  vtkSetStringMacro(PolarLabelFormat);
223  vtkGetStringMacro(PolarLabelFormat);
225 
227  {
228  VTK_EXPONENT_BOTTOM = 0,
229  VTK_EXPONENT_EXTERN = 1,
230  VTK_EXPONENT_LABELS = 2
231  };
232 
234 
239  vtkSetClampMacro(ExponentLocation, int, VTK_EXPONENT_BOTTOM, VTK_EXPONENT_LABELS);
240  vtkGetMacro(ExponentLocation, int);
242 
244 
247  vtkSetStringMacro(RadialAngleFormat);
248  vtkGetStringMacro(RadialAngleFormat);
250 
256  void ReleaseGraphicsResources(vtkWindow*) VTK_OVERRIDE;
257 
259 
262  vtkSetMacro(EnableDistanceLOD, int);
263  vtkGetMacro(EnableDistanceLOD, int);
265 
267 
270  vtkSetClampMacro(DistanceLODThreshold, double, 0.0, 1.0);
271  vtkGetMacro(DistanceLODThreshold, double);
273 
275 
278  vtkSetMacro(EnableViewAngleLOD, int);
279  vtkGetMacro(EnableViewAngleLOD, int);
281 
283 
286  vtkSetClampMacro(ViewAngleLODThreshold, double, 0., 1.);
287  vtkGetMacro(ViewAngleLODThreshold, double);
289 
291 
294  vtkSetMacro(PolarAxisVisibility, int);
295  vtkGetMacro(PolarAxisVisibility, int);
296  vtkBooleanMacro(PolarAxisVisibility, int);
298 
300 
303  vtkSetMacro(DrawRadialGridlines, int);
304  vtkGetMacro(DrawRadialGridlines, int);
305  vtkBooleanMacro(DrawRadialGridlines, int);
307 
309 
312  vtkSetMacro(DrawPolarArcsGridlines, int);
313  vtkGetMacro(DrawPolarArcsGridlines, int);
314  vtkBooleanMacro(DrawPolarArcsGridlines, int);
316 
318 
321  vtkSetMacro(PolarTitleVisibility, int);
322  vtkGetMacro(PolarTitleVisibility, int);
323  vtkBooleanMacro(PolarTitleVisibility, int);
325 
327  {
328  VTK_TITLE_BOTTOM = 0,
329  VTK_TITLE_EXTERN = 1
330  };
331 
333 
337  vtkSetClampMacro(RadialAxisTitleLocation, int, VTK_TITLE_BOTTOM, VTK_TITLE_EXTERN);
338  vtkGetMacro(RadialAxisTitleLocation, int);
340 
342 
346  vtkSetClampMacro(PolarAxisTitleLocation, int, VTK_TITLE_BOTTOM, VTK_TITLE_EXTERN);
347  vtkGetMacro(PolarAxisTitleLocation, int);
349 
351 
354  vtkSetMacro(PolarLabelVisibility, int);
355  vtkGetMacro(PolarLabelVisibility, int);
356  vtkBooleanMacro(PolarLabelVisibility, int);
358 
360 
366  vtkSetMacro(ArcTicksOriginToPolarAxis, int);
367  vtkGetMacro(ArcTicksOriginToPolarAxis, int);
368  vtkBooleanMacro(ArcTicksOriginToPolarAxis, int);
370 
372 
378  vtkSetMacro(RadialAxesOriginToPolarAxis, int);
379  vtkGetMacro(RadialAxesOriginToPolarAxis, int);
380  vtkBooleanMacro(RadialAxesOriginToPolarAxis, int);
382 
384 
387  vtkSetMacro(PolarTickVisibility, int);
388  vtkGetMacro(PolarTickVisibility, int);
389  vtkBooleanMacro(PolarTickVisibility, int);
391 
393 
396  vtkSetMacro(AxisTickVisibility, int);
397  vtkGetMacro(AxisTickVisibility, int);
398  vtkBooleanMacro(AxisTickVisibility, int);
400 
402 
405  vtkSetMacro(AxisMinorTickVisibility, int);
406  vtkGetMacro(AxisMinorTickVisibility, int);
407  vtkBooleanMacro(AxisMinorTickVisibility, int);
409 
411 
414  vtkSetMacro(ArcTickVisibility, int);
415  vtkGetMacro(ArcTickVisibility, int);
416  vtkBooleanMacro(ArcTickVisibility, int);
418 
420 
423  vtkSetMacro(ArcMinorTickVisibility, int);
424  vtkGetMacro(ArcMinorTickVisibility, int);
425  vtkBooleanMacro(ArcMinorTickVisibility, int);
427 
429 
432  vtkSetMacro(ArcMajorTickSize, double);
433  vtkGetMacro(ArcMajorTickSize, double);
435 
437 
440  vtkSetMacro(PolarAxisMajorTickSize, double);
441  vtkGetMacro(PolarAxisMajorTickSize, double);
443 
445 
448  vtkSetMacro(LastRadialAxisMajorTickSize, double);
449  vtkGetMacro(LastRadialAxisMajorTickSize, double);
451 
453 
456  vtkSetMacro(PolarAxisTickRatioSize, double);
457  vtkGetMacro(PolarAxisTickRatioSize, double);
459 
461 
464  vtkSetMacro(LastAxisTickRatioSize, double);
465  vtkGetMacro(LastAxisTickRatioSize, double);
467 
469 
472  vtkSetMacro(ArcTickRatioSize, double);
473  vtkGetMacro(ArcTickRatioSize, double);
475 
477 
480  vtkSetMacro(PolarAxisMajorTickThickness, double);
481  vtkGetMacro(PolarAxisMajorTickThickness, double);
483 
485 
488  vtkSetMacro(LastRadialAxisMajorTickThickness, double);
489  vtkGetMacro(LastRadialAxisMajorTickThickness, double);
491 
493 
496  vtkSetMacro(ArcMajorTickThickness, double);
497  vtkGetMacro(ArcMajorTickThickness, double);
499 
501 
504  vtkSetMacro(PolarAxisTickRatioThickness, double);
505  vtkGetMacro(PolarAxisTickRatioThickness, double);
507 
509 
512  vtkSetMacro(LastAxisTickRatioThickness, double);
513  vtkGetMacro(LastAxisTickRatioThickness, double);
515 
517 
520  vtkSetMacro(ArcTickRatioThickness, double);
521  vtkGetMacro(ArcTickRatioThickness, double);
523 
525 
528  vtkSetMacro(DeltaRangeMajor, double);
529  vtkGetMacro(DeltaRangeMajor, double);
531 
533 
536  vtkSetMacro(DeltaRangeMinor, double);
537  vtkGetMacro(DeltaRangeMinor, double);
539 
541 
544  vtkSetMacro(DeltaAngleMajor, double);
545  vtkGetMacro(DeltaAngleMajor, double);
547 
549 
552  vtkSetMacro(DeltaAngleMinor, double);
553  vtkGetMacro(DeltaAngleMinor, double);
555 
557 
560  vtkSetMacro(DeltaAngleRadialAxes, double);
561  vtkGetMacro(DeltaAngleRadialAxes, double);
563 
564  //------------------------------------------------
565 
567 
570  vtkSetMacro(RadialAxesVisibility, int);
571  vtkGetMacro(RadialAxesVisibility, int);
572  vtkBooleanMacro(RadialAxesVisibility, int);
574 
576 
579  vtkSetMacro(RadialTitleVisibility, int);
580  vtkGetMacro(RadialTitleVisibility, int);
581  vtkBooleanMacro(RadialTitleVisibility, int);
583 
585 
588  vtkSetMacro(PolarArcsVisibility, int);
589  vtkGetMacro(PolarArcsVisibility, int);
590  vtkBooleanMacro(PolarArcsVisibility, int);
592 
594 
597  void SetUse2DMode(int val);
598  int GetUse2DMode();
600 
602 
605  virtual void SetPolarAxisTitleTextProperty(vtkTextProperty* p);
606  vtkGetObjectMacro(PolarAxisTitleTextProperty, vtkTextProperty);
608 
610 
613  virtual void SetPolarAxisLabelTextProperty(vtkTextProperty* p);
614  vtkGetObjectMacro(PolarAxisLabelTextProperty, vtkTextProperty);
616 
618 
621  virtual void SetLastRadialAxisTextProperty(vtkTextProperty* p);
622  vtkGetObjectMacro(LastRadialAxisTextProperty, vtkTextProperty);
624 
626 
629  virtual void SetSecondaryRadialAxesTextProperty(vtkTextProperty* p);
630  vtkGetObjectMacro(SecondaryRadialAxesTextProperty, vtkTextProperty);
632 
634 
637  virtual void SetPolarAxisProperty(vtkProperty*);
638  vtkGetObjectMacro(PolarAxisProperty, vtkProperty);
640 
642 
645  virtual void SetLastRadialAxisProperty(vtkProperty* p);
646  vtkGetObjectMacro(LastRadialAxisProperty, vtkProperty);
648 
650 
653  virtual void SetSecondaryRadialAxesProperty(vtkProperty* p);
654  vtkGetObjectMacro(SecondaryRadialAxesProperty, vtkProperty);
656 
658 
661  virtual void SetPolarArcsProperty(vtkProperty* p);
662  vtkProperty* GetPolarArcsProperty();
664 
666 
669  virtual void SetSecondaryPolarArcsProperty(vtkProperty* p);
670  vtkProperty* GetSecondaryPolarArcsProperty();
672 
674 
680  vtkSetVector6Macro(Bounds, double);
681  double* GetBounds() VTK_OVERRIDE;
682  void GetBounds(
683  double& xmin, double& xmax, double& ymin, double& ymax, double& zmin, double& zmax);
684  void GetBounds(double bounds[6]);
686 
688 
691  vtkSetClampMacro(Ratio, double, 0.001, 100.0);
692  vtkGetMacro(Ratio, double);
694 
695 protected:
697  ~vtkPolarAxesActor() VTK_OVERRIDE;
698 
702  bool CheckMembersConsistency();
703 
708  void BuildAxes(vtkViewport*);
709 
713  void CalculateBounds();
714 
718  void SetCommonAxisAttributes(vtkAxisActor*);
719 
723  void SetPolarAxisAttributes(vtkAxisActor*);
724 
728  void CreateRadialAxes(int axisCount);
729 
733  void BuildRadialAxes();
734 
741  void AutoComputeTicksProperties();
742 
746  double ComputeIdealStep(int subDivsRequired, double rangeLength, int maxSubDivs = 1000);
747 
751  void BuildArcTicks();
752 
757  void StoreTicksPtsFromParamEllipse(
758  double a, double angleEllipseRad, double tickSize, vtkPoints* tickPts);
759 
763  void BuildPolarAxisLabelsArcs();
764 
768  void BuildPolarAxisLabelsArcsLog();
769 
773  void BuildLabelsLog();
774 
775  void BuildPolarArcsLog();
776 
780  std::string FindExponentAndAdjustValues(std::list<double>& valuesList);
781 
785  void GetSignificantPartFromValues(vtkStringArray* valuesStr, std::list<double>& valuesList);
786 
788 
791  double FFix(double);
792  double FSign(double, double);
794 
799  void AutoScale(vtkViewport* viewport);
800 
805  static double ComputeEllipseAngle(double angleInDegrees, double ratio);
806 
810  virtual void ComputeDeltaAngleRadialAxes(vtkIdType);
815  double Pole[3];
816 
820  int NumberOfRadialAxes;
821 
825  int RequestedNumberOfRadialAxes;
826 
831  bool AutoSubdividePolarAxis;
832 
836  double Ratio;
837 
841  double Range[2];
842 
846  double DeltaRangeMinor;
847 
851  double DeltaRangeMajor;
852 
856  double DeltaAngleMinor;
857 
861  double DeltaAngleMajor;
862 
866  double DeltaAngleRadialAxes;
867 
872  double MinimumRadius;
873 
878  double MaximumRadius;
879 
884  bool Log;
885 
889  bool AutoScaleRadius;
890 
895  double MinimumAngle;
896 
901  double MaximumAngle;
902 
906  double SmallestVisiblePolarAngle;
907 
911  double Bounds[6];
912 
913  // Structures for principal polar arc
914  vtkPolyData* PolarArcs;
915  vtkPolyDataMapper* PolarArcsMapper;
916  vtkActor* PolarArcsActor;
917 
919 
922  vtkPolyData* SecondaryPolarArcs;
923  vtkPolyDataMapper* SecondaryPolarArcsMapper;
924  vtkActor* SecondaryPolarArcsActor;
926 
930  vtkCamera* Camera;
931 
935  vtkAxisActor* PolarAxis;
936 
940  vtkAxisActor** RadialAxes;
941 
943 
947  char* PolarAxisTitle;
948  char* PolarLabelFormat;
950 
954  char* RadialAngleFormat;
955 
960  bool RadialUnits;
961 
966  int EnableDistanceLOD;
967 
972  double DistanceLODThreshold;
973 
978  int EnableViewAngleLOD;
979 
984  double ViewAngleLODThreshold;
985 
987 
990  int PolarAxisVisibility;
991  int PolarTitleVisibility;
992  int PolarLabelVisibility;
994 
1002  int TickLocation;
1003 
1007  int PolarTickVisibility;
1008 
1015  int ArcTicksOriginToPolarAxis;
1016 
1023  int RadialAxesOriginToPolarAxis;
1024 
1028  int AxisTickVisibility, AxisMinorTickVisibility;
1029 
1033  int ArcTickVisibility, ArcMinorTickVisibility;
1034 
1038  double PolarAxisMajorTickSize, LastRadialAxisMajorTickSize, ArcMajorTickSize;
1039 
1043  double PolarAxisTickRatioSize, LastAxisTickRatioSize, ArcTickRatioSize;
1044 
1048  double PolarAxisMajorTickThickness, LastRadialAxisMajorTickThickness, ArcMajorTickThickness;
1049 
1053  double PolarAxisTickRatioThickness, LastAxisTickRatioThickness, ArcTickRatioThickness;
1054 
1056 
1059  int RadialAxesVisibility;
1060  int RadialTitleVisibility;
1062 
1066  int RadialAxisTitleLocation;
1067 
1071  int PolarAxisTitleLocation;
1072 
1078 
1082  int PolarArcsVisibility;
1083 
1087  int DrawRadialGridlines;
1088 
1092  int DrawPolarArcsGridlines;
1093 
1097  vtkPoints* ArcMajorTickPts;
1098 
1102  vtkPoints* ArcMinorTickPts;
1103 
1105 
1108  vtkPolyData* ArcTickPolyData;
1109  vtkPolyData* ArcMinorTickPolyData;
1110  vtkPolyDataMapper* ArcTickPolyDataMapper;
1111  vtkPolyDataMapper* ArcMinorTickPolyDataMapper;
1112  vtkActor* ArcTickActor;
1113  vtkActor* ArcMinorTickActor;
1115 
1117 
1120  vtkTextProperty* PolarAxisTitleTextProperty;
1121  vtkTextProperty* PolarAxisLabelTextProperty;
1123 
1127  vtkTextProperty* LastRadialAxisTextProperty;
1128 
1132  vtkTextProperty* SecondaryRadialAxesTextProperty;
1133 
1138  vtkProperty* PolarAxisProperty;
1139 
1143  vtkProperty* LastRadialAxisProperty;
1144 
1148  vtkProperty* SecondaryRadialAxesProperty;
1149 
1151 
1155  double TitleScale;
1156 
1160  double LabelScale;
1161 
1165  double ScreenSize;
1166 
1167 private:
1168  vtkPolarAxesActor(const vtkPolarAxesActor&) VTK_DELETE_FUNCTION;
1169  void operator=(const vtkPolarAxesActor&) VTK_DELETE_FUNCTION;
1170 };
1171 
1172 #endif
vtkTimeStamp BuildTime
represents an object (geometry &amp; properties) in a rendered scene
Definition: vtkActor.h:45
abstract specification for Viewports
Definition: vtkViewport.h:44
represent surface properties of a geometric object
Definition: vtkProperty.h:58
record modification and/or execution time
Definition: vtkTimeStamp.h:32
Create an axis with tick marks and labels.
Definition: vtkAxisActor.h:71
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
a vtkAbstractArray subclass for strings
int vtkIdType
Definition: vtkType.h:345
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
static vtkActor * New()
Creates an actor with the following defaults: origin(0,0,0) position=(0,0,0) scale=(1,1,1) visibility=1 pickable=1 dragable=1 orientation=(0,0,0).
void ReleaseGraphicsResources(vtkWindow *) override
Release any graphics resources that are being consumed by this actor.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:34
a simple class to control print indentation
Definition: vtkIndent.h:33
a virtual camera for 3D rendering
Definition: vtkCamera.h:44
vtkGetStringMacro(ExtensionsString)
Returns a string listing all available extensions.
double * GetBounds() override
Return a reference to the Prop3D&#39;s composite transform.
represent text properties.
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
map vtkPolyData to graphics primitives
vtkBooleanMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
int RenderOpaqueGeometry(vtkViewport *viewport) override
Support the standard render methods.
represent and manipulate 3D points
Definition: vtkPoints.h:33
#define VTK_MAXIMUM_NUMBER_OF_RADIAL_AXES
create an actor of a polar axes -