25 mutable bool _needsUpdate;
32 mutable double _markOffset;
33 mutable double _markGap;
48 CLAM_ASSERT(min<max,
"RulerTicks: Empty or inverse order range");
56 CLAM_ASSERT(width>0,
"RulerTicks: Pixel width should be greater than zero");
68 if (_needsUpdate)
update();
73 if (_needsUpdate)
update();
78 double mappedMinGap = std::fabs(_minGap*(_max-_min)/_width);
84 if (_markGap>=mappedMinGap)
break;
85 if (_markGap*2>=mappedMinGap) {_markGap*=2;
break;}
86 if (_markGap*5>=mappedMinGap) {_markGap*=5;
break;}
94 if (_markGap<1e-8) {_markGap=1e-8;
break;}
95 if (_markGap<mappedMinGap) {
break;}
96 if (_markGap/2<mappedMinGap) {_markGap/=2;
break;}
97 if (_markGap/5<mappedMinGap) {_markGap/=5;
break;}
101 double ceil = std::ceil(_min/_markGap);
102 _markOffset = (std::fabs(ceil)<1e-5)? 0. : ceil*_markGap;
104 _needsUpdate =
false;
109 if (_needsUpdate)
update();
110 return _markOffset+_markGap*i;
120 return (value-_min)*_width/(_max-_min);
125 if (_needsUpdate)
update();
126 return std::ceil((_max-_markOffset)/_markGap);
132 #endif//RulerTicks_hxx