51 unsigned int compute(
const std::vector<SurfaceMesh::Vertex> &seed,
52 float max_dist = FLT_MAX,
53 unsigned int max_num = INT_MAX,
54 std::vector<SurfaceMesh::Vertex> *neighbors =
nullptr);
76 bool operator()(SurfaceMesh::Vertex v0, SurfaceMesh::Vertex v1)
const {
77 return ((dist_[v0] == dist_[v1]) ? (v0 < v1)
78 : (dist_[v0] < dist_[v1]));
82 const SurfaceMesh::VertexProperty<float> &dist_;
86 typedef std::set<SurfaceMesh::Vertex, VertexCmp> PriorityQueue;
90 VirtualEdge(SurfaceMesh::Vertex v,
float l) : vertex(v), length(l) {}
92 SurfaceMesh::Vertex vertex;
97 typedef std::map<SurfaceMesh::Halfedge, VirtualEdge> VirtualEdges;
100 void find_virtual_edges();
102 unsigned int init_front(
const std::vector<SurfaceMesh::Vertex> &seed,
103 std::vector<SurfaceMesh::Vertex> *neighbors);
105 unsigned int propagate_front(
float max_dist,
unsigned int max_num,
106 std::vector<SurfaceMesh::Vertex> *neighbors);
108 void heap_vertex(SurfaceMesh::Vertex v);
110 float distance(SurfaceMesh::Vertex v0, SurfaceMesh::Vertex v1, SurfaceMesh::Vertex v2,
float r0 = FLT_MAX,
116 bool use_virtual_edges_;
117 VirtualEdges virtual_edges_;
119 PriorityQueue *front_;
121 SurfaceMesh::VertexProperty<float> distance_;
122 SurfaceMesh::VertexProperty<bool> processed_;
unsigned int compute(const std::vector< SurfaceMesh::Vertex > &seed, float max_dist=FLT_MAX, unsigned int max_num=INT_MAX, std::vector< SurfaceMesh::Vertex > *neighbors=nullptr)
Compute geodesic distances from specified seed points.
Definition surface_mesh_geodesic.cpp:134