RulerTicks.hxx

Go to the documentation of this file.
00001 #ifndef RulerTicks_hxx
00002 #define RulerTicks_hxx
00003 
00004 #include <cmath>
00005 namespace CLAM
00006 {
00007 
00008 class RulerTicks
00009 {
00010                 double _min;
00011                 double _max;
00012                 double _markGap;
00013                 double _minGap;
00014                 double _width;
00015         public:
00017                 void setRange(double min, double max)
00018                 {
00019                         _min = min;
00020                         _max = max;
00021                 }
00023                 void setWidth(double width)
00024                 {
00025                         _width = width;
00026                 }
00028                 void setMinGap(double minGap)
00029                 {
00030                         _minGap = minGap;
00031                 }
00032                 double markOffset() const
00033                 {
00034                         double gap = markGap();
00035                         double ceil = std::ceil(_min/gap);
00036                         if (std::fabs(ceil)<1e-5) return 0.;
00037                         return ceil*gap;
00038                 }
00039                 double markGap() const
00040                 {
00041                         double mappedMinGap = std::fabs(_minGap*(_max-_min)/_width);
00042                         double markGap=1;
00043                         if (mappedMinGap>=1)
00044                         {
00045                                 while (true)
00046                                 {
00047                                         if (markGap>=mappedMinGap) return markGap;
00048                                         if (markGap*2>=mappedMinGap) return markGap*2;
00049                                         if (markGap*5>=mappedMinGap) return markGap*5;
00050                                         markGap*=10;
00051                                 }
00052                         }
00053                         else
00054                         {
00055                                 while (true)
00056                                 {
00057                                         if (markGap<1e-8) return 1e-8;
00058                                         if (markGap<mappedMinGap) return markGap;
00059                                         if (markGap/2<mappedMinGap) return markGap/2;
00060                                         if (markGap/5<mappedMinGap) return markGap/5;
00061                                         markGap/=10;
00062                                 }
00063                         }
00064                         return markGap;
00065                 }
00066 };
00067 
00068 } // namespace CLAM
00069 
00070 #endif//RulerTicks_hxx
00071 

Generated on Tue Aug 12 22:33:44 2008 for CLAM by  doxygen 1.5.5