$darkmode
Class containing functions to modify the topology of a halfedge based mesh. More...
#include <halfedge_topology.h>
Static Public Member Functions | |
static VertexPointer | edge_collapse_quad (MeshType &m, HEdgePointer hp, VertexPointer vp) |
static VertexPointer | diagonal_collapse_quad (MeshType &m, FacePointer fp, VertexPointer vp) |
static FacePointer | doublet_remove_quad (MeshType &m, VertexPointer vp) |
static HEdgePointer | singlet_remove_quad (MeshType &m, FacePointer fp) |
static HEdgePointer | edge_rotate_quad (HEdgePointer hp, bool cw) |
static VertexPointer | vertex_rotate_quad (VertexPointer vp) |
static VertexPointer | edge_collapse (MeshType &m, HEdgePointer hp, VertexPointer vp) |
static FacePointer | add_face (MeshType &m, std::vector< VertexPointer > &vps) |
static bool | remove_face (MeshType &m, FacePointer fp) |
static bool | can_remove_face (FacePointer fp) |
static bool | check_diagonal_collapse_quad (HEdgePointer hp) |
static bool | is_nonManifold_vertex (MeshType &m, VertexPointer vp) |
static bool | is_nonManifold_vertex (VertexPointer vp) |
static VertexPointer | opp_vert (HEdgePointer hp) |
static std::vector< VertexPointer > | getVertices (VertexPointer vp) |
static std::set< FacePointer > | getFaces (VertexPointer vp) |
static bool | is_singlet_quad (FacePointer fp) |
static std::vector< VertexPointer > | getVertices (FacePointer fp, HEdgePointer starting_he=NULL) |
static std::vector< FacePointer > | get_incident_faces (VertexPointer vp, HEdgePointer starting_he=NULL) |
static std::vector< FacePointer > | get_adjacent_faces (FacePointer fp) |
static std::vector< HEdgePointer > | get_incident_hedges (VertexPointer vp, HEdgePointer starting_he=NULL) |
static bool | has_doublet_quad (FacePointer fp) |
static std::vector< HEdgePointer > | find_doublet_hedges_quad (FacePointer fp) |
static bool | isBorderVertex (VertexPointer vp) |
static int | vertex_valence (VertexPointer vp) |
Static Protected Member Functions | |
static FacePointer | add_face_unsafe (MeshType &m, std::vector< VertexPointer > &vps) |
static FacePointer | add_face_unsafe (MeshType &m, std::vector< VertexPointer > &vps, std::vector< HEdgePointer > &hps, std::vector< bool > &non_manifold_vertices) |
static void | remove_face_unsafe (MeshType &m, FacePointer fp) |
static bool | can_add_hedge (std::vector< VertexPointer > &vps, std::vector< HEdgePointer > &hps) |
static std::vector< HEdgePointer > | getHEdges (FacePointer fp, HEdgePointer starting_he=NULL) |
static void | change_vertex (VertexPointer old_vp, VertexPointer new_vp) |
Class containing functions to modify the topology of a halfedge based mesh.
|
inlinestatic |
Adds a face in a mesh, checking if the operation is possible.
m | Mesh |
vps | Vector of vertices (in ccw order) that will belong to the new face |
|
inlinestaticprotected |
Adds a face in a mesh without any check
m | Mesh |
vps | Vector of vertices (in ccw order) that will belong to the new face |
|
inlinestaticprotected |
Adds a face in a mesh without any check
m | Mesh |
vps | Vector of vertices (in ccw order) that will belong to the new face |
hps | Vector of hedges (in ccw order) that will belong to the new face |
non_manifold_vertices | Vector of booleans denoting on the i-th position if the i-th vertex is non-manifold |
|
inlinestaticprotected |
Checks if the next hedge can be inserted into hps. If true, inserts the hedge into hps. If false, inserts NULL.
vps | Vector of vertices (in ccw order) that will belong to the new face |
hps | Vector of hedges already checked |
true | if hedge can be inserted |
false | otherwise |
|
inlinestatic |
Checks if a face can be removed
fp | Face to check |
true | if the face can be removed |
false | otherwise |
|
inlinestaticprotected |
Connects to a new vertex all hedges incident to a vertex
old_vp | the old vertex to be disconnected |
new_vp | the new vertex to be connected |
|
inlinestatic |
Checks if a diagonal can be collapsed
hp | Hedge whose vertex is one of the two vertices of the diagonal |
true | if diagonal can be collapsed |
false | if diagonal cannot be collapsed |
|
inlinestatic |
Collpases a diagonal in a quad.
m | Mesh |
fp | Face where diagonal resides |
vp | One of the two vertices of the diagonal |
|
inlinestatic |
Removes a doublet merging the two quads in one
m | Mesh |
vp | Vertex shared by the two consecutive edges of the doublet |
|
inlinestatic |
Collapses a generic edge
m | Mesh |
hp | Edge to be collapsed |
vp | Vertex to be deleted |
|
inlinestatic |
Collpases an edge shared by two quads, generating only quads. Made by a series of a vertex rotation and a diagonal collapse.
m | Mesh |
hp | hegde to be collapsed |
vp | Vertex that will be rotated |
|
inlinestatic |
Rotates a non-border edge shared by two quads
hp | Edge to be rotated |
cw | flag denoting a clockwise or counter-clockwise rotation |
|
inlinestatic |
Gets all hedges whose vertex is into a doublet
fp | Face to check |
|
inlinestatic |
Gets all faces incident to a vertex
vp | Vertex |
starting_he | A hedge from which to start |
|
inlinestatic |
Gets all hedges incident to a vertex
vp | Vertex |
starting_he | A hedge from which to start navigation |
|
inlinestatic |
Gets faces on the 1-ring of a vertex
vp | Vertex |
|
inlinestaticprotected |
Gets all hedges incident to a face
fp | Face |
starting_he | A hedge in the face from which to start |
|
inlinestatic |
Gets all vertices incident to a face
fp | Face |
starting_he | A hedge in the face from which to start |
|
inlinestatic |
Gets vertices on the 1-ring of a vertex
vp | Vertex. It must be a non-border vertex. |
|
inlinestatic |
Checks if a face has doublets
fp | Face to check |
true | if face has at least a doublet |
false | if face hasn't any doublet |
|
inlinestatic |
Checks if a vertex is non-manifold, comparing local and global information (slow)
m | Mesh |
vp | Vertex to check |
true | if vertex is non-manifold |
false | if verex is manifold |
|
inlinestatic |
Checks if a vertex is non-manifold, based only on local informations
vp | Vertex to check |
true | if vertex is non-manifold |
false | if verex is manifold |
|
inlinestatic |
Checks if a face is a singlet
fp | Face to check |
true | if face is a singlet |
false | if face isn't a singlet |
|
inlinestatic |
Checks if a vertex is a border vertex
vp | Vertex to check |
true | if vertex is a border vertex |
false | if vertex isn't a border vertex |
|
inlinestatic |
Shortcut to get the second vertex of an edge
hp | Hedge |
|
inlinestatic |
Removes a face in a mesh, checking if the operation is possible
m | Mesh |
fp | face to be removed |
true | if face has been removed |
false | otherwise |
|
inlinestaticprotected |
Removes a face in a mesh, without any check
m | Mesh |
fp | Face to be removed |
|
inlinestatic |
Removes a singlet replacing it with an edge
m | Mesh |
fp | Face that should be a singlet quad |
|
inlinestatic |
Rotates a non-border vertex shared by only quads
vp | Vertex to be rotated |
|
inlinestatic |
Computes valence of a vertex
vp | Vertex |