opensurgsim
Public Types | Public Member Functions | Protected Member Functions | List of all members
SurgSim::DataStructures::Vertices< VertexData > Class Template Reference

Base class for mesh structures, handling basic vertex functionality. More...

#include <Vertices.h>

Inheritance diagram for SurgSim::DataStructures::Vertices< VertexData >:
SurgSim::DataStructures::TetrahedronMesh< VertexData, EdgeData, TriangleData, TetrahedronData > SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData > SurgSim::Physics::Fem< VertexData, Element > SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, SegmentEmptyData > SurgSim::DataStructures::TriangleMesh< VertexData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData > SurgSim::DataStructures::SegmentMesh< VertexData, EdgeData > SurgSim::Graphics::Mesh SurgSim::Math::SegmentMeshShape

Public Types

typedef Vertex< VertexData > VertexType
 Vertex type for convenience.
 

Public Member Functions

 Vertices ()
 Constructor.
 
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.
 
void clear ()
 Clear mesh to return to an empty state (no vertices).
 
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.
 
const VertexTypegetVertex (size_t id) const
 Returns the specified vertex.
 
VertexTypegetVertex (size_t id)
 Returns the specified vertex (non const version).
 
const std::vector< VertexType > & getVertices () const
 Returns a vector containing the position of each vertex.
 
std::vector< VertexType > & getVertices ()
 Returns a vector containing the position of each vertex (non const version).
 
void setVertexPosition (size_t id, const SurgSim::Math::Vector3d &position)
 Sets the position of a vertex. More...
 
const SurgSim::Math::Vector3dgetVertexPosition (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...
 

Protected Member Functions

virtual void doClearVertices ()
 Remove all vertices from the mesh.
 
virtual bool isEqual (const Vertices &mesh) const
 Internal comparison of meshes of the same type: returns true if equal, false if not equal. More...
 

Detailed Description

template<class VertexData>
class SurgSim::DataStructures::Vertices< VertexData >

Base class for mesh structures, handling basic vertex functionality.

Vertices is to be used purely as a data structure and not provide implementation of algorithms. For example, a physics FEM is not a subclass of Vertices, but may use a Mesh for storing the structure of the FEM.

Subclasses of this class should handle the elements required for a specific type of mesh (as simple as just a generic triangle mesh or as specific as a triangle mesh for collision detection, which might also specify the data types for the vertex and elements).

It is recommended that subclasses of this class also provide convenience methods for creation of vertices and elements, and the data each contains. A method such as createVertex(position, other data...) simplifies the creation of vertices and the data required. This method would use the addVertex() method to add the created vertices to the Mesh.

Template Parameters
VertexDataType of extra data stored in each vertex (void for no data)
See also
Vertex
MeshElement

Constructor & Destructor Documentation

§ Vertices()

template<class VertexData >
template<class V >
SurgSim::DataStructures::Vertices< VertexData >::Vertices ( const Vertices< V > &  other)
explicit

Copy constructor when the template data is a different type In this case, no data will be copied.

Template Parameters
Vtype of data stored in the other Vertices
Parameters
otherthe Vertices to copy from

Member Function Documentation

§ addVertex()

template<class VertexData >
size_t SurgSim::DataStructures::Vertices< VertexData >::addVertex ( const VertexType vertex)

Adds a vertex to the mesh.

Recommend that subclasses with a specific purpose (such as for use in collision detection), have a createVertex(position, other data...) method which performs any checking desired and sets up the vertex data based on the other parameters.

Parameters
vertexVertex to add to the mesh
Returns
Unique ID of the new vertex.

§ getVertexPosition()

template<class VertexData >
const SurgSim::Math::Vector3d & SurgSim::DataStructures::Vertices< VertexData >::getVertexPosition ( size_t  id) const

Returns the position of a vertex.

Parameters
idUnique ID of the vertex
Returns
Position of the vertex

§ isEqual()

template<class VertexData >
bool SurgSim::DataStructures::Vertices< VertexData >::isEqual ( const Vertices< VertexData > &  mesh) const
protectedvirtual

Internal comparison of meshes of the same type: returns true if equal, false if not equal.

Override this method to provide custom comparison. Base Mesh implementation compares vertices: the order of vertices must also match to be considered equal.

Parameters
meshMesh must be of the same type as that which it is compared against

Reimplemented in SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData >, SurgSim::DataStructures::TriangleMesh< VertexData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData >, SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, SegmentEmptyData >, and SurgSim::DataStructures::TetrahedronMesh< VertexData, EdgeData, TriangleData, TetrahedronData >.

§ operator!=()

template<class VertexData >
bool SurgSim::DataStructures::Vertices< VertexData >::operator!= ( const Vertices< VertexData > &  mesh) const

Compares the mesh with another one (inequality)

Parameters
meshThe Vertices to compare it to
Returns
False if the two vertices are equals, True otherwise

§ operator=()

template<class VertexData >
template<class V >
Vertices< VertexData > & SurgSim::DataStructures::Vertices< VertexData >::operator= ( const Vertices< V > &  other)

Assignment when the template data is a different type In this case, no data will be copied.

Template Parameters
Vtype of data stored in the other Vertices
Parameters
otherthe Vertices to copy from

§ operator==()

template<class VertexData >
bool SurgSim::DataStructures::Vertices< VertexData >::operator== ( const Vertices< VertexData > &  mesh) const

Compares the mesh with another one (equality)

Parameters
meshThe Vertices to compare it to
Returns
True if the two vertices are equals, False otherwise

§ setVertexPosition()

template<class VertexData >
void SurgSim::DataStructures::Vertices< VertexData >::setVertexPosition ( size_t  id,
const SurgSim::Math::Vector3d position 
)

Sets the position of a vertex.

Parameters
idUnique ID of the vertex
positionPosition of the vertex

§ setVertexPositions()

template<class VertexData >
void SurgSim::DataStructures::Vertices< VertexData >::setVertexPositions ( const std::vector< SurgSim::Math::Vector3d > &  positions,
bool  doUpdate = true 
)

Sets the position of each vertex.

Parameters
positionsVector containing new position for each vertex
doUpdateTrue to perform an update after setting the vertices, false to skip update; default is true.

§ transform()

template<class VertexData >
void SurgSim::DataStructures::Vertices< VertexData >::transform ( const Math::RigidTransform3d pose)

Apply a rigid transform to each vertex.

Parameters
posethe rigid transform to apply

§ update()

template<class VertexData >
bool SurgSim::DataStructures::Vertices< VertexData >::update ( )

Performs any updates that are required when the vertices are modified.

Calls doUpdate() to perform the updates.

Returns
true on success.

The documentation for this class was generated from the following files: