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

CutRangeRep.cxx

Go to the documentation of this file.
00001 
00012 #include "CutRangeRep.h"
00013 
00014 #include "datasrcs/TupleCut.h"
00015 #include "graphics/ViewBase.h"
00016 #include "transforms/BinaryTransform.h"
00017 
00018 using std::vector;
00019 
00020 CutRangeRep::CutRangeRep ( )
00021   : PointRepBase ( "CutRangeRep", 0.0 )
00022 {
00023   setColor ( Color::yellow );
00024 }
00025 
00026 CutRangeRep::CutRangeRep ( const CutRangeRep & point_rep )
00027   : PointRepBase ( point_rep )
00028 {
00029 }
00030 
00031 RepBase * CutRangeRep::clone()
00032 {
00033   return new CutRangeRep( *this );
00034 }
00035 
00036 void 
00037 CutRangeRep::
00038 drawRange ( const Range & x_range,
00039             const Range & y_range,
00040             const std::vector < TupleCut > & cuts,
00041             const TransformBase & tb,
00042             ViewBase & view )
00043 {
00044   int dim = cuts.size();
00045   
00046   bool yes = cuts[0].getInversion ();
00047   if ( dim == 2 ) yes |= cuts[1].getInversion ();
00048   if ( yes ) {
00049     if ( dim == 1 ) {
00050       drawInvertedRange1D ( x_range, y_range, cuts, tb, view );
00051     }
00052     else {
00053       drawInvertedRange2D ( x_range, y_range, cuts, tb, view );
00054     }
00055   }
00056   else drawNormalRange ( x_range, y_range, cuts, tb, view );
00057 }
00058 
00059 void
00060 CutRangeRep::
00061 drawNormalRange ( const Range & x_range, const Range & y_range,
00062                   const std::vector < TupleCut > & cuts,
00063                   const TransformBase & tb,
00064                   ViewBase & view )
00065 {
00066   const BinaryTransform & t 
00067     = dynamic_cast < const BinaryTransform & > ( tb );
00068   
00069   double x1 = x_range.low ();
00070   double y1 = y_range.low ();
00071   double x2 = x_range.high ();
00072   double y2 = y_range.high ();
00073   
00074   if ( cuts.size () >= 1 ) // i.e. this section applies to 1D and 2D cuts
00075     {
00076       const Range & range = cuts[0].getRange ();
00077       double cut_low = range.low ();
00078       double cut_high = range.high ();
00079       if ( cut_low > x1 ) x1 = cut_low;
00080       if ( cut_high < x2 ) x2 = cut_high;
00081     }
00082   
00083   if ( cuts.size () >= 2 ) // i.e., this section applies only to 2D cuts.
00084     {
00085       const Range & range = cuts[1].getRange ();
00086       double cut_low = range.low ();
00087       double cut_high = range.high ();
00088       if ( cut_low > y1 ) y1 = cut_low;
00089       if ( cut_high < y2 ) y2 = cut_high;
00090     }
00091   
00092   t.transform ( x1, y1 );
00093   t.transform ( x2, y2 );
00094 
00095   int red;
00096   int green;
00097   int blue;
00098   
00099   if ( m_desel == false ) {
00100     red   = m_color.getRed ();
00101     green = m_color.getGreen ();
00102     blue  = m_color.getBlue ();
00103   }
00104   else {
00105     red = s_desel_color.getRed ();
00106     green = s_desel_color.getGreen ();
00107     blue = s_desel_color.getBlue ();
00108   }
00109   view.drawSquare ( x1, y1, x2, y2, red, green, blue );
00110 }
00111 
00112 void
00113 CutRangeRep::
00114 drawInvertedRange1D ( const Range & x_range, const Range & y_range,
00115                       const std::vector < TupleCut > & cuts,
00116                       const TransformBase & tb,
00117                       ViewBase & view )
00118 {
00119   double xl = x_range.low ();
00120   double xr = x_range.high ();
00121 
00122   const Range range = cuts[0].getRange ();
00123   double cut_low = range.low();
00124   double cut_high = range.high ();
00125 
00126   double x1 = std::max ( cut_low, xl );
00127   double x2 = std::min ( cut_high, xr );
00128 
00129   double y1 = y_range.low ();
00130   double y2 = y_range.high ();
00131 
00132   double yl = y1;
00133   double yr = y2;
00134   const BinaryTransform & t 
00135     = dynamic_cast < const BinaryTransform & > ( tb );
00136   
00137   t.transform ( x1, y1 ); // careful, they get modified
00138   t.transform ( x2, y2 );
00139 
00140   t.transform ( xl, yl );
00141   t.transform ( xr, yr );
00142 
00143   int red;
00144   int green;
00145   int blue;
00146   
00147   if ( m_desel == false ) {
00148     red   = m_color.getRed ();
00149     green = m_color.getGreen ();
00150     blue  = m_color.getBlue ();
00151   }
00152   else {
00153     red = s_desel_color.getRed ();
00154     green = s_desel_color.getGreen ();
00155     blue = s_desel_color.getBlue ();
00156   }
00157   
00158   view.drawSquare ( xl, y1, x1, y2, red, green, blue );  
00159   view.drawSquare ( x2, y1, xr, yr, red, green, blue );  
00160 }
00161 
00162 void
00163 CutRangeRep::
00164 drawInvertedRange2D ( const Range & x_range, const Range & y_range,
00165                       const std::vector < TupleCut > & cuts,
00166                       const TransformBase & tb,
00167                       ViewBase & view )
00168 {
00169   const BinaryTransform & t 
00170     = dynamic_cast < const BinaryTransform & > ( tb );
00171   
00172   // loeer left hand corner of plot
00173   double xLow  = x_range.low ();
00174   double yLow  = y_range.low ();
00175 
00176   // upper right hand corner of plot
00177   double xHigh = x_range.high ();
00178   double yHigh = y_range.high ();
00179 
00180   // will be empty box in center
00181   double x1 = xLow;
00182   double x2 = xHigh;
00183   double y1 = yLow;
00184   double y2 = yHigh;
00185     
00186   if ( cuts.size () >= 1 ) // i.e. this section applies to 1D and 2D cuts
00187     {
00188       const Range & range = cuts[0].getRange ();
00189       double cut_low = range.low();
00190       double cut_high = range.high ();
00191       if ( cut_low > x1 ) x1 = cut_low;
00192       if ( cut_high < x2 ) x2 = cut_high;
00193     }
00194   
00195   if ( cuts.size() >= 2 ) // i.e. applies only to 2D cuts
00196     {
00197       const Range & range = cuts[1].getRange ();
00198       double cut_low = range.low();
00199       double cut_high = range.high();
00200       if ( cut_low > y1 ) y1 = cut_low;
00201       if ( cut_high < y2 ) y2 = cut_high;
00202     }
00203   
00204   t.transform ( x1, y1 );
00205   t.transform ( x2, y2 );
00206 
00207   t.transform ( xLow, yLow );
00208   t.transform ( xHigh, yHigh );
00209   
00210   int red;
00211   int green;
00212   int blue;
00213   
00214   if ( m_desel == false ) {
00215     red   = m_color.getRed ();
00216     green = m_color.getGreen ();
00217     blue  = m_color.getBlue ();
00218   }
00219   else {
00220     red = s_desel_color.getRed ();
00221     green = s_desel_color.getGreen ();
00222     blue = s_desel_color.getBlue ();
00223   }
00224   
00225   
00226   // left box
00227   view.drawSquare( xLow, yLow,    x1, yHigh, red, green, blue );
00228 
00229   // right box
00230   view.drawSquare(   x2, yLow, xHigh, yHigh, red, green, blue );
00231 
00232   // upper midle
00233   view.drawSquare(   x1,   y2,    x2, yHigh, red, green, blue );
00234 
00235   // lower midle
00236   view.drawSquare(   x1, yLow,    x2,    y1, red, green, blue );
00237                    
00238 }
00239 
00240 void
00241 CutRangeRep::
00242 drawProjectedValues ( const DataSource * ntuple,
00243                       TransformBase * transform,
00244                       ViewBase * view )
00245 {
00246 }

Generated for HippoDraw-1.14.8.5 by doxygen 1.4.3