00001 #ifndef SYNAPS_SHAPE_GAIA_SAMPLE_H
00002 #define SYNAPS_SHAPE_GAIA_SAMPLE_H
00003
00004 #include <shape/ssi/ssi_def.hpp>
00005 #include <shape/parametric_surface.hpp>
00006
00007 #define TMPL template<class C, class V>
00008
00009
00010 namespace mmx {
00011 namespace ssi {
00012
00013 TMPL
00014 struct sample
00015 {
00016 typedef typename mmx::shape::use<mmx::shape::ssi_def,C,V>::ParametricSurface ParametricSurface;
00017 const ParametricSurface * m_psurf;
00018 double * m_uvals;
00019 double * m_vvals;
00020 coord_t m_nrows;
00021 coord_t m_ncols;
00022 vector3 * m_svals;
00023 sample( const ParametricSurface * s, int m, int n );
00024 ~sample();
00025 vector3 * base() const { return m_svals; };
00026 int nrows() const { return m_nrows; };
00027 int ncols() const { return m_ncols; };
00028 inline const double & uvalue( int i ) const { return m_uvals[i]; };
00029 inline const double & vvalue( int i ) const { return m_vvals[i]; };
00030 };
00031
00032 TMPL
00033 sample<C,V>::sample(const ParametricSurface * s, int m, int n )
00034 {
00035 std::cout<<"Sample "<<m<<" "<<n<<std::endl;
00036
00037 m_psurf = s;
00038 m_uvals = new double[3*m*n+m+n];
00039 m_vvals = m_uvals + m;
00040 m_svals = (fxv<double,3>*)(m_vvals + n);
00041 m_nrows = m;
00042 m_ncols = n;
00043
00044 mmx::shape::use<mmx::shape::ssi_def,C,V>::sample(s,m_vvals+n,m,n,m_uvals,m_vvals);
00045
00046
00047 };
00048
00049 TMPL
00050 sample<C,V>::~sample() { delete[] m_uvals; };
00051 };
00052
00053 }
00054
00055 # undef ParametricSurface
00056 # endif