BinnerAxis.cxx

Go to the documentation of this file.
00001 
00012 //inconsistent dll
00013 #ifdef _MSC_VER
00014 #include "msdevstudio/MSconfig.h"
00015 #endif
00016 
00017 #include "BinnerAxis.h"
00018 
00019 using std::vector;
00020 using std::string;
00021 
00022 using namespace hippodraw;
00023 
00024 int BinnerAxis::s_num_bins = 50;
00025 double BinnerAxis::s_bin_factor = 0.75;
00026 
00027 BinnerAxis::BinnerAxis ( const char * name )
00028   : m_name ( name ), 
00029     m_dragging ( false ),
00030     m_num_bins ( s_num_bins ), 
00031     m_range( 0.0, 50.0 ),
00032     m_offset( 0.0 ),
00033     m_width ( -1.0 )
00034 {
00035 }
00036 
00037 BinnerAxis::BinnerAxis ( const BinnerAxis & binner )
00038   : m_name ( binner.m_name ),
00039     m_dragging ( false ),
00040     m_num_bins( binner.m_num_bins ),
00041     m_range ( binner.m_range ),
00042     m_offset ( binner.m_offset ),
00043     m_width ( binner.m_width )
00044 {
00045 }
00046 
00047 BinnerAxis::~BinnerAxis ()
00048 {
00049 }
00050 
00051 const string &
00052 BinnerAxis::
00053 name () const
00054 {
00055   return m_name;
00056 }
00057 
00058 bool
00059 BinnerAxis::hasEqualWidths () const
00060 {
00061   return false;
00062 }
00063 
00064 double
00065 BinnerAxis::axisGetLow() const
00066 {
00067   return m_range.low();
00068 }
00069 
00070 double
00071 BinnerAxis::axisGetHigh() const
00072 {
00073   return m_range.high();
00074 }
00075 
00076 const Range &
00077 BinnerAxis::
00078 getRange() const
00079 {
00080   return m_range;
00081 }
00082 
00083 int
00084 BinnerAxis::axisNumberOfBins () const
00085 {
00086   return m_num_bins;
00087 }
00088 
00089 void
00090 BinnerAxis::setStartRange ( bool dragging ) const
00091 {
00092   if ( m_dragging == false ) {
00093     m_range_start = m_range;
00094   }
00095 
00096   m_dragging = dragging;
00097 }
00098 
00099 void
00100 BinnerAxis::setStartWidth ( bool dragging ) const
00101 {
00102   if ( m_dragging == false ) {
00103     m_width_start = m_width;
00104   }
00105 
00106   m_dragging = dragging;
00107 }
00108 
00109 
00110 const vector< double > & BinnerAxis::binEdges ()
00111 {
00112   
00113   if( m_bin_edges.size() == 0 )
00114     {
00115       m_bin_edges.resize( m_num_bins + 1);
00116       
00117       m_bin_edges[0] = m_range.low();
00118 
00119       for( int i = 0; i < m_num_bins; i ++ )
00120         m_bin_edges[i] = m_bin_edges[i-1] + axisBinWidth( i );
00121 
00122       m_bin_edges[ m_num_bins + 1 ] = m_range.high();
00123     }
00124   
00125   return m_bin_edges;
00126 }
00127 
00128 double
00129 BinnerAxis::
00130 calcBinWidth ( int parm, bool dragging ) const
00131 {
00132   setStartWidth ( dragging );
00133 
00134   double multiplier = ( 50 - parm ) / 50.0;
00135   int num_start = getNob ( m_width_start );
00136   if ( num_start == 1 ) {
00137     multiplier *= 4.0;
00138   }
00139   double num_new = num_start + num_start * multiplier;
00140 
00141   num_new = std::max ( 1.0, num_new );
00142   m_num_bins = static_cast < int > ( num_new );
00143   double new_width = calcWidthParm ( m_num_bins );
00144 
00145   return new_width;
00146 }
00147 

Generated for HippoDraw Class Library by doxygen