00001
00012
00013 #ifdef _MSC_VER
00014 #include "msdevstudio/MSconfig.h"
00015 #endif
00016
00017 #include "ColorSymbolPointRep.h"
00018
00019 #include "BinToColor.h"
00020 #include "BinToColorFactory.h"
00021
00022 #include "datasrcs/DataPointTuple.h"
00023 #include "datasrcs/DataSource.h"
00024 #include "graphics/ViewBase.h"
00025 #include "transforms/BinaryTransform.h"
00026
00027 #include <cassert>
00028
00029 using namespace hippodraw;
00030
00031 using std::vector;
00032
00033 ColorSymbolPointRep::
00034 ColorSymbolPointRep ( hippodraw::Symbol::Type symbol, float size )
00035 : SymbolPointRep ( symbol, size )
00036 {
00037 BinToColorFactory * factory = BinToColorFactory::instance ();
00038 m_color_gen = factory -> create ( "Rainbow" );
00039 m_name = "ColorSymbol";
00040 }
00041
00042 ColorSymbolPointRep::ColorSymbolPointRep ( )
00043 : SymbolPointRep ( )
00044 {
00045 BinToColorFactory * factory = BinToColorFactory::instance ();
00046 m_color_gen = factory -> create ( "Rainbow" );
00047 m_name = "ColorSymbol";
00048 }
00049
00050 ColorSymbolPointRep::ColorSymbolPointRep( const ColorSymbolPointRep & rep )
00051 : SymbolPointRep ( rep ),
00052 m_color_gen ( rep.m_color_gen->clone () )
00053 {
00054 }
00055
00056 ColorSymbolPointRep::~ColorSymbolPointRep()
00057 {
00058 }
00059
00060 RepBase * ColorSymbolPointRep::clone()
00061 {
00062 return new ColorSymbolPointRep( *this );
00063 }
00064
00065 const BinToColor *
00066 ColorSymbolPointRep::
00067 getValueTransform ( ) const
00068 {
00069 return m_color_gen;
00070 }
00071
00072 void
00073 ColorSymbolPointRep::
00074 setValueTransform ( BinToColor * btc )
00075 {
00076 delete m_color_gen;
00077 m_color_gen = btc;
00078 }
00079
00080 namespace dp = hippodraw::DataPoint3DTuple;
00081
00082 void
00083 ColorSymbolPointRep::
00084 drawProjectedValues ( const DataSource * ntuple,
00085 TransformBase * transform,
00086 ViewBase * view )
00087 {
00088 m_x.clear ();
00089 m_y.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
00113 m_colors.clear ();
00114 m_colors.reserve ( size );
00115
00116 for ( unsigned int i = 0; i < size; i++ ) {
00117 const vector < double > & row = ntuple -> getRow ( i );
00118
00119 double value = row [ dp::Z ];
00120
00121 if ( range.includes ( value ) == false ) continue;
00122
00123
00124 const Range & limit_z = bt -> limitZ ();
00125 bool retval = limit_z.includes ( value );
00126 if ( retval == false ) continue;
00127 retval = drawProjectedValue ( i, ntuple, bt, view );
00128 if ( retval = false ) continue;
00129
00130 bt -> transformZ ( value );
00131 Color color;
00132 m_color_gen -> doubleToColor ( value, color );
00133 m_colors.push_back ( color );
00134 }
00135 view -> drawPoints ( m_x, m_y, m_colors, m_plot_symbol, m_size );
00136 }