A halfedge data structure for polygonal meshes. More...
#include <pmp/SurfaceMesh.h>
Inherited by SurfaceMeshGL.
Classes | |
class | EdgeContainer |
helper class for iterating through all edges using range-based for-loops. More... | |
class | EdgeIterator |
this class iterates linearly over all edges More... | |
class | FaceAroundVertexCirculator |
this class circulates through all incident faces of a vertex. More... | |
class | FaceContainer |
helper class for iterating through all faces using range-based for-loops. More... | |
class | FaceIterator |
this class iterates linearly over all faces More... | |
class | HalfedgeAroundFaceCirculator |
this class circulates through all halfedges of a face. More... | |
class | HalfedgeAroundVertexCirculator |
this class circulates through all outgoing halfedges of a vertex. More... | |
class | HalfedgeContainer |
helper class for iterating through all halfedges using range-based for-loops. More... | |
class | HalfedgeIterator |
this class iterates linearly over all halfedges More... | |
class | VertexAroundFaceCirculator |
this class circulates through the vertices of a face. More... | |
class | VertexAroundVertexCirculator |
this class circulates through all one-ring neighbors of a vertex. More... | |
class | VertexContainer |
helper class for iterating through all vertices using range-based for-loops. More... | |
class | VertexIterator |
An iterator class to iterate linearly over all vertices. More... | |
Public Member Functions | |
Construction, destruction, assignment | |
SurfaceMesh () | |
default constructor More... | |
virtual | ~SurfaceMesh () |
destructor More... | |
SurfaceMesh (const SurfaceMesh &rhs) | |
copy constructor: copies rhs to *this . More... | |
SurfaceMesh & | operator= (const SurfaceMesh &rhs) |
assign rhs to *this . performs a deep copy of all properties. More... | |
SurfaceMesh & | assign (const SurfaceMesh &rhs) |
assign rhs to *this . does not copy custom properties. More... | |
File IO | |
void | read (const std::string &filename, const IOFlags &flags=IOFlags()) |
Read mesh from file filename controlled by flags . More... | |
void | write (const std::string &filename, const IOFlags &flags=IOFlags()) const |
Write mesh to file filename controlled by flags . More... | |
Add new elements by hand | |
Vertex | add_vertex (const Point &p) |
add a new vertex with position p More... | |
Face | add_face (const std::vector< Vertex > &vertices) |
Add a new face with vertex list vertices . More... | |
Face | add_triangle (Vertex v0, Vertex v1, Vertex v2) |
add a new triangle connecting vertices v0 , v1 , v2 More... | |
Face | add_quad (Vertex v0, Vertex v1, Vertex v2, Vertex v3) |
add a new quad connecting vertices v0 , v1 , v2 , v3 More... | |
Memory Management | |
size_t | vertices_size () const |
returns number of (deleted and valid) vertices in the mesh More... | |
size_t | halfedges_size () const |
returns number of (deleted and valid) halfedges in the mesh More... | |
size_t | edges_size () const |
returns number of (deleted and valid) edges in the mesh More... | |
size_t | faces_size () const |
returns number of (deleted and valid) faces in the mesh More... | |
size_t | n_vertices () const |
returns number of vertices in the mesh More... | |
size_t | n_halfedges () const |
returns number of halfedge in the mesh More... | |
size_t | n_edges () const |
returns number of edges in the mesh More... | |
size_t | n_faces () const |
returns number of faces in the mesh More... | |
bool | is_empty () const |
returns true if the mesh is empty, i.e., has no vertices More... | |
virtual void | clear () |
clear mesh: remove all vertices, edges, faces More... | |
void | free_memory () |
remove unused memory from vectors More... | |
void | reserve (size_t nvertices, size_t nedges, size_t nfaces) |
reserve memory (mainly used in file readers) More... | |
void | garbage_collection () |
remove deleted elements More... | |
bool | is_deleted (Vertex v) const |
returns whether vertex v is deleted More... | |
bool | is_deleted (Halfedge h) const |
returns whether halfedge h is deleted More... | |
bool | is_deleted (Edge e) const |
returns whether edge e is deleted More... | |
bool | is_deleted (Face f) const |
returns whether face f is deleted More... | |
bool | is_valid (Vertex v) const |
return whether vertex v is valid, i.e. More... | |
bool | is_valid (Halfedge h) const |
return whether halfedge h is valid, i.e. More... | |
bool | is_valid (Edge e) const |
return whether edge e is valid, i.e. the index is stores it within the array bounds. More... | |
bool | is_valid (Face f) const |
returns whether the face f is valid. More... | |
Low-level connectivity | |
Halfedge | halfedge (Vertex v) const |
returns an outgoing halfedge of vertex v . More... | |
void | set_halfedge (Vertex v, Halfedge h) |
set the outgoing halfedge of vertex v to h More... | |
bool | is_boundary (Vertex v) const |
returns whether v is a boundary vertex More... | |
bool | is_isolated (Vertex v) const |
returns whether v is isolated, i.e., not incident to any edge More... | |
bool | is_manifold (Vertex v) const |
returns whether v is a manifold vertex (not incident to several patches) More... | |
Vertex | to_vertex (Halfedge h) const |
returns the vertex the halfedge h points to More... | |
Vertex | from_vertex (Halfedge h) const |
returns the vertex the halfedge h emanates from More... | |
void | set_vertex (Halfedge h, Vertex v) |
sets the vertex the halfedge h points to to v More... | |
Face | face (Halfedge h) const |
returns the face incident to halfedge h More... | |
void | set_face (Halfedge h, Face f) |
sets the incident face to halfedge h to f More... | |
Halfedge | next_halfedge (Halfedge h) const |
returns the next halfedge within the incident face More... | |
void | set_next_halfedge (Halfedge h, Halfedge nh) |
sets the next halfedge of h within the face to nh More... | |
void | set_prev_halfedge (Halfedge h, Halfedge ph) |
sets the previous halfedge of h and the next halfedge of ph to nh More... | |
Halfedge | prev_halfedge (Halfedge h) const |
returns the previous halfedge within the incident face More... | |
Halfedge | opposite_halfedge (Halfedge h) const |
returns the opposite halfedge of h More... | |
Halfedge | ccw_rotated_halfedge (Halfedge h) const |
returns the halfedge that is rotated counter-clockwise around the start vertex of h . More... | |
Halfedge | cw_rotated_halfedge (Halfedge h) const |
returns the halfedge that is rotated clockwise around the start vertex of h . More... | |
Edge | edge (Halfedge h) const |
return the edge that contains halfedge h as one of its two halfedges. More... | |
bool | is_boundary (Halfedge h) const |
returns whether h is a boundary halfedge, i.e., if its face does not exist. More... | |
Halfedge | halfedge (Edge e, unsigned int i) const |
returns the i'th halfedge of edge e . i has to be 0 or 1. More... | |
Vertex | vertex (Edge e, unsigned int i) const |
returns the i'th vertex of edge e . i has to be 0 or 1. More... | |
Face | face (Edge e, unsigned int i) const |
returns the face incident to the i'th halfedge of edge e . i has to be 0 or 1. More... | |
bool | is_boundary (Edge e) const |
returns whether e is a boundary edge, i.e., if one of its halfedges is a boundary halfedge. More... | |
Halfedge | halfedge (Face f) const |
returns a halfedge of face f More... | |
void | set_halfedge (Face f, Halfedge h) |
sets the halfedge of face f to h More... | |
bool | is_boundary (Face f) const |
returns whether f is a boundary face, i.e., it one of its edges is a boundary edge. More... | |
Property handling | |
template<class T > | |
ObjectProperty< T > | add_object_property (const std::string &name, const T t=T()) |
add a object property of type T with name name and default value t . More... | |
template<class T > | |
ObjectProperty< T > | get_object_property (const std::string &name) const |
get the object property named name of type T . More... | |
template<class T > | |
ObjectProperty< T > | object_property (const std::string &name, const T t=T()) |
if a object property of type T with name name exists, it is returned. More... | |
template<class T > | |
void | remove_object_property (ObjectProperty< T > &p) |
remove the object property p More... | |
const std::type_info & | get_object_propertyType (const std::string &name) |
get the type_info T of face property named name . More... | |
std::vector< std::string > | object_properties () const |
returns the names of all face properties More... | |
template<class T > | |
VertexProperty< T > | add_vertex_property (const std::string &name, const T t=T()) |
add a vertex property of type T with name name and default value t . More... | |
template<class T > | |
VertexProperty< T > | get_vertex_property (const std::string &name) const |
get the vertex property named name of type T . More... | |
template<class T > | |
VertexProperty< T > | vertex_property (const std::string &name, const T t=T()) |
if a vertex property of type T with name name exists, it is returned. More... | |
template<class T > | |
void | remove_vertex_property (VertexProperty< T > &p) |
remove the vertex property p More... | |
bool | has_vertex_property (const std::string &name) const |
does the mesh have a vertex property with name name ? More... | |
template<class T > | |
HalfedgeProperty< T > | add_halfedge_property (const std::string &name, const T t=T()) |
add a halfedge property of type T with name name and default value t . More... | |
template<class T > | |
EdgeProperty< T > | add_edge_property (const std::string &name, const T t=T()) |
add a edge property of type T with name name and default value t . More... | |
template<class T > | |
HalfedgeProperty< T > | get_halfedge_property (const std::string &name) const |
get the halfedge property named name of type T . More... | |
template<class T > | |
EdgeProperty< T > | get_edge_property (const std::string &name) const |
get the edge property named name of type T . More... | |
template<class T > | |
HalfedgeProperty< T > | halfedge_property (const std::string &name, const T t=T()) |
if a halfedge property of type T with name name exists, it is returned. More... | |
template<class T > | |
EdgeProperty< T > | edge_property (const std::string &name, const T t=T()) |
if an edge property of type T with name name exists, it is returned. More... | |
template<class T > | |
void | remove_halfedge_property (HalfedgeProperty< T > &p) |
remove the halfedge property p More... | |
bool | has_halfedge_property (const std::string &name) const |
does the mesh have a halfedge property with name name ? More... | |
template<class T > | |
void | remove_edge_property (EdgeProperty< T > &p) |
remove the edge property p More... | |
bool | has_edge_property (const std::string &name) const |
does the mesh have an edge property with name name ? More... | |
const std::type_info & | get_halfedge_property_type (const std::string &name) |
get the type_info T of halfedge property named name . More... | |
const std::type_info & | get_vertex_property_type (const std::string &name) |
get the type_info T of vertex property named name . More... | |
const std::type_info & | get_edge_property_type (const std::string &name) |
get the type_info T of edge property named name . More... | |
std::vector< std::string > | vertex_properties () const |
returns the names of all vertex properties More... | |
std::vector< std::string > | halfedge_properties () const |
returns the names of all halfedge properties More... | |
std::vector< std::string > | edge_properties () const |
returns the names of all edge properties More... | |
template<class T > | |
FaceProperty< T > | add_face_property (const std::string &name, const T t=T()) |
add a face property of type T with name name and default value t . More... | |
template<class T > | |
FaceProperty< T > | get_face_property (const std::string &name) const |
get the face property named name of type T . More... | |
template<class T > | |
FaceProperty< T > | face_property (const std::string &name, const T t=T()) |
if a face property of type T with name name exists, it is returned. More... | |
template<class T > | |
void | remove_face_property (FaceProperty< T > &p) |
remove the face property p More... | |
bool | has_face_property (const std::string &name) const |
does the mesh have a face property with name name ? More... | |
const std::type_info & | get_face_property_type (const std::string &name) |
get the type_info T of face property named name . More... | |
std::vector< std::string > | face_properties () const |
returns the names of all face properties More... | |
void | property_stats () const |
prints the names of all properties More... | |
Iterators and circulators | |
VertexIterator | vertices_begin () const |
returns start iterator for vertices More... | |
VertexIterator | vertices_end () const |
returns end iterator for vertices More... | |
VertexContainer | vertices () const |
returns vertex container for C++11 range-based for-loops More... | |
HalfedgeIterator | halfedges_begin () const |
returns start iterator for halfedges More... | |
HalfedgeIterator | halfedges_end () const |
returns end iterator for halfedges More... | |
HalfedgeContainer | halfedges () const |
returns halfedge container for C++11 range-based for-loops More... | |
EdgeIterator | edges_begin () const |
returns start iterator for edges More... | |
EdgeIterator | edges_end () const |
returns end iterator for edges More... | |
EdgeContainer | edges () const |
returns edge container for C++11 range-based for-loops More... | |
VertexAroundVertexCirculator | vertices (Vertex v) const |
returns circulator for vertices around vertex v More... | |
HalfedgeAroundVertexCirculator | halfedges (Vertex v) const |
returns circulator for outgoing halfedges around vertex v More... | |
FaceIterator | faces_begin () const |
returns start iterator for faces More... | |
FaceIterator | faces_end () const |
returns end iterator for faces More... | |
FaceContainer | faces () const |
returns face container for C++11 range-based for-loops More... | |
FaceAroundVertexCirculator | faces (Vertex v) const |
returns circulator for faces around vertex v More... | |
VertexAroundFaceCirculator | vertices (Face f) const |
returns circulator for vertices of face f More... | |
HalfedgeAroundFaceCirculator | halfedges (Face f) const |
returns circulator for halfedges of face f More... | |
Higher-level Topological Operations | |
Halfedge | insert_vertex (Edge e, const Point &p) |
Subdivide the edge e = (v0,v1) by splitting it into the two edge (v0,p) and (p,v1). More... | |
Halfedge | insert_vertex (Edge e, Vertex v) |
Subdivide the edge e = (v0,v1) by splitting it into the two edge (v0,v) and (v,v1). More... | |
Halfedge | insert_vertex (Halfedge h0, Vertex v) |
Subdivide the halfedge h = (v0,v1) by splitting it into the two halfedges (v0,v) and (v,v1). More... | |
Halfedge | find_halfedge (Vertex start, Vertex end) const |
find the halfedge from start to end More... | |
Edge | find_edge (Vertex a, Vertex b) const |
find the edge (a,b) More... | |
bool | is_triangle_mesh () const |
returns whether the mesh a triangle mesh. More... | |
bool | is_quad_mesh () const |
returns whether the mesh a quad mesh. More... | |
bool | is_collapse_ok (Halfedge v0v1) |
returns whether collapsing the halfedge v0v1 is topologically legal. More... | |
void | collapse (Halfedge h) |
Collapse the halfedge h by moving its start vertex into its target vertex. More... | |
bool | is_removal_ok (Edge e) |
returns whether removing the edge e is topologically legal. More... | |
bool | remove_edge (Edge e) |
Remove edge and merge its two incident faces into one. More... | |
Vertex | split (Face f, const Point &p) |
Split the face f by first adding point p to the mesh and then inserting edges between p and the vertices of f . More... | |
void | split (Face f, Vertex v) |
Split the face f by inserting edges between v and the vertices of f . More... | |
Halfedge | split (Edge e, const Point &p) |
Split the edge e by first adding point p to the mesh and then connecting it to the two vertices of the adjacent triangles that are opposite to edge e . More... | |
Halfedge | split (Edge e, Vertex v) |
Split the edge e by connecting vertex v it to the two vertices of the adjacent triangles that are opposite to edge e . More... | |
Halfedge | insert_edge (Halfedge h0, Halfedge h1) |
insert edge between the to-vertices v0 of h0 and v1 of h1 . More... | |
bool | is_flip_ok (Edge e) const |
Check whether flipping edge e is topologically. More... | |
void | flip (Edge e) |
Flip the edge e . More... | |
size_t | valence (Vertex v) const |
returns the valence (number of incident edges or neighboring vertices) of vertex v . More... | |
size_t | valence (Face f) const |
returns the valence of face f (its number of vertices) More... | |
void | delete_vertex (Vertex v) |
deletes the vertex v from the mesh More... | |
void | delete_edge (Edge e) |
deletes the edge e from the mesh More... | |
void | delete_face (Face f) |
deletes the face f from the mesh More... | |
Geometry-related Functions | |
const Point & | position (Vertex v) const |
position of a vertex (read only) More... | |
Point & | position (Vertex v) |
position of a vertex More... | |
std::vector< Point > & | positions () |
BoundingBox | bounds () const |
compute the bounding box of the object More... | |
Scalar | edge_length (Edge e) const |
compute the length of edge e . More... | |
Allocate new elements | |
Vertex | new_vertex () |
Allocate a new vertex, resize vertex properties accordingly. More... | |
Halfedge | new_edge () |
Allocate a new edge, resize edge and halfedge properties accordingly. More... | |
Halfedge | new_edge (Vertex start, Vertex end) |
Allocate a new edge, resize edge and halfedge properties accordingly. More... | |
Face | new_face () |
Allocate a new face, resize face properties accordingly. More... | |
A halfedge data structure for polygonal meshes.
SurfaceMesh | ( | ) |
default constructor
|
virtualdefault |
destructor
|
inline |
copy constructor: copies rhs
to *this
.
performs a deep copy of all properties.
|
inline |
add a edge property of type T
with name name
and default value t
.
fails if a property named name
exists already, since the name has to be unique. in this case it returns an invalid property.
Add a new face with vertex list vertices
.
TopologyException | in case a topological error occurs. |
|
inline |
add a face property of type T
with name name
and default value t
.
fails if a property named name
exists already, since the name has to be unique. in this case it returns an invalid property
|
inline |
add a halfedge property of type T
with name name
and default value t
.
fails if a property named name
exists already, since the name has to be unique. in this case it returns an invalid property.
|
inline |
add a object property of type T
with name name
and default value t
.
fails if a property named name
exists already, since the name has to be unique. in this case it returns an invalid property
add a new quad connecting vertices v0
, v1
, v2
, v3
|
inline |
add a vertex property of type T
with name name
and default value t
.
fails if a property named name
exists already, since the name has to be unique. in this case it returns an invalid property
SurfaceMesh & assign | ( | const SurfaceMesh & | rhs | ) |
assign rhs
to *this
. does not copy custom properties.
|
inline |
compute the bounding box of the object
returns the halfedge that is rotated counter-clockwise around the start vertex of h
.
it is the opposite halfedge of the previous halfedge of h
.
|
virtual |
clear mesh: remove all vertices, edges, faces
Reimplemented in SurfaceMeshGL.
void collapse | ( | Halfedge | h | ) |
Collapse the halfedge h
by moving its start vertex into its target vertex.
For non-boundary halfedges this function removes one vertex, three edges, and two faces. For boundary halfedges it removes one vertex, two edges and one face.
returns the halfedge that is rotated clockwise around the start vertex of h
.
it is the next halfedge of the opposite halfedge of h
.
void delete_edge | ( | Edge | e | ) |
deletes the edge e
from the mesh
void delete_face | ( | Face | f | ) |
deletes the face f
from the mesh
void delete_vertex | ( | Vertex | v | ) |
deletes the vertex v
from the mesh
return the edge that contains halfedge h
as one of its two halfedges.
|
inline |
returns the names of all edge properties
|
inline |
if an edge property of type T
with name name
exists, it is returned.
otherwise this property is added (with default value t
)
|
inline |
returns edge container for C++11 range-based for-loops
|
inline |
returns start iterator for edges
|
inline |
returns end iterator for edges
|
inline |
returns number of (deleted and valid) edges in the mesh
returns the face incident to the i'th
halfedge of edge e
. i
has to be 0 or 1.
|
inline |
returns the names of all face properties
|
inline |
if a face property of type T
with name name
exists, it is returned.
otherwise this property is added (with default value t
)
|
inline |
returns face container for C++11 range-based for-loops
|
inline |
returns circulator for faces around vertex v
|
inline |
returns start iterator for faces
|
inline |
returns end iterator for faces
|
inline |
returns number of (deleted and valid) faces in the mesh
void flip | ( | Edge | e | ) |
Flip the edge e
.
Removes the edge e
and add an edge between the two vertices opposite to edge e
of the two incident triangles.
void free_memory | ( | ) |
remove unused memory from vectors
void garbage_collection | ( | ) |
remove deleted elements
|
inline |
get the edge property named name
of type T
.
returns an invalid VertexProperty if the property does not exist or if the type does not match.
|
inline |
get the type_info T
of edge property named name
.
returns an typeid(void) if the property does not exist or if the type does not match.
|
inline |
get the face property named name
of type T
.
returns an invalid VertexProperty if the property does not exist or if the type does not match.
|
inline |
get the type_info T
of face property named name
.
returns an typeid(void) if the property does not exist or if the type does not match.
|
inline |
get the halfedge property named name
of type T
.
returns an invalid VertexProperty if the property does not exist or if the type does not match.
|
inline |
get the type_info T
of halfedge property named name
.
returns an typeid(void) if the property does not exist or if the type does not match.
|
inline |
get the object property named name
of type T
.
returns an invalid ObjectProperty if the property does not exist or if the type does not match.
|
inline |
get the type_info T
of face property named name
.
returns an typeid(void) if the property does not exist or if the type does not match.
|
inline |
get the vertex property named name
of type T
.
returns an invalid VertexProperty if the property does not exist or if the type does not match.
|
inline |
get the type_info T
of vertex property named name
.
returns an typeid(void) if the property does not exist or if the type does not match.
returns the i'th
halfedge of edge e
. i
has to be 0 or 1.
returns an outgoing halfedge of vertex v
.
if v
is a boundary vertex this will be a boundary halfedge.
|
inline |
returns the names of all halfedge properties
|
inline |
if a halfedge property of type T
with name name
exists, it is returned.
otherwise this property is added (with default value t
)
|
inline |
returns halfedge container for C++11 range-based for-loops
|
inline |
returns circulator for halfedges of face f
|
inline |
returns circulator for outgoing halfedges around vertex v
|
inline |
returns start iterator for halfedges
|
inline |
returns end iterator for halfedges
|
inline |
returns number of (deleted and valid) halfedges in the mesh
|
inline |
does the mesh have an edge property with name name
?
|
inline |
does the mesh have a face property with name name
?
|
inline |
does the mesh have a halfedge property with name name
?
|
inline |
does the mesh have a vertex property with name name
?
insert edge between the to-vertices v0 of h0
and v1 of h1
.
returns the new halfedge from v0 to v1.
h0
and h1
have to belong to the same face Subdivide the edge e
= (v0,v1) by splitting it into the two edge (v0,p) and (p,v1).
Note that this function does not introduce any other edge or faces. It simply splits the edge. Returns halfedge that points to p
.
Subdivide the edge e
= (v0,v1) by splitting it into the two edge (v0,v) and (v,v1).
Note that this function does not introduce any other edge or faces. It simply splits the edge. Returns halfedge that points to p
.
Subdivide the halfedge h
= (v0,v1) by splitting it into the two halfedges (v0,v) and (v,v1).
Note that this function does not introduce any other edge or faces. It simply splits the edge. Returns the halfedge that points from v1 to v
.
|
inline |
returns whether e
is a boundary edge, i.e., if one of its halfedges is a boundary halfedge.
|
inline |
returns whether f
is a boundary face, i.e., it one of its edges is a boundary edge.
|
inline |
returns whether h is a boundary halfedge, i.e., if its face does not exist.
|
inline |
returns whether v
is a boundary vertex
bool is_collapse_ok | ( | Halfedge | v0v1 | ) |
returns whether collapsing the halfedge v0v1
is topologically legal.
|
inline |
returns whether edge e
is deleted
|
inline |
returns whether face f
is deleted
|
inline |
returns whether halfedge h
is deleted
|
inline |
returns whether vertex v
is deleted
|
inline |
returns true if the mesh is empty, i.e., has no vertices
bool is_flip_ok | ( | Edge | e | ) | const |
Check whether flipping edge e
is topologically.
|
inline |
returns whether v
is isolated, i.e., not incident to any edge
|
inline |
returns whether v
is a manifold vertex (not incident to several patches)
bool is_quad_mesh | ( | ) | const |
returns whether the mesh a quad mesh.
this function simply tests each face, and therefore is not very efficient.
bool is_removal_ok | ( | Edge | e | ) |
returns whether removing the edge e
is topologically legal.
bool is_triangle_mesh | ( | ) | const |
returns whether the mesh a triangle mesh.
this function simply tests each face, and therefore is not very efficient.
|
inline |
return whether edge e
is valid, i.e. the index is stores it within the array bounds.
|
inline |
returns whether the face f
is valid.
|
inline |
return whether halfedge h
is valid, i.e.
the index is stores it within the array bounds.
|
inline |
return whether vertex v
is valid, i.e.
the index is stores it within the array bounds.
|
inline |
returns number of edges in the mesh
|
inline |
returns number of faces in the mesh
|
inline |
returns number of halfedge in the mesh
|
inline |
returns number of vertices in the mesh
|
inline |
Allocate a new edge, resize edge and halfedge properties accordingly.
AllocationException | in case of failure to allocate a new edge. |
Allocate a new edge, resize edge and halfedge properties accordingly.
AllocationException | in case of failure to allocate a new edge. |
|
inline |
Allocate a new face, resize face properties accordingly.
AllocationException | in case of failure to allocate a new face. |
|
inline |
Allocate a new vertex, resize vertex properties accordingly.
AllocationException | in case of failure to allocate a new vertex. |
returns the next halfedge within the incident face
|
inline |
returns the names of all face properties
|
inline |
if a object property of type T
with name name
exists, it is returned.
otherwise this property is added (with default value t
)
SurfaceMesh & operator= | ( | const SurfaceMesh & | rhs | ) |
assign rhs
to *this
. performs a deep copy of all properties.
|
inline |
returns the previous halfedge within the incident face
void property_stats | ( | ) | const |
prints the names of all properties
Read mesh from file filename
controlled by flags
.
File extension determines file type. Supported formats and vertex attributes (a=ASCII, b=binary):
Format | ASCII | Binary | Normals | Colors | Texcoords |
---|---|---|---|---|---|
OFF | yes | yes | a / b | a | a / b |
OBJ | yes | no | a | no | no |
STL | yes | yes | no | no | no |
PLY | yes | yes | no | no | no |
PMP | no | yes | no | no | no |
XYZ | yes | no | a | no | no |
AGI | yes | no | a | a | no |
In addition, the OBJ and PMP formats support reading per-halfedge texture coordinates.
bool remove_edge | ( | Edge | e | ) |
Remove edge and merge its two incident faces into one.
This operation requires that the edge has two incident faces and that these two are not equal.
|
inline |
remove the edge property p
|
inline |
remove the face property p
|
inline |
remove the halfedge property p
|
inline |
remove the object property p
|
inline |
remove the vertex property p
void reserve | ( | size_t | nvertices, |
size_t | nedges, | ||
size_t | nfaces | ||
) |
reserve memory (mainly used in file readers)
sets the next halfedge of h
within the face to nh
sets the previous halfedge of h
and the next halfedge of ph
to nh
Split the edge e
by first adding point p
to the mesh and then connecting it to the two vertices of the adjacent triangles that are opposite to edge e
.
Returns the halfedge pointing to p
that is created by splitting the existing edge e
.
Split the edge e
by connecting vertex v
it to the two vertices of the adjacent triangles that are opposite to edge e
.
Returns the halfedge pointing to v
that is created by splitting the existing edge e
.
Split the face f
by first adding point p
to the mesh and then inserting edges between p
and the vertices of f
.
For a triangle this is a standard one-to-three split.
Split the face f
by inserting edges between v
and the vertices of f
.
For a triangle this is a standard one-to-three split.
size_t valence | ( | Face | f | ) | const |
returns the valence of face f
(its number of vertices)
size_t valence | ( | Vertex | v | ) | const |
returns the valence (number of incident edges or neighboring vertices) of vertex v
.
returns the i'th
vertex of edge e
. i
has to be 0 or 1.
|
inline |
returns the names of all vertex properties
|
inline |
if a vertex property of type T
with name name
exists, it is returned.
otherwise this property is added (with default value t
)
|
inline |
returns vertex container for C++11 range-based for-loops
|
inline |
returns circulator for vertices of face f
|
inline |
returns circulator for vertices around vertex v
|
inline |
returns start iterator for vertices
|
inline |
returns end iterator for vertices
|
inline |
returns number of (deleted and valid) vertices in the mesh
Write mesh to file filename
controlled by flags
.
File extension determines file type. Supported formats and vertex attributes (a=ASCII, b=binary):
Format | ASCII | Binary | Normals | Colors | Texcoords |
---|---|---|---|---|---|
OFF | yes | yes | a | a | a |
OBJ | yes | no | a | no | no |
STL | yes | no | no | no | no |
PLY | yes | yes | no | no | no |
PMP | no | yes | no | no | no |
XYZ | yes | no | a | no | no |
In addition, the OBJ and PMP formats support writing per-halfedge texture coordinates.