![]() |
Basic class for storing Triangle Meshes, handling basic vertex, edge, and triangle functionality. More...
#include <SurgSim/DataStructures/TriangleMesh.h>
Public Types | |
typedef MeshElement< 2, EdgeData > | EdgeType |
Edge type for convenience (Ids of the 2 vertices) More... | |
typedef MeshElement< 3, TriangleData > | TriangleType |
Triangle type for convenience (Ids of the 3 vertices) More... | |
![]() | |
typedef Vertex< VertexData > | VertexType |
Vertex type for convenience. More... | |
![]() | |
typedef std::function< boost::any(void)> | GetterType |
typedef std::function< void(boost::any)> | SetterType |
typedef std::function< YAML::Node(void)> | EncoderType |
typedef std::function< void(const YAML::Node *)> | DecoderType |
![]() | |
typedef ObjectFactory< Asset > | FactoryType |
Public Member Functions | |
TriangleMesh () | |
Constructor. The mesh is initially empty (no vertices, no edges, no triangles). More... | |
TriangleMesh (const TriangleMesh< VertexData, EdgeData, TriangleData > &other) | |
Copy constructor when the template data is the same type. More... | |
template<class V , class E , class T > | |
TriangleMesh (const TriangleMesh< V, E, T > &other) | |
Copy constructor when the template data is a different type. More... | |
virtual | ~TriangleMesh () |
Destructor. More... | |
TriangleMesh (TriangleMesh &&other) | |
Move Constructor. More... | |
TriangleMesh< VertexData, EdgeData, TriangleData > & | operator= (const TriangleMesh< VertexData, EdgeData, TriangleData > &other) |
Copy Assignment. More... | |
TriangleMesh< VertexData, EdgeData, TriangleData > & | operator= (TriangleMesh< VertexData, EdgeData, TriangleData > &&other) |
Move Assignment. More... | |
std::string | getClassName () const override |
Support serialization with a classname. More... | |
size_t | addEdge (const EdgeType &edge) |
Adds an edge to the mesh. More... | |
size_t | addTriangle (const TriangleType &triangle) |
Adds a triangle to the mesh. More... | |
size_t | getNumEdges () const |
Get the number of edges. More... | |
size_t | getNumTriangles () const |
Get the number of triangles. More... | |
const std::vector< EdgeType > & | getEdges () const |
Retrieve all edges. More... | |
std::vector< EdgeType > & | getEdges () |
Retrieve all edges (non const version) More... | |
const std::vector< TriangleType > & | getTriangles () const |
Retrieve all triangles. More... | |
std::vector< TriangleType > & | getTriangles () |
Retrieve all triangles (non const version) More... | |
const EdgeType & | getEdge (size_t id) const |
Retrieve a specific edge. More... | |
EdgeType & | getEdge (size_t id) |
Retrieve a specific edge (non const version) More... | |
std::array< SurgSim::Math::Vector3d, 2 > | getEdgePositions (size_t id) const |
Returns an array of the edge's vertices' positions. More... | |
const TriangleType & | getTriangle (size_t id) const |
Retrieve a specific triangle. More... | |
TriangleType & | getTriangle (size_t id) |
Retrieve a specific triangle (non const version) More... | |
void | removeTriangle (size_t id) |
Marks a triangle as invalid, the triangle cannot be accessed via getTriangle anymore. More... | |
std::array< SurgSim::Math::Vector3d, 3 > | getTrianglePositions (size_t id) const |
Returns an array of the triangle's vertices' positions. More... | |
bool | isValid () const |
Test if the TriangleMesh is valid (valid vertex Ids used in all MeshElements) More... | |
void | save (const std::string &fileName) |
Save the triangle mesh in the ply format. More... | |
![]() | |
Vertices () | |
Constructor. More... | |
template<class V > | |
Vertices (const Vertices< V > &other) | |
Copy constructor when the template data is a different type In this case, no data will be copied. More... | |
template<class V > | |
Vertices< VertexData > & | operator= (const Vertices< V > &other) |
Assignment when the template data is a different type In this case, no data will be copied. More... | |
virtual | ~Vertices () |
Destructor. More... | |
void | clear () |
Clear mesh to return to an empty state (no vertices). More... | |
bool | update () |
Performs any updates that are required when the vertices are modified. More... | |
size_t | addVertex (const VertexType &vertex) |
Adds a vertex to the mesh. More... | |
size_t | getNumVertices () const |
Returns the number of vertices in this mesh. More... | |
const VertexType & | getVertex (size_t id) const |
Returns the specified vertex. More... | |
VertexType & | getVertex (size_t id) |
Returns the specified vertex (non const version). More... | |
const std::vector< VertexType > & | getVertices () const |
Returns a vector containing the position of each vertex. More... | |
std::vector< VertexType > & | getVertices () |
Returns a vector containing the position of each vertex (non const version). More... | |
void | setVertexPosition (size_t id, const SurgSim::Math::Vector3d &position) |
Sets the position of a vertex. More... | |
const SurgSim::Math::Vector3d & | getVertexPosition (size_t id) const |
Returns the position of a vertex. More... | |
void | setVertexPositions (const std::vector< SurgSim::Math::Vector3d > &positions, bool doUpdate=true) |
Sets the position of each vertex. More... | |
void | transform (const Math::RigidTransform3d &pose) |
Apply a rigid transform to each vertex. More... | |
bool | operator== (const Vertices &mesh) const |
Compares the mesh with another one (equality) More... | |
bool | operator!= (const Vertices &mesh) const |
Compares the mesh with another one (inequality) More... | |
![]() | |
Asset () | |
Constructor. More... | |
Asset (const Asset &rhs) | |
Copy Constructor. More... | |
virtual | ~Asset () |
Destructor. More... | |
void | load (const std::string &fileName, const SurgSim::Framework::ApplicationData &data) |
Load a file with given name using 'data' as look up path(s). More... | |
void | load (const std::string &fileName) |
Overloaded function using SurgSim::Framework::Runtime::getApplicationData() as look up path(s). More... | |
std::string | getFileName () const |
Return the name of file loaded by this class. More... | |
![]() | |
Accessible () | |
Default Constructor. More... | |
~Accessible () | |
Destructor. More... | |
template<class T > | |
T | getValue (const std::string &name) const |
Retrieves the value with the name by executing the getter if it is found and tries to convert it to the given type. More... | |
boost::any | getValue (const std::string &name) const |
Retrieves the value with the name by executing the getter if it is found. More... | |
template<class T > | |
bool | getValue (const std::string &name, T *value) const |
Retrieves the value with the name by executing the getter if it is found, and converts it to the type of the output parameter. More... | |
void | setValue (const std::string &name, const boost::any &value) |
Sets a value of a property that has setter. More... | |
bool | isReadable (const std::string &name) const |
Check whether a property is readable. More... | |
bool | isWriteable (const std::string &name) const |
Check whether a property is writable. More... | |
void | setGetter (const std::string &name, GetterType func) |
Sets a getter for a given property. More... | |
void | setSetter (const std::string &name, SetterType func) |
Sets a setter for a given property. More... | |
void | setAccessors (const std::string &name, GetterType getter, SetterType setter) |
Sets the accessors getter and setter in one function. More... | |
void | removeAccessors (const std::string &name) |
Removes all the accessors (getter and setter) for a given property. More... | |
void | forwardProperty (const std::string &name, const Accessible &target, const std::string &targetProperty) |
Adds a property with the given name that uses the targets accessors, in effect forwarding the value to the target. More... | |
void | setSerializable (const std::string &name, EncoderType encoder, DecoderType decoder) |
Sets the functions used to convert data from and to a YAML::Node. More... | |
void | setDecoder (const std::string &name, DecoderType decoder) |
Sets the functions used to convert data from a YAML::Node. More... | |
YAML::Node | encode () const |
Encode this Accessible to a YAML::Node. More... | |
void | decode (const YAML::Node &node, const std::vector< std::string > &ignoredProperties=std::vector< std::string >()) |
Decode this Accessible from a YAML::Node, will throw an exception if the data type cannot be converted. More... | |
template<> | |
boost::any | getValue (const std::string &name) const |
Protected Member Functions | |
virtual void | doClearEdges () |
Remove all edges from the mesh. More... | |
virtual void | doClearTriangles () |
Remove all triangles from the mesh. More... | |
virtual bool | isEqual (const Vertices< VertexData > &mesh) const |
Internal comparison of meshes of the same type: returns true if equal, false if not equal. More... | |
bool | doLoad (const std::string &fileName) override |
Derived classes will overwrite this method to do actual loading. More... | |
std::string | m_className |
std::string | m_className |
![]() | |
virtual void | doClearVertices () |
Remove all vertices from the mesh. More... | |
Static Protected Attributes | |
static std::string | m_className = "SurgSim::DataStructures::TriangleMeshPlain" |
Private Member Functions | |
virtual void | doClear () |
Clear mesh to return to an empty state (no vertices, no edges, no triangles). More... | |
Private Attributes | |
std::vector< EdgeType > | m_edges |
Edges. More... | |
std::vector< TriangleType > | m_triangles |
Triangles. More... | |
std::vector< size_t > | m_freeTriangles |
List of indices of deleted triangles, to be reused when another triangle is added. More... | |
Additional Inherited Members | |
![]() | |
static FactoryType & | getFactory () |
Basic class for storing Triangle Meshes, handling basic vertex, edge, and triangle functionality.
TriangleMesh is to be used purely as a data structure and not provide implementation of algorithms. For example, a physics 2D FEM is not a subclass of TriangleMesh, but may use a TriangleMesh for storing the structure of the FEM.
It is recommended that subclasses with a specific purpose (such as for use in collision detection) provide convenience methods for creation of vertices, edges, and triangles and the data each contains. Methods such as createVertex(position, other data...), createEdge(vertices, other data...), and createTriangle(vertices, other data...) simplify the creation of vertices and elements and the data required. These methods would use the addVertex(), addEdge(), and addTriangle() methods to add the created vertices and elements to the TriangleMesh.
Overriding isEqual(const Mesh&) is necessary to do more than just basic list comparison of the vertices, edges, and triangles, which is dependent on order in the list.
Override doUpdate() to provide update functionality when vertices are changes, such as recalculating surface normals.
A subclass that is designed for a specific use (such as collision detection) may also specify the VertexData, EdgeData, and TriangleData to what is required.
VertexData | Type of extra data stored in each vertex |
EdgeData | Type of extra data stored in each edge |
TriangleData | Type of extra data stored in each triangle |
typedef MeshElement<2, EdgeData> SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::EdgeType |
Edge type for convenience (Ids of the 2 vertices)
typedef MeshElement<3, TriangleData> SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::TriangleType |
Triangle type for convenience (Ids of the 3 vertices)
SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::TriangleMesh |
Constructor. The mesh is initially empty (no vertices, no edges, no triangles).
SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::TriangleMesh | ( | const TriangleMesh< VertexData, EdgeData, TriangleData > & | other | ) |
Copy constructor when the template data is the same type.
other | the mesh to copy from |
|
explicit |
Copy constructor when the template data is a different type.
V | Type of extra data stored in each vertex |
E | Type of extra data stored in each edge |
T | Type of extra data stored in each triangle |
other | The mesh to be copied from. Vertex, edge and triangle data will not be copied |
|
virtual |
Destructor.
SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::TriangleMesh | ( | TriangleMesh< VertexData, EdgeData, TriangleData > && | other | ) |
Move Constructor.
other | Constructor source |
size_t SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::addEdge | ( | const EdgeType & | edge | ) |
Adds an edge to the mesh.
No checking on the edge's vertices is performed. Recommend that subclasses with a specific purpose (such as for use in collision detection) have a createEdge(vertices, other data...) method which performs any checking desired and sets up the edge data based on the vertices and other parameters.
edge | Edge to add to the mesh |
size_t SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::addTriangle | ( | const TriangleType & | triangle | ) |
Adds a triangle to the mesh.
triangle | Triangle to add to the mesh Recommend that subclasses with a specific purpose (such as for use in collision detection) have a createTriangle(vertices, other data...) method which performs any checking desired and sets up the triangle data based on the vertices and other parameters. |
|
privatevirtual |
Clear mesh to return to an empty state (no vertices, no edges, no triangles).
Reimplemented from SurgSim::DataStructures::Vertices< VertexData >.
Reimplemented in SurgSim::DataStructures::SegmentMesh< VertexData, EdgeData >.
|
protectedvirtual |
Remove all edges from the mesh.
|
protectedvirtual |
Remove all triangles from the mesh.
Reimplemented in SurgSim::DataStructures::SegmentMesh< VertexData, EdgeData >.
|
overrideprotectedvirtual |
Derived classes will overwrite this method to do actual loading.
filePath | Absolute path to the file. |
Implements SurgSim::Framework::Asset.
|
overridevirtual |
Support serialization with a classname.
Implements SurgSim::Framework::Asset.
TriangleMesh< VertexData, EdgeData, TriangleData >::EdgeType & SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getEdge | ( | size_t | id | ) |
Retrieve a specific edge (non const version)
id | the edge to be retrieved. |
const TriangleMesh< VertexData, EdgeData, TriangleData >::EdgeType & SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getEdge | ( | size_t | id | ) | const |
Retrieve a specific edge.
id | the edge to be retrieved. |
std::array< SurgSim::Math::Vector3d, 2 > SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getEdgePositions | ( | size_t | id | ) | const |
Returns an array of the edge's vertices' positions.
id | the id of the edge |
std::vector<EdgeType>& SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getEdges | ( | ) |
Retrieve all edges (non const version)
std::vector< typename TriangleMesh< VertexData, EdgeData, TriangleData >::EdgeType > & SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getEdges |
Retrieve all edges.
size_t SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getNumEdges |
Get the number of edges.
size_t SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getNumTriangles |
Get the number of triangles.
TriangleMesh< VertexData, EdgeData, TriangleData >::TriangleType & SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getTriangle | ( | size_t | id | ) |
Retrieve a specific triangle (non const version)
SurgSim::Framework::AssertionFailure | if the give triangle was deleted |
id | The id of the triangle to retrieve |
const TriangleMesh< VertexData, EdgeData, TriangleData >::TriangleType & SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getTriangle | ( | size_t | id | ) | const |
Retrieve a specific triangle.
SurgSim::Framework::AssertionFailure | if the given triangle was deleted |
id | The id of the triangle to retrieve |
std::array< SurgSim::Math::Vector3d, 3 > SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getTrianglePositions | ( | size_t | id | ) | const |
Returns an array of the triangle's vertices' positions.
id | the id of the triangle |
std::vector<TriangleType>& SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getTriangles | ( | ) |
Retrieve all triangles (non const version)
std::vector< typename TriangleMesh< VertexData, EdgeData, TriangleData >::TriangleType > & SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::getTriangles |
Retrieve all triangles.
|
protectedvirtual |
Internal comparison of meshes of the same type: returns true if equal, false if not equal.
Override this method to provide custom comparison. Basic TriangleMesh implementation compares vertices, edges and triangles: the order of vertices, edges, and triangles must also match to be considered equal.
mesh | Mesh must be of the same type as that which it is compared against |
Reimplemented from SurgSim::DataStructures::Vertices< VertexData >.
bool SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::isValid |
Test if the TriangleMesh is valid (valid vertex Ids used in all MeshElements)
|
protected |
|
protected |
TriangleMesh< VertexData, EdgeData, TriangleData > & SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::operator= | ( | const TriangleMesh< VertexData, EdgeData, TriangleData > & | other | ) |
Copy Assignment.
other | Assignment source |
TriangleMesh< VertexData, EdgeData, TriangleData > & SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::operator= | ( | TriangleMesh< VertexData, EdgeData, TriangleData > && | other | ) |
Move Assignment.
other | Assignment source |
void SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::removeTriangle | ( | size_t | id | ) |
Marks a triangle as invalid, the triangle cannot be accessed via getTriangle anymore.
id | triangle to delete |
void SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >::save | ( | const std::string & | fileName | ) |
Save the triangle mesh in the ply format.
fileName | the filename where to save |
|
staticprotected |
|
private |
Edges.
|
private |
List of indices of deleted triangles, to be reused when another triangle is added.
|
private |
Triangles.