00001
00002
00003 #include "Iguana/GLBrowsers/interface/IgQtRangeMValueFloat.h"
00004 #include <algorithm>
00005 #include <cmath>
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 IgQtRangeMValueFloat::IgQtRangeMValueFloat (float value ,
00018 float min ,
00019 float max )
00020 : inherited (value, min, max),
00021 IgQtRangeValuePrecision (.01)
00022 { }
00023
00024 IgQtRangeMValueFloat::IgQtRangeMValueFloat (unsigned int size,
00025 const float* values,
00026 float min ,
00027 float max )
00028 : inherited (size, values, min, max),
00029 IgQtRangeValuePrecision (.01)
00030 { }
00031
00032 IgQtRangeMValueFloat::IgQtRangeMValueFloat (const rangeMValues& values,
00033 float min ,
00034 float max )
00035 : inherited (values, min, max),
00036 IgQtRangeValuePrecision (.01)
00037 { }
00038
00039 void
00040 IgQtRangeMValueFloat::setValue (unsigned int index, float value)
00041 {
00042 ASSERT ( index < m_value.size() );
00043 value = roundOff (adjustValue (value), precision ());
00044 m_change[index] += value - m_value [index];
00045 m_value[index] = value;
00046 m_valueChangeFlag = isValueChanged (index);
00047 }
00048
00049 bool
00050 IgQtRangeMValueFloat::isValueChanged (unsigned int index) const
00051 { return fabs (valueChange (index)) >= precision (); }
00052
00054 float
00055 IgQtRangeMValueFloat::roundOff (float number, float precision )
00056 {
00057 if ((precision = fabs (precision)) > 0)
00058 {
00059 if (precision < minimumPrecision ())
00060 precision = minimumPrecision ();
00061
00062 if (precision < 1.0)
00063 number = m_min + round ((number - m_min) / precision) * precision;
00064 else
00065 number = round (number);
00066 }
00067 return number;
00068 }
00069
00071 void
00072 IgQtRangeMValueFloat::forceValueChanged (float delta)
00073 {
00074 unsigned int size = m_change.size ();
00075 for (unsigned int i = 0; i < size; i++)
00076 m_change [i] = delta;
00077
00078 if (fabs (delta) >= precision ())
00079 m_valueChangeFlag = true;
00080 else
00081 m_valueChangeFlag = false;
00082 }
00083
00084 void
00085 IgQtRangeMValueFloat::forceValueChanged (unsigned int index, float delta)
00086 {
00087 ASSERT ( index < m_change.size() );
00088 m_change [index] = delta;
00089 if (fabs (delta) >= precision ())
00090 m_valueChangeFlag = true;
00091 }