CMS 3D CMS Logo

IgQtRangeMValueFloat.cc

Go to the documentation of this file.
00001 //<<<<<< INCLUDES                                                       >>>>>>
00002 
00003 #include "Iguana/GLBrowsers/interface/IgQtRangeMValueFloat.h"
00004 #include <algorithm>
00005 #include <cmath>
00006 
00007 //<<<<<< PRIVATE DEFINES                                                >>>>>>
00008 //<<<<<< PRIVATE CONSTANTS                                              >>>>>>
00009 //<<<<<< PRIVATE TYPES                                                  >>>>>>
00010 //<<<<<< PRIVATE VARIABLE DEFINITIONS                                   >>>>>>
00011 //<<<<<< PUBLIC VARIABLE DEFINITIONS                                    >>>>>>
00012 //<<<<<< CLASS STRUCTURE INITIALIZATION                                 >>>>>>
00013 //<<<<<< PRIVATE FUNCTION DEFINITIONS                                   >>>>>>
00014 //<<<<<< PUBLIC FUNCTION DEFINITIONS                                    >>>>>>
00015 //<<<<<< MEMBER FUNCTION DEFINITIONS                                    >>>>>>
00016 
00017 IgQtRangeMValueFloat::IgQtRangeMValueFloat (float value /* = 0. */,
00018                                             float min /* = SHRT_MIN */,
00019                                             float max /* = SHRT_MAX */)
00020     : inherited (value, min, max),
00021       IgQtRangeValuePrecision (.01)
00022 { }
00023 
00024 IgQtRangeMValueFloat::IgQtRangeMValueFloat (unsigned int size,
00025                                             const float* values,
00026                                             float min /* = SHRT_MIN */,
00027                                             float max /* = SHRT_MAX */)
00028     : inherited (size, values, min, max),
00029       IgQtRangeValuePrecision (.01)
00030 { }
00031 
00032 IgQtRangeMValueFloat::IgQtRangeMValueFloat (const rangeMValues& values,
00033                                             float min /* = SHRT_MIN */,
00034                                             float max /* = SHRT_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 /* = .0001 */)
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 }

Generated on Tue Jun 9 17:38:39 2009 for CMSSW by  doxygen 1.5.4