Public Member Functions | Private Member Functions | Private Attributes | List of all members
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:
SurgSim::Math::Shape SurgSim::Framework::Accessible

Public Member Functions

 SurfaceMeshShape ()
 Constructor. More...
 
template<class VertexData , class EdgeData , class TriangleData >
 SurfaceMeshShape (const SurgSim::DataStructures::TriangleMeshBase< VertexData, EdgeData, TriangleData > &mesh, double thickness=1e-2)
 Constructor. More...
 
 SURGSIM_CLASSNAME (SurgSim::Math::SurfaceMeshShape)
 
virtual int getType () override
 
std::shared_ptr< SurgSim::DataStructures::TriangleMeshgetMesh ()
 Get mesh. More...
 
virtual double getVolume () const override
 Get the volume of the shape. More...
 
virtual Vector3d getCenter () const override
 Get the volumetric center of the shape. More...
 
virtual Matrix33d getSecondMomentOfVolume () const override
 Get the second central moment of the volume, commonly used to calculate the moment of inertia matrix. More...
 
void setFileName (const std::string &fileName)
 Set loading filename. More...
 
std::string getFileName () const
 Get the file name of the external file which contains the triangle mesh. More...
 
virtual 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::Shape
virtual ~Shape ()
 
virtual std::string getClassName () const
 Get class name. More...
 
- Public Member Functions inherited from SurgSim::Framework::Accessible
 Accessible ()
 Default Constructor. More...
 
 ~Accessible ()
 Destructor. More...
 
template<class 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...
 
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
 

Private Member Functions

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

Private Attributes

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...
 
std::shared_ptr< SurgSim::DataStructures::TriangleMeshm_mesh
 Collision mesh associated to this MeshShape. More...
 
double m_thickness
 Surface mesh thickness. More...
 
std::string m_fileName
 File name of the external file which contains the triangle mesh. More...
 

Additional Inherited Members

- Public Types inherited from SurgSim::Math::Shape
typedef ::SurgSim::Math::Vector3d Vector3d
 
typedef ::SurgSim::Math::Matrix33d Matrix33d
 
typedef SurgSim::Framework::ObjectFactory< SurgSim::Math::ShapeFactoryType
 
- 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
 
- Static Public Member Functions inherited from SurgSim::Math::Shape
static FactoryTypegetFactory ()
 

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

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

Constructor.

template<class VertexData , class EdgeData , class TriangleData >
SurgSim::Math::SurfaceMeshShape::SurfaceMeshShape ( const SurgSim::DataStructures::TriangleMeshBase< VertexData, EdgeData, TriangleData > &  mesh,
double  thickness = 1e-2 
)

Constructor.

Parameters
meshThe triangle mesh to build the shape from
thicknessThe thickness associated to this surface mesh
Exceptions
Raisean exception if the mesh is invalid

Member Function Documentation

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

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

SurgSim::Math::Vector3d SurgSim::Math::SurfaceMeshShape::getCenter ( ) const
overridevirtual

Get the volumetric center of the shape.

Returns
The center of the shape

Implements SurgSim::Math::Shape.

std::string SurgSim::Math::SurfaceMeshShape::getFileName ( ) const

Get the file name of the external file which contains the triangle mesh.

Returns
File name of the external file which contains the triangle mesh.
std::shared_ptr< SurgSim::DataStructures::TriangleMesh > SurgSim::Math::SurfaceMeshShape::getMesh ( )

Get mesh.

Returns
The collision mesh associated to this MeshShape
SurgSim::Math::Matrix33d SurgSim::Math::SurfaceMeshShape::getSecondMomentOfVolume ( ) const
overridevirtual

Get the second central moment of the volume, commonly used to calculate the moment of inertia matrix.

Returns
The 3x3 symmetric second moment matrix

Implements SurgSim::Math::Shape.

int SurgSim::Math::SurfaceMeshShape::getType ( )
overridevirtual
Returns
the type of the shape

Implements SurgSim::Math::Shape.

double SurgSim::Math::SurfaceMeshShape::getVolume ( ) const
overridevirtual

Get the volume of the shape.

Returns
The volume of the shape (in m-3)

Implements SurgSim::Math::Shape.

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

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.

Implements SurgSim::Math::Shape.

void SurgSim::Math::SurfaceMeshShape::setFileName ( const std::string &  fileName)

Set loading filename.

Parameters
fileNameThe filename to load
Note
The mesh will be loaded right after the file name is set, if 'fileName' indicates a file containing a valid mesh.
If the valid file contains an empty mesh, i.e. no vertex is specified in that file, a empty mesh will be held by this mesh shape.
SurgSim::Math::SurfaceMeshShape::SURGSIM_CLASSNAME ( SurgSim::Math::SurfaceMeshShape  )

Member Data Documentation

SurgSim::Math::Vector3d SurgSim::Math::SurfaceMeshShape::m_center
private

Center (considering a uniform distribution in the mesh volume)

std::string SurgSim::Math::SurfaceMeshShape::m_fileName
private

File name of the external file which contains the triangle mesh.

std::shared_ptr<SurgSim::DataStructures::TriangleMesh> SurgSim::Math::SurfaceMeshShape::m_mesh
private

Collision mesh associated to this MeshShape.

SurgSim::Math::Matrix33d SurgSim::Math::SurfaceMeshShape::m_secondMomentOfVolume
private

Second moment of volume.

double SurgSim::Math::SurfaceMeshShape::m_thickness
private

Surface mesh thickness.

double SurgSim::Math::SurfaceMeshShape::m_volume
private

Volume (in m-3)


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