00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00028 #ifndef __vtkAxis_h
00029 #define __vtkAxis_h
00030
00031 #include "vtkContextItem.h"
00032 #include "vtkSmartPointer.h"
00033 #include "vtkVector.h"
00034 #include "vtkRect.h"
00035 #include "vtkStdString.h"
00036
00037 class vtkContext2D;
00038 class vtkPen;
00039 class vtkFloatArray;
00040 class vtkDoubleArray;
00041 class vtkStringArray;
00042 class vtkTextProperty;
00043
00044 class VTK_CHARTS_EXPORT vtkAxis : public vtkContextItem
00045 {
00046 public:
00047 vtkTypeMacro(vtkAxis, vtkContextItem);
00048 virtual void PrintSelf(ostream &os, vtkIndent indent);
00049
00051
00053 enum {
00054 LEFT = 0,
00055 BOTTOM,
00056 RIGHT,
00057 TOP,
00058 PARALLEL
00059 };
00061
00063 static vtkAxis *New();
00064
00066
00068 virtual void SetPosition(int position);
00069 vtkGetMacro(Position, int);
00071
00073
00074 void SetPoint1(const vtkVector2f& pos);
00075 void SetPoint1(float x, float y);
00077
00079
00080 vtkGetVector2Macro(Point1, float);
00081 vtkVector2f GetPosition1();
00083
00085
00086 void SetPoint2(const vtkVector2f& pos);
00087 void SetPoint2(float x, float y);
00089
00091
00092 vtkGetVector2Macro(Point2, float);
00093 vtkVector2f GetPosition2();
00095
00097
00099 vtkSetMacro(NumberOfTicks, int);
00101
00103
00104 vtkGetMacro(NumberOfTicks, int);
00106
00108
00110 vtkGetObjectMacro(LabelProperties, vtkTextProperty);
00112
00114 virtual void SetMinimum(double minimum);
00115
00117
00118 vtkGetMacro(Minimum, double);
00120
00122 virtual void SetMaximum(double maximum);
00123
00125
00126 vtkGetMacro(Maximum, double);
00128
00130 virtual void SetRange(double minimum, double maximum);
00131
00134 virtual void SetMinimumLimit(double lowest);
00135
00137
00139 vtkGetMacro(MinimumLimit, double);
00141
00144 virtual void SetMaximumLimit(double highest);
00145
00147
00149 vtkGetMacro(MaximumLimit, double);
00151
00153
00154 virtual void SetTitle(const vtkStdString &title);
00155 virtual vtkStdString GetTitle();
00157
00159
00160 vtkGetObjectMacro(TitleProperties, vtkTextProperty);
00162
00164
00165 vtkSetMacro(LogScale, bool);
00166 vtkGetMacro(LogScale, bool);
00168
00170
00171 vtkSetMacro(GridVisible, bool);
00172 vtkGetMacro(GridVisible, bool);
00174
00176
00177 vtkSetMacro(LabelsVisible, bool);
00178 vtkGetMacro(LabelsVisible, bool);
00180
00182
00183 virtual void SetPrecision(int precision);
00184 vtkGetMacro(Precision, int);
00186
00188
00189 enum {
00190 STANDARD = 0,
00191 SCIENTIFIC,
00192 MIXED
00193 };
00195
00197
00199 virtual void SetNotation(int notation);
00200 vtkGetMacro(Notation, int);
00202
00204
00205 enum {
00206 AUTO = 0,
00207 FIXED,
00208 CUSTOM
00209 };
00211
00213
00215 vtkSetMacro(Behavior, int);
00216 vtkGetMacro(Behavior, int);
00218
00220
00222 vtkGetObjectMacro(Pen, vtkPen);
00224
00226
00228 vtkGetObjectMacro(GridPen, vtkPen);
00230
00233 virtual void Update();
00234
00236 virtual bool Paint(vtkContext2D *painter);
00237
00242 virtual void AutoScale();
00243
00246 virtual void RecalculateTickSpacing();
00247
00250 virtual vtkDoubleArray* GetTickPositions();
00251
00253 virtual void SetTickPositions(vtkDoubleArray* positions);
00254
00257 virtual vtkFloatArray* GetTickScenePositions();
00258
00260 virtual vtkStringArray* GetTickLabels();
00261
00263 virtual void SetTickLabels(vtkStringArray* labels);
00264
00270 vtkRectf GetBoundingRect(vtkContext2D* painter);
00271
00272
00273 protected:
00274 vtkAxis();
00275 ~vtkAxis();
00276
00278 void GenerateTickLabels(double min, double max);
00279
00282 void GenerateTickLabels();
00283
00286 double CalculateNiceMinMax(double &min, double &max);
00287
00291 double NiceNumber(double number, bool roundUp);
00292
00294
00300 double LogScaleTickMark(double number,
00301 bool roundUp,
00302 bool &niceValue,
00303 int &order);
00305
00307
00314 void GenerateLogScaleTickMarks(int order,
00315 double min = 1.0,
00316 double max = 9.0,
00317 bool detailLabels = true);
00319
00320 int Position;
00321 float *Point1;
00322 float *Point2;
00323 vtkVector2f Position1, Position2;
00324 double TickInterval;
00325 int NumberOfTicks;
00326 vtkTextProperty* LabelProperties;
00327 double Minimum;
00328 double Maximum;
00329 double MinimumLimit;
00330 double MaximumLimit;
00331 vtkStdString Title;
00332 vtkTextProperty* TitleProperties;
00333 bool LogScale;
00334 bool GridVisible;
00335 bool LabelsVisible;
00336 int Precision;
00337 int Notation;
00338 int Behavior;
00339 float MaxLabel[2];
00340
00342 vtkPen* Pen;
00343
00346 vtkPen* GridPen;
00347
00349 vtkSmartPointer<vtkDoubleArray> TickPositions;
00350
00352 vtkSmartPointer<vtkFloatArray> TickScenePositions;
00353
00355 vtkSmartPointer<vtkStringArray> TickLabels;
00356
00359 bool UsingNiceMinMax;
00360
00362 bool TickMarksDirty;
00363
00365 bool Resized;
00366
00368 bool LogScaleReasonable;
00369
00371 vtkTimeStamp BuildTime;
00372
00373 private:
00374 vtkAxis(const vtkAxis &);
00375 void operator=(const vtkAxis &);
00376
00377 };
00378
00379 #endif //__vtkAxis_h