Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

AxisModelBase.cxx

Go to the documentation of this file.
00001 
00012 // for dll interface warning
00013 #ifdef _MSC_VER
00014 #include "msdevstudio/MSconfig.h"
00015 #endif
00016 
00017 #include "AxisModelBase.h"
00018 #include "AxisTick.h"
00019 
00020 #include <algorithm>
00021 
00022 #include <cassert>
00023 
00024 using std::string;
00025 using std::vector;
00026 
00027 AxisModelBase::AxisModelBase ( AxisLoc label, AxisLoc scale )
00028   : m_range( 0.0, 1.0 ),
00029     m_start_range ( -1.0, 1.0 ),
00030     m_is_dragging ( false ),
00031     m_auto_range ( true ),
00032     m_empty( true ),
00033     m_scale_factor ( 1.0 ),
00034     m_scaling_on ( false ),
00035     m_first_tick( 0.0 ),
00036     m_max_ticks( 20 ), 
00037     m_num_minor_ticks( 0 ),
00038     m_label_location( label ),
00039     m_scale_location( scale ),
00040     m_pmag( 0.0 ),
00041     m_use_pmag( false ),
00042     m_ticks( m_max_ticks ),
00043     m_auto_ticks ( true )
00044 {
00045 }
00046 
00047 AxisModelBase::AxisModelBase( const AxisModelBase & axis_model )
00048   : m_range( axis_model.m_range ),
00049     m_start_range ( 0.0, 1.0 ),
00050     m_is_dragging ( false ),
00051     m_auto_range( axis_model.m_auto_range ),
00052     m_empty( axis_model.m_empty ),
00053     m_scale_factor( axis_model.m_scale_factor ),
00054     m_scaling_on ( axis_model.m_scaling_on ),
00055     m_first_tick( axis_model.m_first_tick ),
00056     m_tick_step( axis_model.m_tick_step ),
00057     m_max_ticks( 20 ),
00058     m_num_minor_ticks( axis_model.m_num_minor_ticks ),
00059     m_label_location( axis_model.m_label_location ),
00060     m_scale_location( axis_model.m_scale_location ),
00061     m_pmag( axis_model.m_pmag ), 
00062     m_use_pmag( axis_model.m_use_pmag ),
00063     m_ticks( axis_model.m_ticks ),
00064     m_auto_ticks ( axis_model.m_auto_ticks )
00065 {
00066 }
00067 
00068 AxisModelBase::~AxisModelBase()
00069 {
00070 }
00071 
00072 void AxisModelBase::setTickStep( const double & t_step ) 
00073 {
00074   m_tick_step = t_step;
00075 }
00076 
00077 double AxisModelBase::getTickStep() const
00078 {
00079   return m_tick_step;
00080 }
00081 
00082 void AxisModelBase::setFirstTick( const double & first_tick ) 
00083 {
00084   m_first_tick = first_tick;
00085 }
00086 
00087 double AxisModelBase::getFirstTick() const
00088 {
00089   return m_first_tick; 
00090 }
00091 
00092 double AxisModelBase::getMaxTicks() const
00093 {
00094   return m_max_ticks; 
00095 }
00096 
00097 void AxisModelBase::setRMag( const double & rmag ) 
00098 {
00099   m_rmag = rmag;
00100 }
00101 
00102 double AxisModelBase::getRMag() const
00103 {
00104   return m_rmag;
00105 }
00106 
00107 void AxisModelBase::setPMag( const double & pmag ) 
00108 {
00109   m_pmag = pmag;
00110 }
00111 
00112 double AxisModelBase::getPMag() const
00113 {
00114   return m_pmag;
00115 }
00116 
00117 bool AxisModelBase::needPMag() const
00118 {
00119   return m_use_pmag;
00120 }
00121 
00122 void AxisModelBase::setUsePMag( const bool & use_p_mag )
00123 {
00124   m_use_pmag = use_p_mag;
00125 }
00126 
00127 AxisLoc AxisModelBase::getLabelLocation() const
00128 {
00129   return m_label_location;
00130 }
00131 
00132 AxisLoc AxisModelBase::getScaleLocation() const
00133 {
00134   return m_scale_location;
00135 }
00136 
00137 void
00138 AxisModelBase::
00139 setAutoTicks ( bool yes )
00140 {
00141   m_auto_ticks = yes;
00142 }
00143 
00144 bool
00145 AxisModelBase::
00146 isAutoTicks ( ) const
00147 {
00148   return m_auto_ticks;
00149 }
00150 
00151 void
00152 AxisModelBase::
00153 setTicks ( const std::vector < AxisTick > & ticks)
00154 {
00155   m_ticks = ticks;
00156 }
00157 
00158 const vector<AxisTick> &
00159 AxisModelBase::getTicks() const
00160 {
00161   return m_ticks;
00162 }
00163 
00164 
00165 void AxisModelBase::setRange ( double low, double high, double pos )
00166 {
00167   if ( low > high ) std::swap ( low, high );
00168   m_range.setRange ( low, high, pos );
00169 }
00170 
00171 void AxisModelBase::setRange( const Range & range, bool scaled )
00172 {
00173   if ( range.length () < DBL_EPSILON ) {
00174     return;
00175   }
00176   Range myrange = range;
00177   if( scaled ){
00178     Range newrange( range.low() / m_scale_factor,
00179                    range.high() / m_scale_factor,
00180                    range.pos() );
00181     myrange = newrange;
00182   }
00183   
00184   m_range = myrange;
00185 
00186   // I could just call adjustLogValues() without a check, since linear
00187   // does nothing in that function.  However, this assures that the
00188   // graph actually has content, which may or may not be important in
00189   // adjustLogValues(), so I'm playing it on the safe side.
00190   // Note that this causes problems in binned axes, because this has
00191   // already bypassed the binner's dialogue. Therefore, this is only a
00192   // secondary backup, as adjustLogValues() would have already been
00193   // called for binned axes through the projector.
00194   if( isLog() ) adjustLogValues();
00195 
00196   m_empty = false;
00197 
00198 }
00199 
00200 void AxisModelBase::setIntersectRange ( const Range & r1, const Range & r2 )
00201 {
00202   m_range = r1;
00203   m_range.setIntersect ( r2 );
00204 }
00205 
00206 void
00207 AxisModelBase::
00208 setRangePos ( double pos )
00209 {
00210   assert( pos > 0.0 );
00211   m_range.setPos( pos );
00212 }
00213 
00214 void AxisModelBase::setUnionRange ( const Range & range )
00215 {
00216   if( m_empty ) {
00217     m_range = range;
00218     m_range.setEmpty ( false );
00219     m_empty = false;
00220   }
00221   else {
00222     m_range.setUnion( range );
00223   }
00224 }
00225 
00226 void AxisModelBase::setEmpty()
00227 {
00228   m_empty = true;
00229 }
00230 
00231 const Range & AxisModelBase::getRange(bool scaled) const
00232 {
00233 
00234   if(!scaled)
00235     return m_range;
00236   
00237   double low = m_range.low() * m_scale_factor;
00238   double high = m_range.high() * m_scale_factor;
00239 
00240   Range range ( low, high );
00241   m_scaled_range = range;
00242 
00243   return m_scaled_range;
00244 }
00245 
00246 void AxisModelBase::setAutoRanging ( bool flag )
00247 {
00248   m_auto_range = flag;
00249 }
00250 
00251 bool AxisModelBase::isAutoRanging () const
00252 {
00253   return m_auto_range;
00254 }
00255 
00256 void AxisModelBase::setScaleFactor ( double sf )
00257 {
00258   m_scale_factor = sf;
00259   m_scaling_on = true;
00260 }
00261 
00262 double AxisModelBase::getScaleFactor () const
00263 {
00264   if ( m_scaling_on == false ) return 1.0;
00265   // else
00266   return m_scale_factor;
00267 }
00268 
00269 bool AxisModelBase:: isScaling ( ) const
00270 {
00271   return m_scaling_on;
00272 }
00273 
00274 void AxisModelBase:: setScaling ( bool on )
00275 {
00276   m_scaling_on = on;
00277   if ( on == false ) m_scale_factor = 1.0;
00278 }
00279 
00280 void AxisModelBase::startDragging ( bool dragging )
00281 {
00282   if ( m_is_dragging == false  ) {
00283     m_start_range = m_range;
00284   }
00285   m_is_dragging = dragging;
00286 }

Generated for HippoDraw-1.14.8.5 by doxygen 1.4.3