SurgSim::Math::SurfaceMeshShape Class Reference

SurfaceMeshShape defines a shape based on a mesh, like MeshShape. More...

`#include <SurgSim/Math/SurfaceMeshShape.h>`

Inheritance diagram for SurgSim::Math::SurfaceMeshShape:

## Public Member Functions

| SurfaceMeshShape ()
| Constructor. More...
template<class VertexData , class EdgeData , class TriangleData >
| SurfaceMeshShape (const SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData > &mesh, double thickness=1e-2)
| Constructor. More...
| SURGSIM_CLASSNAME (SurgSim::Math::SurfaceMeshShape)
int | getType () const override
bool | isValid () const override
| Check if this shape contains a valid mesh and the thickness is at least 1e-5 (in meter, to avoid formal and numerical issues). More...
Public Member Functions inherited from SurgSim::Math::MeshShape
| MeshShape ()
| Constructor. More...
| MeshShape (const MeshShape &other)
| Copy constructor. More...
template<class V , class E , class T >
| MeshShape (const SurgSim::DataStructures::TriangleMesh< V, E, T > &other)
| Copy constructor when the template data is a different type. More...
| SURGSIM_CLASSNAME (SurgSim::Math::MeshShape)
const SurgSim::Math::Vector3d & | getNormal (size_t triangleId) const
| Get normal for triangle. More...
double | getVolume () const override
| Get the volume of the shape. More...
Vector3d | getCenter () const override
| Get the volumetric center of the shape. More...
Matrix33d | getSecondMomentOfVolume () const override
| Get the second central moment of the volume, commonly used to calculate the moment of inertia matrix. More...
std::shared_ptr< Shape > | getTransformed (const RigidTransform3d &pose) const override
| Get a copy of this shape with an applied rigid transform. More...
const std::shared_ptr< const SurgSim::DataStructures::AabbTree > | getAabbTree () const
| Get the AabbTree. More...
bool | isTransformable () const override
Public Member Functions inherited from SurgSim::Math::Shape
| Shape ()
| Constructor. More...
virtual | ~Shape ()
| Destructor. More...
virtual std::string | getClassName () const
| Get class name. More...
virtual const Math::Aabbd & | getBoundingBox () const
Public Member Functions inherited from SurgSim::Framework::Accessible
| 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
Public Member Functions inherited from SurgSim::DataStructures::TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData >
| TriangleMesh ()
| Constructor. The mesh is initially empty (no vertices, no edges, no triangles). More...
| TriangleMesh (const TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData > &other)
| Copy constructor when the template data is the same type. More...
| TriangleMesh (const TriangleMesh< V, E, T > &other)
| Copy constructor when the template data is a different type. More...
| TriangleMesh (TriangleMesh &&other)
| Move Constructor. More...
virtual | ~TriangleMesh ()
| Destructor. More...
TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData > & | operator= (const TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData > &other)
| Copy Assignment. More...
TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData > & | operator= (TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData > &&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...
Public Member Functions inherited from SurgSim::DataStructures::Vertices< SurgSim::DataStructures::EmptyData >
| Vertices ()
| Constructor. More...
| Vertices (const Vertices< V > &other)
| Copy constructor when the template data is a different type In this case, no data will be copied. More...
Vertices< SurgSim::DataStructures::EmptyData > & | 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...
Public Member Functions inherited from SurgSim::Framework::Asset
| 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...

## Protected Member Functions

void | computeVolumeIntegrals () override
| Compute useful volume integrals based on the triangle mesh, which are used to get the volume , center and second moment of volume. More...
Protected Member Functions inherited from SurgSim::Math::MeshShape
bool | doUpdate () override
| Performs any updates that are required when the vertices are modified. More...
bool | doLoad (const std::string &fileName) override
| Derived classes will overwrite this method to do actual loading. More...
bool | calculateNormals ()
| Calculate normals for all triangles. More...
void | updateAabbTree ()
| Update the AabbTree, which is an axis-aligned bounding box r-tree used to accelerate spatial searches. More...
Protected Member Functions inherited from SurgSim::DataStructures::TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData >
std::string | m_className
std::string | m_className
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< SurgSim::DataStructures::EmptyData > &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...
Protected Member Functions inherited from SurgSim::DataStructures::Vertices< SurgSim::DataStructures::EmptyData >
virtual void | doClearVertices ()
| Remove all vertices from the mesh. More...
virtual bool | isEqual (const Vertices &mesh) const
| Internal comparison of meshes of the same type: returns true if equal, false if not equal. More...

## Private Attributes

double | m_thickness
| Surface mesh thickness. More...

## Additional Inherited Members

Public Types inherited from SurgSim::Math::Shape
typedef ::SurgSim::Math::Vector3d | Vector3d
typedef ::SurgSim::Math::Matrix33d | Matrix33d
Public Types inherited from SurgSim::Framework::Accessible
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
Public Types inherited from SurgSim::Framework::FactoryBase< Shape >
typedef ObjectFactory< Shape > | FactoryType
Public Types inherited from SurgSim::DataStructures::TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData >
typedef MeshElement< 2, SurgSim::DataStructures::EmptyData > | EdgeType
| Edge type for convenience (Ids of the 2 vertices) More...
typedef MeshElement< 3, SurgSim::DataStructures::NormalData > | TriangleType
| Triangle type for convenience (Ids of the 3 vertices) More...
Public Types inherited from SurgSim::DataStructures::Vertices< SurgSim::DataStructures::EmptyData >
typedef Vertex< SurgSim::DataStructures::EmptyData > | VertexType
| Vertex type for convenience. More...
Public Types inherited from SurgSim::Framework::FactoryBase< Asset >
typedef ObjectFactory< Asset > | FactoryType
Static Public Member Functions inherited from SurgSim::Framework::FactoryBase< Shape >
static FactoryType & | getFactory ()
Static Public Member Functions inherited from SurgSim::Framework::FactoryBase< Asset >
static FactoryType & | getFactory ()
Protected Attributes inherited from SurgSim::Math::MeshShape
SurgSim::Math::Vector3d | m_center
| Center (considering a uniform distribution in the mesh volume) More...
double | m_volume
| Volume (in m^-3) More...
SurgSim::Math::Matrix33d | m_secondMomentOfVolume
| Second moment of volume. More...
Protected Attributes inherited from SurgSim::Math::Shape
Math::Aabbd | m_aabb
Static Protected Attributes inherited from SurgSim::DataStructures::TriangleMesh< SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::EmptyData, SurgSim::DataStructures::NormalData >
static std::string | m_className

## Detailed Description

SurfaceMeshShape defines a shape based on a mesh, like MeshShape.

But, unlike MeshShape, the mesh does not need to be watertight to produce valid volume, center and second moment of volume. In the MeshShape case, these quantities are based on the notion of volume and are therefore undefined if no volume if properly defined. In the SurfaceMeshShape case, these quantities are based on a surface mesh, with a thickness (which is considered constant over the surface and should be multiple orders of magnitude smaller than the two other dimesions, i.e. 1e-3 in practice). If the mesh is not closed or has holes, the class will still produce valid geometric properties.

Note
  If not used in physics, there is no differences between using a SurfaceMeshShape or a MeshShape.
  Any change on the mesh will invalidate the geometric properties.
  Practical use cases:
  * Fixed/Rigid object, the mesh will not change anyway.
  * Deformable object, the mesh will be updated, but the geometric properties will not be used.
  The thickness should be multiple order of magnitude smaller than the other 2 dimensions of the mesh.
  It should also not be smaller than 1e-5 to avoid formal and numerical issues when getting close to 0.
  SurfaceMeshShape does not have any collision algorithm associated with it in SurgSim::Collision and
  SurgSim::Physics::DcdCollision so far.

See also
  MeshShape

## Constructor & Destructor Documentation

## SurfaceMeshShape() [1/2]

SurgSim::Math::SurfaceMeshShape::SurfaceMeshShape | ( |  | ) |

Constructor.

## SurfaceMeshShape() [2/2]

template<class VertexData , class EdgeData , class TriangleData >

SurgSim::Math::SurfaceMeshShape::SurfaceMeshShape | ( | const SurgSim::DataStructures::TriangleMesh< VertexData, EdgeData, TriangleData > & | mesh,
|  | double | thickness = `1e-2`
| ) |  |

Constructor.

Parameters

  mesh | The triangle mesh to build the shape from
  thickness | The thickness associated to this surface mesh

Exceptions

  Raise | an exception if the mesh is invalid

## Member Function Documentation

## computeVolumeIntegrals()

void SurgSim::Math::SurfaceMeshShape::computeVolumeIntegrals | ( |  | ) |

override protected virtual

Compute useful volume integrals based on the triangle mesh, which are used to get the volume , center and second moment of volume.

Reimplemented from SurgSim::Math::MeshShape.

## getType()

int SurgSim::Math::SurfaceMeshShape::getType | ( |  | ) | const

override virtual

Returns
  the type of the shape

Reimplemented from SurgSim::Math::MeshShape.

## isValid()

bool SurgSim::Math::SurfaceMeshShape::isValid | ( |  | ) | const

override virtual

Check if this shape contains a valid mesh and the thickness is at least 1e-5 (in meter, to avoid formal and numerical issues).

Returns
  True if this shape contains a valid mesh and thickness is at least 1e-5; Otherwise, false.

Reimplemented from SurgSim::Math::MeshShape.

## SURGSIM_CLASSNAME()

SurgSim::Math::SurfaceMeshShape::SURGSIM_CLASSNAME | ( | SurgSim::Math::SurfaceMeshShape |  | ) |

## Member Data Documentation

## m_thickness

double SurgSim::Math::SurfaceMeshShape::m_thickness

private

Surface mesh thickness.

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

- SurgSim/Math/SurfaceMeshShape.h
- SurgSim/Math/SurfaceMeshShape-inl.h
- SurgSim/Math/SurfaceMeshShape.cpp