32 virtual void propagate(std::vector<SurfacePoint>& sources,
34 std::vector<SurfacePoint>* stop_points = NULL) = 0;
37 std::vector<SurfacePoint>& path) = 0;
40 std::vector<SurfacePoint>& path,std::vector<unsigned>& indexVertex) = 0;
44 std::vector<SurfacePoint>& path);
46 void geodesic(std::vector<SurfacePoint>& sources,
47 std::vector<SurfacePoint>& destinations,
48 std::vector<std::vector<SurfacePoint> >& paths);
52 std::vector<SurfacePoint>& path,std::vector<unsigned>& indexVertex);
55 std::vector<SurfacePoint>& destinations,
56 std::vector<std::vector<SurfacePoint> >& paths,
57 std::vector<std::vector<unsigned> >& indexVertex);
59 double length(std::vector<SurfacePoint>& path);
63 double& best_source_distance) = 0;
67 std::cout <<
"propagation step took " <<
m_time_consumed <<
" seconds " << std::endl;
72 virtual std::string
name();
149 std::vector<SurfacePoint>& path,std::vector<unsigned>& indexVertex)
151 std::vector<SurfacePoint> sources(1, source);
152 std::vector<SurfacePoint> stop_points(1, destination);
156 max_propagation_distance,
163 std::vector<SurfacePoint>& destinations,
164 std::vector<std::vector<SurfacePoint> >& paths)
169 max_propagation_distance,
172 paths.resize(destinations.size());
174 for(
unsigned i=0; i<paths.size(); ++i)
181 std::vector<SurfacePoint>& destinations, std::vector<std::vector<SurfacePoint> >& paths,
182 std::vector<std::vector<unsigned> >& indexVertex)
186 std::vector<SurfacePoint> sources(1, source);
189 max_propagation_distance,
192 paths.resize(destinations.size());
193 indexVertex.resize(destinations.size());
195 for(
unsigned i=0; i<paths.size(); ++i)
214 std::vector<vertex_pointer> possible_vertices;
215 for(
unsigned i = 0; i < stop_points->size(); ++i)
219 possible_vertices.clear();
220 m_mesh->closest_vertices(point, &possible_vertices);
223 double min_distance = 1e100;
224 for(
unsigned j = 0; j < possible_vertices.size(); ++j)
226 double distance = point->
distance(possible_vertices[j]);
227 if(distance < min_distance)
229 min_distance = distance;
230 closest_vertex = possible_vertices[j];
233 assert(closest_vertex);