34#ifndef AIMS_TEXDATA_TEXDATA_H
35#define AIMS_TEXDATA_TEXDATA_H
40#include <cartodata/volume/volume.h>
68 typedef std::pair<Point3df,uint>
type;
118 const Site operator *() {
return std::pair<Point3df,uint>((*_coordinates)[ _index], _index); }
129 std::vector<Point3df> *_coordinates;
174 TexturedData(
int dimx,
int dimy,
int dimz,
int dimt = 1,
187 int NbSites() {
return (_data->getSizeX()*_data->getSizeY()*_data->getSizeZ());}
219 _mesh(mesh), _tex(tex), _coordinates(coords) { }
228 writerT.
write(timetext);
239 int NbSites() {
return _mesh->vertex().size(); }
244 std::vector<std::set<uint> > _allNeighbours;
245 std::vector<Point3df> *_coordinates;
254template<
typename T>
bool
257 if ((_pos[0]==other._pos[0]) && (_pos[1]==other._pos[1]) && (_pos[2]==other._pos[2]))
return true;
261template<
typename T>
bool
264 if ((this->_pos[0] != other._pos[0]) || (this->_pos[1] != other._pos[1]) || (this->_pos[2] != other._pos[2]))
return true;
271 if (this->_index == other._index)
return true;
278 if (this->_index != other._index)
return true;
293 if ( _pos[0] < (_data->getSizeX() -1) )
295 else if ( _pos[1] < (_data->getSizeY() -1) )
314 else if ( _pos[1] > 0 )
316 _pos[0]=(_data->getSizeX() -1);
321 _pos[0]=(_data->getSizeX() -1);
322 _pos[1]=(_data->getSizeY() -1);
335 _coordinates = (std::vector<Point3df> *)(&(data->
vertex()));
343 _coordinates = coords;
367 *((*this)._data)=(*(other._data)).
copy();
388 Point3d point(0, 0, _data->getSizeZ());
394template<
typename T> std::vector<typename SiteType<carto::VolumeRef<T> >
::type>
398 std::vector<Point3d> neigh;
399 int x=pos[0], y=pos[1], z=pos[2];
403 for (i=-1; i<=1; i=i+1)
404 for (j=-1; j<=1; j=j+1)
405 for (k=-1; k<=1; k=k+1)
407 if ((i!=0) || (j!=0) || (k!=0))
409 if ( ((x+i)>=0) && ((x+i)<_data->getSizeX()) && ((y+j)>=0) && ((y+j)<_data->getSizeY()) && ((z+k)>=0) && ((z+k)<_data->getSizeZ()) )
414 neigh.push_back(point);
421template<
typename T> T &
424 return (*_data)(pos);
427template<
typename T>
const T &
430 return (*_data)(pos);
435template<
int D,
class T>
440 if (other._coordinates != NULL ){
441 (*this)._coordinates = other._coordinates;
444 (*this)._coordinates=NULL;
452 if (_coordinates == NULL) {
465 if (_coordinates == NULL ) {
475template<
int D,
class T>
476std::vector<typename SiteType<AimsSurface<D,Void> >
::type>
481 if (_allNeighbours.size()==0)
483 _allNeighbours=std::vector<std::set<uint> >( (*_mesh).vertex().size());
484 n=(*_mesh).polygon().size();
489 _allNeighbours[(*_mesh).polygon()[i][j]].insert( (*_mesh).polygon()[i][k] );
492 std::vector<Site> out;
493 std::set<uint>::iterator ptNeigh=_allNeighbours[pos.second].begin();
495 for ( ; ptNeigh != _allNeighbours[pos.second].end() ; ++ptNeigh)
496 out.push_back(std::pair<Point3df,uint>(_mesh->vertex()[*ptNeigh], *ptNeigh));
502template<
int D,
class T> T &
505 return((*_tex).item(pos.second));
508template<
int D,
class T>
const T &
511 return((*_tex).item(pos.second));
518 (*(*this)._data)=(*(other._data)).
copy();
525 (*this)._mesh=other._mesh;
526 (*this)._tex=other._tex;
527 if (other._coordinates != NULL){
528 (*this)._coordinates=other._coordinates;
531 (*this)._coordinates=NULL;
The template class to manage a mesh.
const std::vector< Point3df > & vertex() const
Get a const reference to the vector of vertices.
SiteType< AimsSurface< D, Void > >::type Site
SiteIterator(const AimsSurface< D, Void > *data, uint index)
SiteType< carto::VolumeRef< T > >::type Site
SiteIterator(const carto::VolumeRef< T > *data, const Site &pos)
SiteIterator< S > & operator--()
bool operator!=(const SiteIterator< S > &other) const
bool operator==(const SiteIterator< S > &other) const
SiteIterator< S > & operator++()
std::pair< Point3df, uint > type
TexturedData(AimsSurface< D, Void > *mesh, Texture< T > *tex)
SiteType< AimsSurface< D, Void > >::type Site
AimsSurface< D, Void > * GetMesh()
Tex & intensity(const Site &pos)
SiteIterator< AimsSurface< D, Void > > siteBegin()
std::vector< Site > neighbours(const Site &pos)
TexturedData(AimsSurface< D, Void > *mesh, Texture< T > *tex, std::vector< Point3df > *coords)
Texture< T > * GetTexture()
SiteIterator< AimsSurface< D, Void > > siteEnd()
SiteIterator< carto::VolumeRef< T > > siteEnd()
SiteType< carto::VolumeRef< T > >::type Site
Tex & intensity(const Site &pos)
carto::VolumeRef< T > * GetImage()
std::vector< Site > neighbours(const Site &pos)
SiteIterator< carto::VolumeRef< T > > siteBegin()
TexturedData(carto::VolumeRef< T > *data)
TexType< Text >::type Tex
SiteIterator< Geom > siteEnd()
SiteType< Geom >::type Site
Tex & intensity(const Site &pos)
std::vector< Site > neighbours(const Site &pos)
SiteIterator< Geom > siteBegin()
Generic writer for every format of Aims object.
virtual bool write(const T &obj, bool ascii=false, const std::string *format=0)
Finds the correct format and writes the object.
VolumeRef< T > copy() const
AimsVector< int16_t, 3 > Point3d