ColorSymbolPointRep.cxx

Go to the documentation of this file.
00001 
00012 // For truncation warning
00013 #ifdef _MSC_VER
00014 #include "msdevstudio/MSconfig.h"
00015 #endif
00016 
00017 #include "ColorSymbolPointRep.h"
00018 
00019 #include "colorreps/BinToColor.h"
00020 #include "colorreps/BinToColorFactory.h"
00021 #include "datasrcs/DataPointTuple.h"
00022 #include "datasrcs/DataSource.h"
00023 #include "graphics/ViewBase.h"
00024 #include "transforms/BinaryTransform.h"
00025 
00026 #include <cassert>
00027 
00028 using namespace hippodraw;
00029 
00030 using std::vector;
00031 
00032 ColorSymbolPointRep::
00033 ColorSymbolPointRep ( hippodraw::Symbol::Type symbol, float size )
00034   : SymbolPointRep ( symbol, size )
00035 {
00036   BinToColorFactory * factory = BinToColorFactory::instance ();
00037   m_color_gen = factory -> create ( "Rainbow" );
00038   m_name = "ColorSymbol"; // need to override what base class did
00039 }
00040 
00041 ColorSymbolPointRep::ColorSymbolPointRep ( )
00042   : SymbolPointRep ( )
00043 {
00044   BinToColorFactory * factory = BinToColorFactory::instance ();
00045   m_color_gen = factory -> create ( "Rainbow" );
00046   m_name = "ColorSymbol"; // need to override what base class did
00047 }
00048 
00049 ColorSymbolPointRep::ColorSymbolPointRep( const ColorSymbolPointRep & rep )
00050   : SymbolPointRep ( rep ),
00051     m_color_gen ( rep.m_color_gen->clone () )
00052 {
00053 }
00054 
00055 ColorSymbolPointRep::~ColorSymbolPointRep()
00056 {
00057 }
00058 
00059 RepBase * ColorSymbolPointRep::clone()
00060 {
00061   return new ColorSymbolPointRep( *this );
00062 }
00063 
00064 const BinToColor *
00065 ColorSymbolPointRep::
00066 getValueTransform ( ) const
00067 {
00068   return m_color_gen;
00069 }
00070 
00071 void
00072 ColorSymbolPointRep::
00073 setValueTransform ( BinToColor * btc )
00074 {
00075   delete m_color_gen;
00076   m_color_gen = btc;
00077 }
00078 
00079 namespace dp = hippodraw::DataPoint3DTuple;
00080 
00081 void
00082 ColorSymbolPointRep::
00083 drawProjectedValues ( const DataSource * ntuple,
00084                       TransformBase * transform,
00085                       ViewBase * view )
00086 {
00087   m_x.clear ();
00088   m_y.clear ();
00089   m_colors.clear ();
00090 
00091   unsigned int size = ntuple -> rows ();
00092   const BinaryTransform * bt 
00093     = dynamic_cast < const BinaryTransform * > ( transform );
00094 
00095   SymbolPointRep::beginPlot ( size, bt, view );
00096   const Range & range = view -> getRange ( Axes::Z );
00097   double high = range.high();
00098   double low = range.low();
00099 
00100   bt -> transformZ ( high );
00101   bt -> transformZ ( low );
00102 
00103   Range newrange ( low, high, range.pos() );
00104 
00105   // This needs to be done before we quit.
00106   m_color_gen->setRange ( newrange );
00107 
00108   if ( size == 0 ) return;
00109 
00110   m_x.reserve ( size );  
00111   m_y.reserve ( size );
00112   m_colors.reserve ( size );
00113 
00114   for ( unsigned int i = 0; i < size; i++ ) {
00115     const vector < double > & row = ntuple -> getRow ( i );
00116 
00117     double value = row [ dp::Z ];
00118 
00119     if ( range.includes ( value ) == false ) continue;
00120 
00121 
00122     const Range & limit_z = bt -> limitZ ();
00123     bool retval =  limit_z.includes ( value );
00124     if ( retval == false ) continue;
00125     retval = drawProjectedValue ( i, ntuple, bt, view );
00126     if ( retval == false ) continue;
00127 
00128     bt -> transformZ ( value );
00129     Color color;
00130     m_color_gen -> doubleToColor ( value, color );
00131     m_colors.push_back ( color );
00132   }
00133   const BinaryTransform * bint 
00134     = dynamic_cast < const BinaryTransform * > ( transform );
00135 
00136   bint -> transform (m_x, m_y);
00137   view -> drawPoints ( m_x, m_y, m_colors, m_plot_symbol, m_size );
00138 
00139 }
00140 
00141 bool
00142 ColorSymbolPointRep::
00143 uses ( Color::Value ) const
00144 {
00145   return false;
00146 }

Generated for HippoDraw Class Library by doxygen