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] |