cortical_surface  5.0.5
sulcusCorticalSnake.h
Go to the documentation of this file.
1 #ifndef AIMS_SULCUS_CORTICAL_SNAKE_H
2 #define AIMS_SNAKE_H
3 
4 
5 #include <aims/mesh/texture.h>
6 #include <aims/io/reader.h>
7 #include <aims/io/writer.h>
10 
11 //#include <cortical_surface/mesh/geodesicPath.h>
13 
14 namespace aims
15 {
17  {
18  public:
19 
20  //Global variables
21  //Update when class is instanciated
23 
24  float value;
25  float alpha1, alpha2, alpha3;
27 
30  int add_pts;
31  int cpt_multi;
33 
34  float h_min, h_max;
35 
36  float max;
37 
41 
42  //Liste de voisinage
43  std::vector<std::set<uint> > neigh;
44 
45  //vector list_points = liste des indices des points Pi decrivant le snake
46  std::vector<uint> list_points;
47 
48  //vector list_points = liste des indices, pour comparer et mettre a jour cpt_points
49  std::vector<uint> avant_list;
50 
51  //vector cpt_points = compteur des points Pi decrivant le snake
52  std::vector<uint> cpt_points;
53 
54 
55  //vector ordre_points = position du point dans le snake
56  std::vector<uint> ordre_points;
57 
58  //vector new_vector = liste des indices des points Pi decrivant le snake pour comparaison pour stop_global
59  std::vector<uint> new_vector;
60 
61  //vector new_vector_res = liste des indices des points Pi decrivant le snake pour une resolution donnee
62  std::vector<uint> new_vector_res;
63 
64  std::vector<Point3df> vert;
66  std::vector< AimsVector<uint,3> > poly;
67 
70 
71 // TimeTexture<float> res;
72 
73  //Constructor
74 
75  SulcusCorticalSnake( TimeTexture<float> _constraint, float _value, float _alpha1, float _alpha2, float _alpha3, AimsSurfaceTriangle _mesh) : constraint_load(_constraint), value(_value), alpha1(_alpha1), alpha2(_alpha2), alpha3(_alpha3), mesh(_mesh)
76  {
77  //Computing neighbourhood
78  std::cout<<"Constructor!"<<std::endl;
79  std::cout<<"Constructeur SulcusCorticalSnake"<<std::endl;
80 
81  sp = new GeodesicPath(mesh,1,3);
82  //computeGraphDijkstra(mesh, 1 , 3);
83 
84  neigh = SurfaceManip::surfaceNeighbours( mesh );
85  mesh_base=mesh[0];
86  vert = mesh_base.vertex();
87  poly = mesh_base.polygon();
88 
89  size=constraint_load[0].nItem();
90 
91 // std::cout<<"value="<<value<<" - alpha1="<<alpha1<<std::endl;
92 
93  for(uint i=0;i<size;i++)
94  {
95  if(fabs(constraint_load[0].item(i)-_value) < 0.01)
96  constraint[0].push_back(_value);
97  else
98  constraint[0].push_back(0.0);
99  }
100 // std::cout<<"size copie"<<constraint[0].nItem()<<std::endl;
101  for( uint i=0; i<constraint[0].nItem(); i++)
102  {
103  result_total[0].push_back(0);
104  }
105  cpt_multi=0;
106  cpt_resolution=0;
107 
108  /*
109  Writer<Texture1d> wr1fd("cartea.tex");
110  wr1fd.write(constraint);*/
111  }
112 
114  {
115  // std::cout<<"Destructeur SulcusCorticalSnake"<<std::endl;
116  neigh.clear();
117  vert.clear();
118  poly.clear();
119  list_points.clear();
120  avant_list.clear();
121  cpt_points.clear();
122  ordre_points.clear();
123  new_vector.clear();
124  new_vector_res.clear();
125 
126  constraint_load.erase();
127  constraint.erase();
128  result_total.erase();
129  tex_distance.erase();
130 
131  delete (sp);
132  }
133 
134  //Functions
135 
136  void computeGraphDijkstra (AimsSurfaceTriangle surface, int constraintType,int strain);
137  void computeShortestPath(int method, unsigned source, unsigned target);
138 
139  void createDistanceTexture();
141 // void compute_snake_at_1_resolution(TimeTexture<float> & result_multi);
143  int stop_total();
145  int define_extremities();
146  int is_it_in_the_vector(uint vertex);
147  int are_they_neighbours(uint one, uint two);
149  void refine_vector();
150  void compute_curv();
151  float compute_energy(uint index_courant);
152  void treat_list_point(uint index, std::map< int, std::map< int, int > > & count);
153  void process_list( std::map< int, std::map< int, int > > & count );
154  float MeshDistance_adapt( const Texture<float> & inittex, bool allowUnreached, uint ind );
155  Texture<float> MeshDistance_adapt_tex( const Texture<float> & inittex, bool allowUnreached, uint ind );
156  std::map< uint, float> MeshDistance_adapt_local( const Texture<float> & inittex, uint ind1, uint ind2 );
157  };
158 
159 }
160 
161 
162 #endif
TimeTexture< float > constraint
std::vector< uint > new_vector_res
std::vector< std::set< uint > > neigh
void push_back(const T &item)
void computeShortestPath(int method, unsigned source, unsigned target)
std::vector< uint > avant_list
AIMSDATA_API AimsTimeSurface< 3, Void > AimsSurfaceTriangle
std::vector< Point3df > vert
std::map< uint, float > MeshDistance_adapt_local(const Texture< float > &inittex, uint ind1, uint ind2)
Texture< float > MeshDistance_adapt_tex(const Texture< float > &inittex, bool allowUnreached, uint ind)
const std::vector< Point3df > & vertex() const
TimeTexture< float > result_total
void computeGraphDijkstra(AimsSurfaceTriangle surface, int constraintType, int strain)
float compute_energy(uint index_courant)
size_t nItem() const
static std::vector< std::set< uint > > surfaceNeighbours(const AimsSurface< D, T > &surf)
std::vector< uint > new_vector
void treat_list_point(uint index, std::map< int, std::map< int, int > > &count)
int are_they_neighbours(uint one, uint two)
std::vector< AimsVector< uint, 3 > > poly
const std::vector< AimsVector< uint, D > > & polygon() const
TimeTexture< float > curv
TimeTexture< float > tex_distance
std::vector< uint > cpt_points
TimeTexture< float > compute_snake()
void process_list(std::map< int, std::map< int, int > > &count)
std::vector< uint > ordre_points
uint define_new_middle_point(uint i, uint j)
void erase()
unsigned int uint
TimeTexture< float > constraint_load
SulcusCorticalSnake(TimeTexture< float > _constraint, float _value, float _alpha1, float _alpha2, float _alpha3, AimsSurfaceTriangle _mesh)
float MeshDistance_adapt(const Texture< float > &inittex, bool allowUnreached, uint ind)
std::vector< uint > list_points
int is_it_in_the_vector(uint vertex)
AimsSurface< 3, Void > mesh_base