#include <freecloth/simulator/simSimulator.h>
Inheritance diagram for freecloth::SimSimulator:
Public Types | |
enum | ForceType { F_STRETCH, F_SHEAR, F_BEND, F_GRAVITY, F_DRAG, NB_FORCES } |
The individual classes of forces. | |
Public Methods | |
SimSimulator (const GeMesh &initialMesh) | |
const GeMesh & | getMesh () const |
const RCShdPtr< GeMesh > & | getMeshPtr () const |
void | rewind () |
Rewind simulation time to zero, and return the mesh to its initial state. | |
void | step () |
Advance the simulation by one timestep. step() is equivalent to calling - preSubSteps() - repeated subStep() calls - postSubSteps(). | |
BaTime::Instant | getTime () const |
Retrieve the current simulation time. | |
void | removeAllConstraints () |
Remove all constraints on all vertices. | |
void | setPosConstraintPlane (GeMesh::VertexId, const GeVector &) |
Constrain movement of the vertex to the plane defined by the given normal. | |
void | setPosConstraintLine (GeMesh::VertexId, const GeVector &) |
Constrain movement of the vertex to the given line. | |
void | setPosConstraintFull (GeMesh::VertexId) |
Completely constrain the vertex, allowing no movement. | |
void | setVelConstraint (GeMesh::VertexId, const GeVector &) |
Force the vertex to move with the specified velocity. This overrides any position constraints. | |
bool | subStepsDone () const |
Finer grained simulation control - allows the client more control over the computation. See step() for details. | |
void | preSubSteps () |
Finer grained simulation control - allows the client more control over the computation. See step() for details. | |
void | subStep () |
Finer grained simulation control - allows the client more control over the computation. See step() for details. | |
void | postSubSteps () |
Finer grained simulation control - allows the client more control over the computation. See step() for details. | |
void | setTimestep (Float) |
Mutator. | |
void | setParams (const Params &) |
Mutator. | |
void | setDensity (Float rho) |
Mutator. | |
void | setPCGTolerance (Float) |
Mutator. | |
Float | getTimestep () const |
Accessor. | |
const Params & | getParams () const |
Accessor. | |
Float | getDensity () const |
Accessor. | |
Float | getPCGTolerance () const |
Accessor. | |
GeVector | getVelocity (GeMesh::VertexId vid) const |
Only exposed for debugging purposes. | |
GeVector | getForce (GeMesh::VertexId vid) const |
Only exposed for debugging purposes. | |
Float | getEnergy (ForceType) const |
Only exposed for debugging purposes. | |
Float | getTriEnergy (ForceType, GeMesh::FaceId) const |
Only exposed for debugging purposes. | |
GeVector | getForce (ForceType type, GeMesh::VertexId vid) const |
Only exposed for debugging purposes. | |
GeVector | getDampingForce (ForceType type, GeMesh::VertexId vid) const |
Only exposed for debugging purposes. | |
void | setMesh (const GeMesh &) |
Only exposed for debugging purposes. |
Using the simulation is fairly straightforward. The client supplies an initial mesh, which must have disc topology. The client also specifies the density of the cloth, which indirectly defines the mass of each triangle of the mesh. The client can also specify constraints on the cloth motion, constraining both the position and the velocity of individual nodes of the mesh.
Time starts at zero, and is advanced by a fixed timestep by calls to step(). The client can retrieve the mesh after each timestep. The simulation can be rewound to the beginning by calling rewind().
There are many parameters for the simulation algorithm. See [BarWit98] or the description in SimSimulator::Params for details.
Test:
References:
Definition at line 106 of file simSimulator.h.