00001
00012
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";
00039 }
00040
00041 ColorSymbolPointRep::ColorSymbolPointRep ( )
00042 : SymbolPointRep ( )
00043 {
00044 BinToColorFactory * factory = BinToColorFactory::instance ();
00045 m_color_gen = factory -> create ( "Rainbow" );
00046 m_name = "ColorSymbol";
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
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 }