Download cpp/tools/geodesic/geodesic_algorithm_exact_elements.h from USTC3DVer/Lite3DReg: direct link, hf CLI and curl.
- Browser
- Download file 3.81 kB
-
https://huggingface.co/spaces/USTC3DVer/Lite3DReg/resolve/main/cpp/tools/geodesic/geodesic_algorithm_exact_elements.h
- Command line
-
hf download hf://spaces/USTC3DVer/Lite3DReg/cpp/tools/geodesic/geodesic_algorithm_exact_elements.h
-
curl -L -o geodesic_algorithm_exact_elements.h https://huggingface.co/spaces/USTC3DVer/Lite3DReg/resolve/main/cpp/tools/geodesic/geodesic_algorithm_exact_elements.h
3.81 kB
| namespace geodesic { | |
| class Interval; | |
| class IntervalList; | |
| typedef Interval* interval_pointer; | |
| typedef IntervalList* list_pointer; | |
| typedef OpenMesh::FaceHandle face_pointer; | |
| typedef OpenMesh::EdgeHandle edge_pointer; | |
| typedef OpenMesh::VertexHandle vertex_pointer; | |
| typedef OpenMesh::HalfedgeHandle halfedge_handle; | |
| struct Triangle // Components of a face to be propagated | |
| { | |
| face_pointer face; // Current Face | |
| edge_pointer bottom_edge, // Edges | |
| left_edge, | |
| right_edge; | |
| vertex_pointer top_vertex, // Vertices | |
| left_vertex, | |
| right_vertex; | |
| Scalar top_alpha, | |
| left_alpha, | |
| right_alpha; // Angles | |
| list_pointer left_list, | |
| right_list; // Lists | |
| }; | |
| class Interval //interval of the edge | |
| { | |
| public: | |
| Interval() {}; | |
| ~Interval() {}; | |
| Scalar& start() { return m_start; }; | |
| Scalar& stop() { return m_stop; }; | |
| Scalar& d() { return m_d; }; | |
| Scalar& pseudo_x() { return m_pseudo_x; }; | |
| Scalar& pseudo_y() { return m_pseudo_y; }; | |
| Scalar& sp() { return m_sp; }; | |
| Scalar& shortest_distance() { return m_shortest_distance; } | |
| interval_pointer& next() { return m_next; }; | |
| interval_pointer& previous() { return m_previous; }; | |
| private: | |
| Scalar m_start; //initial point of the interval on the edge | |
| Scalar m_stop; | |
| Scalar m_d; //distance from the source to the pseudo-source | |
| Scalar m_pseudo_x; //coordinates of the pseudo-source in the local coordinate system | |
| Scalar m_pseudo_y; //y-coordinate should be always negative | |
| Scalar m_sp; //separating point | |
| Scalar m_shortest_distance; //shortest distance from the interval to top_vertex, for numerical precision issue | |
| interval_pointer m_next; //pointer to the next interval in the list | |
| interval_pointer m_previous; //pointer to the previous interval in the list | |
| }; | |
| class IntervalList //list of the of intervals of the given edge | |
| { | |
| public: | |
| IntervalList() { /*m_start = NULL; m_edge = NULL;*/ m_sp = -1; m_begin = m_end = NULL; } | |
| ~IntervalList() {}; | |
| void clear() { m_begin = m_end = NULL; } | |
| void initialize(edge_pointer e) { m_edge = e; } | |
| vertex_pointer& start_vertex() { return m_start; } | |
| edge_pointer& edge() { return m_edge; } | |
| Scalar& sp() { return m_sp; }; | |
| Scalar& pseudo_x() { return m_pseudo_x; }; | |
| Scalar& pseudo_y() { return m_pseudo_y; }; | |
| // List operation | |
| interval_pointer& begin() { return m_begin; } | |
| interval_pointer& end() { return m_end; } | |
| bool empty() { return m_begin == NULL; } | |
| void push_back(interval_pointer & w) | |
| { | |
| if (!m_end) | |
| { | |
| w->previous() = NULL; | |
| w->next() = NULL; | |
| m_begin = m_end = w; | |
| } | |
| else | |
| { | |
| w->next() = NULL; | |
| w->previous() = m_end; | |
| m_end->next() = w; | |
| m_end = w; | |
| } | |
| } | |
| void erase(interval_pointer & w) | |
| { | |
| if ((w == m_begin) && (w == m_end)) | |
| { | |
| m_begin = m_end = NULL; | |
| } | |
| else if (w == m_begin) | |
| { | |
| m_begin = m_begin->next(); | |
| m_begin->previous() = NULL; | |
| } | |
| else if (w == m_end) | |
| { | |
| m_end = m_end->previous(); | |
| m_end->next() = NULL; | |
| } | |
| else | |
| { | |
| w->previous()->next() = w->next(); | |
| w->next()->previous() = w->previous(); | |
| } | |
| } | |
| private: | |
| edge_pointer m_edge; //edge that owns this list | |
| vertex_pointer m_start; //vertex from which the interval list starts | |
| interval_pointer m_begin; | |
| interval_pointer m_end; | |
| Scalar m_pseudo_x; | |
| Scalar m_pseudo_y; | |
| Scalar m_sp; //separating point | |
| }; | |
| } //geodesic | |