|
| 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::TriangleMesh > | getMesh () |
| 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...
|
|
virtual | ~Shape () |
|
virtual std::string | getClassName () const |
| Get class name. 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...
|
|
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 |
|
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