9 #ifndef ROOT7_RPadUserAxis
10 #define ROOT7_RPadUserAxis
18 namespace Experimental {
28 class RPadUserAxisBase {
32 enum EAxisBoundsKind {
36 kAxisBoundsBeginEnd = kAxisBoundsBegin | kAxisBoundsEnd,
41 int fBoundsKind = kAxisBoundsAuto;
51 RPadUserAxisBase() =
default;
54 RPadUserAxisBase(
double begin,
double end): fBoundsKind(kAxisBoundsBeginEnd), fBegin(begin), fEnd(end) {}
57 RPadUserAxisBase(EAxisBoundsKind boundKind,
double bound):
58 fBoundsKind(boundKind), fBegin(bound), fEnd(bound) {}
61 RPadUserAxisBase(
const RPadUserAxisBase &) =
default;
64 RPadUserAxisBase &operator=(
const RPadUserAxisBase &) =
default;
67 double GetSensibleDenominator()
const
70 return std::max(std::numeric_limits<double>::min(), fEnd - fBegin);
71 return std::min(-std::numeric_limits<double>::min(), fEnd - fBegin);
75 virtual ~RPadUserAxisBase();
77 EAxisBoundsKind GetBoundsKind()
const {
return static_cast<EAxisBoundsKind
>(fBoundsKind); }
78 bool RespectBegin()
const {
return fBoundsKind & kAxisBoundsBegin; }
79 bool RespectEnd()
const {
return fBoundsKind & kAxisBoundsEnd; }
81 double GetBegin()
const {
return fBegin; }
82 double GetEnd()
const {
return fEnd; }
84 void SetBounds(
double begin,
double end)
86 fBoundsKind = kAxisBoundsBeginEnd;
90 void SetBound(EAxisBoundsKind boundKind,
double bound) { fBoundsKind = boundKind; fBegin = fEnd = bound; }
91 void SetAutoBounds() { fBoundsKind = kAxisBoundsAuto; }
93 void SetBegin(
double begin) { fBoundsKind |= kAxisBoundsBegin; fBegin = begin; }
94 void SetEnd(
double end) { fBoundsKind |= kAxisBoundsEnd; fEnd = end; }
97 virtual RPadLength::Normal ToNormal(
const RPadLength::User &)
const = 0;
100 class RPadCartesianUserAxis:
public RPadUserAxisBase {
103 bool fLogScale =
false;
107 RPadCartesianUserAxis() =
default;
110 RPadCartesianUserAxis(
double begin,
double end): RPadUserAxisBase(begin, end) {}
113 RPadCartesianUserAxis(EAxisBoundsKind boundKind,
double bound):
114 RPadUserAxisBase(boundKind, bound) {}
116 bool IsLogScale()
const {
return fLogScale; }
117 void SetLogScale(
bool logScale =
true) { fLogScale = logScale; }
120 RPadLength::Normal ToNormal(
const RPadLength::User &usercoord)
const override;