cortical_surface 6.0.0
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>
8#include <aims/mesh/surfaceOperation.h>
10
11//#include <cortical_surface/mesh/geodesicPath.h>
12#include <aims/geodesicpath/geodesicPath.h>
13
14namespace aims
15{
17 {
18 public:
19
20 //Global variables
21 //Update when class is instanciated
23
24 float value;
27
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
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;
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
141// void compute_snake_at_1_resolution(TimeTexture<float> & result_multi);
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
std::vector< uint > list_points
TimeTexture< float > compute_snake()
SulcusCorticalSnake(TimeTexture< float > _constraint, float _value, float _alpha1, float _alpha2, float _alpha3, AimsSurfaceTriangle _mesh)
std::vector< std::set< uint > > neigh
void computeShortestPath(int method, unsigned source, unsigned target)
std::vector< uint > ordre_points
uint define_new_middle_point(uint i, uint j)
std::vector< Point3df > vert
std::vector< uint > avant_list
Texture< float > MeshDistance_adapt_tex(const Texture< float > &inittex, bool allowUnreached, uint ind)
std::vector< uint > cpt_points
std::map< uint, float > MeshDistance_adapt_local(const Texture< float > &inittex, uint ind1, uint ind2)
std::vector< uint > new_vector
float MeshDistance_adapt(const Texture< float > &inittex, bool allowUnreached, uint ind)
std::vector< uint > new_vector_res
TimeTexture< float > tex_distance
void process_list(std::map< int, std::map< int, int > > &count)
AimsSurface< 3, Void > mesh_base
std::vector< AimsVector< uint, 3 > > poly
int are_they_neighbours(uint one, uint two)
TimeTexture< float > constraint
float compute_energy(uint index_courant)
TimeTexture< float > constraint_load
void computeGraphDijkstra(AimsSurfaceTriangle surface, int constraintType, int strain)
TimeTexture< float > result_total
int is_it_in_the_vector(uint vertex)
void treat_list_point(uint index, std::map< int, std::map< int, int > > &count)
static std::vector< std::set< uint > > surfaceNeighbours(const AimsSurface< D, T > &surf)
AIMSDATA_API AimsTimeSurface< 3, Void > AimsSurfaceTriangle
unsigned int uint