|
inlib
1.2.0
|
Public Member Functions | |
| axis () | |
| virtual | ~axis () |
| axis (const axis &a_from) | |
| axis & | operator= (const axis &a_from) |
| bool | is_log (bool a_v) |
| bool | min_value (float a_v) |
| bool | max_value (float a_v) |
| float | min_value () const |
| float | max_value () const |
| bool | is_log () const |
| void | adjust_axis () |
Protected Attributes | |
| float | m_min_value |
| float | m_max_value |
| int | m_steps |
| bool | m_is_log |
| inlib::sg::axis::axis | ( | ) | [inline] |
Definition at line 14 of file axis.
:m_min_value(0) ,m_max_value(0) ,m_steps(0) ,m_is_log(false) {}
| inlib::sg::axis::axis | ( | const axis & | a_from | ) | [inline] |
Definition at line 22 of file axis.
:m_min_value(a_from.m_min_value) ,m_max_value(a_from.m_max_value) ,m_steps(a_from.m_steps) ,m_is_log(a_from.m_is_log) {}
| void inlib::sg::axis::adjust_axis | ( | ) | [inline] |
Definition at line 55 of file axis.
{ //from hippodraw.
int axis = 0;
float step;
float mylow, myhigh;
#define N_NICE 4
static const float nice[N_NICE] = { 1.0,2.0,2.5,5.0 };
if (m_min_value > m_max_value) {
float low = m_min_value;
m_min_value = m_max_value;
m_max_value = low;
} else if (m_min_value == m_max_value) {
float value = m_min_value;
m_min_value = value - 1;
m_max_value = value + 1;
return;
}
//if (m_steps <= 0) {
axis = 1;
m_steps = 10;
//}
// Round the "bin width" to a nice number.
// If this is being done for an axis (ie m_steps was 0 , then
// we don't have to go > *m_max_value.
//
float w = (m_max_value - m_min_value)/((float)m_steps);
float mag = ffloor(flog10(w));
int i = 0;
do {
step = nice[i] * fpow(10.0,mag);
mylow = ffloor(m_min_value/step) * step;
myhigh = axis==1 ? fceil(m_max_value/step) * step :
mylow + step * m_steps;
i++;
if (i>=N_NICE) {
i = 0;
mag++;
}
}
while ( ( (axis==1) && myhigh < m_max_value) ||
( (axis==0) && myhigh <= m_max_value) );
float range = myhigh - mylow;
// we now have decided on a range. Try to move
// m_min_value/m_max_value a little
// to end up on a nice number.
//
// first check if either end is near 0.0
if ( !m_is_log && (m_min_value >= 0.0) &&
(( (axis==1) && (range>=m_max_value) ) ||
( (axis==0) && (range>m_max_value) )) ) {
m_min_value = 0.0;
m_max_value = range;
return;
}
if ( (( (axis==1) && (m_max_value<=0.0) ) ||
( (axis==0) && (m_max_value<0.0) ))
&& (-range<=m_min_value)) {
m_max_value = 0.0;
m_min_value = -range;
return;
}
// try to round *m_min_value.
// correction
if( m_is_log && (m_min_value<=0.0)) {
m_min_value = 1.0;
}
i = N_NICE-1;
mag = myhigh != 0.0 ? fceil(flog10(ffabs(myhigh))) :
fceil(flog10(ffabs(mylow)));
do {
step = nice[i] * fpow(10.0,mag);
mylow = ffloor(m_min_value/step) * step;
myhigh = mylow + range;
i--;
if (i<0) {
i = N_NICE-1;
mag--;
}
}
while (( m_is_log && (mylow <= 0.0) ) ||
( (axis==1) && (myhigh < m_max_value) ) ||
( (axis==0) && (myhigh <= m_max_value) ) );
m_min_value = mylow;
m_max_value = myhigh;
}
| bool inlib::sg::axis::is_log | ( | bool | a_v | ) | [inline] |
| bool inlib::sg::axis::is_log | ( | ) | const [inline] |
| bool inlib::sg::axis::max_value | ( | float | a_v | ) | [inline] |
Definition at line 46 of file axis.
{
if(m_max_value==a_v) return false;
m_max_value = a_v;
return true;
}
| float inlib::sg::axis::max_value | ( | ) | const [inline] |
Definition at line 52 of file axis.
{return m_max_value;}
| bool inlib::sg::axis::min_value | ( | float | a_v | ) | [inline] |
Definition at line 41 of file axis.
{
if(m_min_value==a_v) return false;
m_min_value = a_v;
return true;
}
| float inlib::sg::axis::min_value | ( | ) | const [inline] |
Definition at line 51 of file axis.
{return m_min_value;}
Definition at line 28 of file axis.
{
m_min_value = a_from.m_min_value;
m_max_value = a_from.m_max_value;
m_steps = a_from.m_steps;
m_is_log = a_from.m_is_log;
return *this;
}
bool inlib::sg::axis::m_is_log [protected] |
float inlib::sg::axis::m_max_value [protected] |
float inlib::sg::axis::m_min_value [protected] |
int inlib::sg::axis::m_steps [protected] |
1.7.5.1