Blender V2.61 - r43446
|
#include <float.h>
#include "BLI_math_inline.h"
Go to the source code of this file.
Classes | |
struct | Cloth |
struct | ClothVertex |
struct | ClothSpring |
struct | CM_SOLVER_DEF |
Defines | |
#define | DO_INLINE MALWAYS_INLINE |
#define | CLOTH_MAX_THREAD 2 |
#define | SOFTGOALSNAP 0.999f |
#define | ALMOST_ZERO FLT_EPSILON |
#define | CLOTH_VERT_FLAG_PINNED 1 |
#define | CLOTH_VERT_FLAG_COLLISION 2 |
#define | CLOTH_VERT_FLAG_PINNED_EM 3 |
#define | VECADDADD(v1, v2, v3) {*(v1)+= *(v2) + *(v3); *(v1+1)+= *(v2+1) + *(v3+1); *(v1+2)+= *(v2+2) + *(v3+2);} |
#define | VECSUBADD(v1, v2, v3) {*(v1)-= *(v2) + *(v3); *(v1+1)-= *(v2+1) + *(v3+1); *(v1+2)-= *(v2+2) + *(v3+2);} |
#define | VECADDSUB(v1, v2, v3) {*(v1)+= *(v2) - *(v3); *(v1+1)+= *(v2+1) - *(v3+1); *(v1+2)+= *(v2+2) - *(v3+2);} |
#define | VECSUBADDSS(v1, v2, aS, v3, bS) {*(v1)-= *(v2)*aS + *(v3)*bS; *(v1+1)-= *(v2+1)*aS + *(v3+1)*bS; *(v1+2)-= *(v2+2)*aS + *(v3+2)*bS;} |
#define | VECADDSUBSS(v1, v2, aS, v3, bS) {*(v1)+= *(v2)*aS - *(v3)*bS; *(v1+1)+= *(v2+1)*aS - *(v3+1)*bS; *(v1+2)+= *(v2+2)*aS - *(v3+2)*bS;} |
#define | VECADDSS(v1, v2, aS, v3, bS) {*(v1)= *(v2)*aS + *(v3)*bS; *(v1+1)= *(v2+1)*aS + *(v3+1)*bS; *(v1+2)= *(v2+2)*aS + *(v3+2)*bS;} |
#define | VECADDS(v1, v2, v3, bS) {*(v1)= *(v2) + *(v3)*bS; *(v1+1)= *(v2+1) + *(v3+1)*bS; *(v1+2)= *(v2+2) + *(v3+2)*bS;} |
#define | VECSUBMUL(v1, v2, aS) {*(v1)-= *(v2) * aS; *(v1+1)-= *(v2+1) * aS; *(v1+2)-= *(v2+2) * aS;} |
#define | VECSUBS(v1, v2, v3, bS) {*(v1)= *(v2) - *(v3)*bS; *(v1+1)= *(v2+1) - *(v3+1)*bS; *(v1+2)= *(v2+2) - *(v3+2)*bS;} |
#define | VECSUBSB(v1, v2, v3, bS) {*(v1)= (*(v2)- *(v3))*bS; *(v1+1)= (*(v2+1) - *(v3+1))*bS; *(v1+2)= (*(v2+2) - *(v3+2))*bS;} |
#define | VECMULS(v1, aS) {*(v1)*= aS; *(v1+1)*= aS; *(v1+2)*= *aS;} |
#define | VECADDMUL(v1, v2, aS) {*(v1)+= *(v2) * aS; *(v1+1)+= *(v2+1) * aS; *(v1+2)+= *(v2+2) * aS;} |
Typedefs | |
typedef struct Cloth | Cloth |
typedef struct ClothVertex | ClothVertex |
typedef struct ClothSpring | ClothSpring |
Enumerations | |
enum | CLOTH_SIMSETTINGS_FLAGS { CLOTH_SIMSETTINGS_FLAG_COLLOBJ = ( 1 << 2 ), CLOTH_SIMSETTINGS_FLAG_GOAL = ( 1 << 3 ), CLOTH_SIMSETTINGS_FLAG_TEARING = ( 1 << 4 ), CLOTH_SIMSETTINGS_FLAG_SCALING = ( 1 << 8 ), CLOTH_SIMSETTINGS_FLAG_CCACHE_EDIT = (1 << 12), CLOTH_SIMSETTINGS_FLAG_NO_SPRING_COMPRESS = (1 << 13) } |
enum | CLOTH_COLLISIONSETTINGS_FLAGS { CLOTH_COLLSETTINGS_FLAG_ENABLED = ( 1 << 1 ), CLOTH_COLLSETTINGS_FLAG_SELF = ( 1 << 2 ) } |
enum | CLOTH_SPRING_TYPES { CLOTH_SPRING_TYPE_STRUCTURAL = ( 1 << 1 ), CLOTH_SPRING_TYPE_SHEAR = ( 1 << 2 ), CLOTH_SPRING_TYPE_BENDING = ( 1 << 3 ), CLOTH_SPRING_TYPE_GOAL = ( 1 << 4 ) } |
enum | CLOTH_SPRINGS_FLAGS { CLOTH_SPRING_FLAG_DEACTIVATE = ( 1 << 1 ), CLOTH_SPRING_FLAG_NEEDED = ( 1 << 2 ) } |
enum | CM_SOLVER_ID { CM_IMPLICIT = 0 } |
Functions | |
int | cloth_bvh_objcollision (struct Object *ob, struct ClothModifierData *clmd, float step, float dt) |
int | implicit_init (struct Object *ob, struct ClothModifierData *clmd) |
int | implicit_free (struct ClothModifierData *clmd) |
int | implicit_solver (struct Object *ob, float frame, struct ClothModifierData *clmd, struct ListBase *effectors) |
void | implicit_set_positions (struct ClothModifierData *clmd) |
void | clmdSetInterruptCallBack (int(*f)(void)) |
void | cloth_free_modifier_extern (struct ClothModifierData *clmd) |
void | cloth_free_modifier (struct ClothModifierData *clmd) |
void | cloth_init (struct ClothModifierData *clmd) |
struct DerivedMesh * | clothModifier_do (struct ClothModifierData *clmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm) |
void | cloth_update_normals (ClothVertex *verts, int nVerts, struct MFace *face, int totface) |
int | cloth_uses_vgroup (struct ClothModifierData *clmd) |
void | bvhtree_update_from_cloth (struct ClothModifierData *clmd, int moving) |
void | bvhselftree_update_from_cloth (struct ClothModifierData *clmd, int moving) |
void | cloth_clear_cache (struct Object *ob, struct ClothModifierData *clmd, float framenr) |
int | cloth_add_spring (struct ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type) |
Definition in file BKE_cloth.h.
#define ALMOST_ZERO FLT_EPSILON |
Definition at line 55 of file BKE_cloth.h.
Referenced by cloth_calc_spring_force(), cloth_collision(), cloth_collision_response_static(), cloth_from_object(), and collision_compute_barycentric().
#define CLOTH_MAX_THREAD 2 |
Definition at line 48 of file BKE_cloth.h.
#define CLOTH_VERT_FLAG_COLLISION 2 |
Definition at line 59 of file BKE_cloth.h.
#define CLOTH_VERT_FLAG_PINNED 1 |
Definition at line 58 of file BKE_cloth.h.
Referenced by cloth_apply_vgroup(), cloth_bvh_objcollision(), cloth_from_object(), implicit_init(), and implicit_solver().
#define CLOTH_VERT_FLAG_PINNED_EM 3 |
Definition at line 60 of file BKE_cloth.h.
#define DO_INLINE MALWAYS_INLINE |
Definition at line 46 of file BKE_cloth.h.
#define SOFTGOALSNAP 0.999f |
Definition at line 51 of file BKE_cloth.h.
Referenced by cloth_apply_vgroup().
#define VECADDADD | ( | v1, | |
v2, | |||
v3 | |||
) | {*(v1)+= *(v2) + *(v3); *(v1+1)+= *(v2+1) + *(v3+1); *(v1+2)+= *(v2+2) + *(v3+2);} |
Definition at line 137 of file BKE_cloth.h.
Referenced by addadd_fmatrix_fmatrix().
#define VECADDMUL | ( | v1, | |
v2, | |||
aS | |||
) | {*(v1)+= *(v2) * aS; *(v1+1)+= *(v2+1) * aS; *(v1+2)+= *(v2+2) * aS;} |
Definition at line 148 of file BKE_cloth.h.
Referenced by cloth_bvh_objcollisions_resolve(), cloth_collision_response_static(), and collision_interpolateOnTriangle().
#define VECADDS | ( | v1, | |
v2, | |||
v3, | |||
bS | |||
) | {*(v1)= *(v2) + *(v3)*bS; *(v1+1)= *(v2+1) + *(v3+1)*bS; *(v1+2)= *(v2+2) + *(v3+2)*bS;} |
Definition at line 143 of file BKE_cloth.h.
Referenced by add_lfvector_lfvectorS(), cloth_calc_force(), cloth_calc_spring_force(), and collision_move_object().
#define VECADDSS | ( | v1, | |
v2, | |||
aS, | |||
v3, | |||
bS | |||
) | {*(v1)= *(v2)*aS + *(v3)*bS; *(v1+1)= *(v2+1)*aS + *(v3+1)*bS; *(v1+2)= *(v2+2)*aS + *(v3+2)*bS;} |
Definition at line 142 of file BKE_cloth.h.
Referenced by add_lfvectorS_lfvectorS().
#define VECADDSUB | ( | v1, | |
v2, | |||
v3 | |||
) | {*(v1)+= *(v2) - *(v3); *(v1+1)+= *(v2+1) - *(v3+1); *(v1+2)+= *(v2+2) - *(v3+2);} |
Definition at line 139 of file BKE_cloth.h.
Referenced by addsub_fmatrix_fmatrix().
#define VECADDSUBSS | ( | v1, | |
v2, | |||
aS, | |||
v3, | |||
bS | |||
) | {*(v1)+= *(v2)*aS - *(v3)*bS; *(v1+1)+= *(v2+1)*aS - *(v3+1)*bS; *(v1+2)+= *(v2+2)*aS - *(v3+2)*bS;} |
Definition at line 141 of file BKE_cloth.h.
Referenced by addsub_fmatrixS_fmatrixS().
#define VECMULS | ( | v1, | |
aS | |||
) | {*(v1)*= aS; *(v1+1)*= aS; *(v1+2)*= *aS;} |
Definition at line 147 of file BKE_cloth.h.
#define VECSUBADD | ( | v1, | |
v2, | |||
v3 | |||
) | {*(v1)-= *(v2) + *(v3); *(v1+1)-= *(v2+1) + *(v3+1); *(v1+2)-= *(v2+2) + *(v3+2);} |
Definition at line 138 of file BKE_cloth.h.
Referenced by subadd_fmatrix_fmatrix().
#define VECSUBADDSS | ( | v1, | |
v2, | |||
aS, | |||
v3, | |||
bS | |||
) | {*(v1)-= *(v2)*aS + *(v3)*bS; *(v1+1)-= *(v2+1)*aS + *(v3+1)*bS; *(v1+2)-= *(v2+2)*aS + *(v3+2)*bS;} |
Definition at line 140 of file BKE_cloth.h.
Referenced by subadd_fmatrixS_fmatrixS().
#define VECSUBMUL | ( | v1, | |
v2, | |||
aS | |||
) | {*(v1)-= *(v2) * aS; *(v1+1)-= *(v2+1) * aS; *(v1+2)-= *(v2+2) * aS;} |
Definition at line 144 of file BKE_cloth.h.
Referenced by submul_lfvectorS().
#define VECSUBS | ( | v1, | |
v2, | |||
v3, | |||
bS | |||
) | {*(v1)= *(v2) - *(v3)*bS; *(v1+1)= *(v2+1) - *(v3+1)*bS; *(v1+2)= *(v2+2) - *(v3+2)*bS;} |
Definition at line 145 of file BKE_cloth.h.
Referenced by sub_lfvector_lfvectorS().
#define VECSUBSB | ( | v1, | |
v2, | |||
v3, | |||
bS | |||
) | {*(v1)= (*(v2)- *(v3))*bS; *(v1+1)= (*(v2+1) - *(v3+1))*bS; *(v1+2)= (*(v2+2) - *(v3+2))*bS;} |
Definition at line 146 of file BKE_cloth.h.
This structure describes a cloth object against which the simulation can run.
The m and n members of this structure represent the assumed rectangular ordered grid for which the original paper is written. At some point they need to disappear and we need to determine out own connectivity of the mesh based on the actual edges in the mesh.
typedef struct ClothSpring ClothSpring |
The definition of a spring.
typedef struct ClothVertex ClothVertex |
The definition of a cloth vertex.
Definition at line 163 of file BKE_cloth.h.
CLOTH_SIMSETTINGS_FLAG_COLLOBJ | |
CLOTH_SIMSETTINGS_FLAG_GOAL | |
CLOTH_SIMSETTINGS_FLAG_TEARING | |
CLOTH_SIMSETTINGS_FLAG_SCALING | |
CLOTH_SIMSETTINGS_FLAG_CCACHE_EDIT | |
CLOTH_SIMSETTINGS_FLAG_NO_SPRING_COMPRESS |
Definition at line 152 of file BKE_cloth.h.
enum CLOTH_SPRING_TYPES |
CLOTH_SPRING_TYPE_STRUCTURAL | |
CLOTH_SPRING_TYPE_SHEAR | |
CLOTH_SPRING_TYPE_BENDING | |
CLOTH_SPRING_TYPE_GOAL |
Definition at line 170 of file BKE_cloth.h.
enum CLOTH_SPRINGS_FLAGS |
Definition at line 179 of file BKE_cloth.h.
enum CM_SOLVER_ID |
Definition at line 239 of file BKE_cloth.h.
void bvhselftree_update_from_cloth | ( | struct ClothModifierData * | clmd, |
int | moving | ||
) |
Definition at line 303 of file cloth.c.
References BLI_bvhtree_update_node(), BLI_bvhtree_update_tree(), Cloth::bvhselftree, ClothModifierData::clothObject, co, copy_v3_v3(), i, Cloth::mfaces, NULL, Cloth::numverts, ClothVertex::tx, ClothVertex::txold, and Cloth::verts.
Referenced by cloth_bvh_objcollision().
void bvhtree_update_from_cloth | ( | struct ClothModifierData * | clmd, |
int | moving | ||
) |
Definition at line 249 of file cloth.c.
References BLI_bvhtree_update_node(), BLI_bvhtree_update_tree(), Cloth::bvhtree, ClothModifierData::clothObject, co, copy_v3_v3(), i, Cloth::mfaces, NULL, Cloth::numfaces, ClothVertex::tx, ClothVertex::txold, MFace::v1, MFace::v2, MFace::v3, MFace::v4, and Cloth::verts.
Referenced by cloth_bvh_objcollision().
void clmdSetInterruptCallBack | ( | int(*)(void) | f | ) |
int cloth_add_spring | ( | struct ClothModifierData * | clmd, |
unsigned int | indexA, | ||
unsigned int | indexB, | ||
float | restlength, | ||
int | spring_type | ||
) |
Definition at line 988 of file cloth.c.
References BLI_linklist_prepend(), ClothModifierData::clothObject, ClothSpring::flags, ClothSpring::ij, ClothSpring::kl, MEM_callocN(), NULL, Cloth::numsprings, ClothSpring::restlen, Cloth::springs, ClothSpring::stiffness, and ClothSpring::type.
Referenced by cloth_from_object().
int cloth_bvh_objcollision | ( | struct Object * | ob, |
struct ClothModifierData * | clmd, | ||
float | step, | ||
float | dt | ||
) |
Definition at line 2361 of file collision.c.
References ABS, ClothVertex::avg_spring_len, BLI_bvhtree_overlap(), BLI_edgehash_haskey(), Cloth::bvhselftree, bvhselftree_update_from_cloth(), Cloth::bvhtree, CollisionModifierData::bvhtree, bvhtree_update_from_cloth(), cloth_bvh_objcollisions_nearcheck(), cloth_bvh_objcollisions_resolve(), CLOTH_COLLSETTINGS_FLAG_SELF, CLOTH_SIMSETTINGS_FLAG_COLLOBJ, CLOTH_SIMSETTINGS_FLAG_GOAL, CLOTH_VERT_FLAG_PINNED, ClothModifierData::clothObject, ClothModifierData::coll_parms, collision_move_object(), Cloth::edgehash, eModifierType_Collision, ClothCollSettings::flags, ClothVertex::flags, ClothSimSettings::flags, get_collisionobjects(), ClothCollSettings::group, i, BVHTreeOverlap::indexA, BVHTreeOverlap::indexB, length(), ClothCollSettings::loop_count, MAX2, MEM_callocN(), MEM_freeN(), MIN2, modifiers_findByType(), mul_v3_fl(), normalize_v3(), NULL, Cloth::numverts, ClothModifierData::scene, ClothCollSettings::self_loop_count, ClothCollSettings::selfepsilon, ClothModifierData::sim_parms, VECADD, VECSUB, and Cloth::verts.
Referenced by implicit_solver().
void cloth_clear_cache | ( | struct Object * | ob, |
struct ClothModifierData * | clmd, | ||
float | framenr | ||
) |
Definition at line 347 of file cloth.c.
References BKE_ptcache_id_clear(), BKE_ptcache_id_from_cloth(), PTCacheID::cache, PointCache::edit, Object::mode, OB_MODE_PARTICLE_EDIT, and PTCACHE_CLEAR_AFTER.
void cloth_free_modifier | ( | struct ClothModifierData * | clmd | ) |
Definition at line 558 of file cloth.c.
References BLI_bvhtree_free(), BLI_edgehash_free(), BLI_linklist_free(), Cloth::bvhselftree, Cloth::bvhtree, ClothModifierData::clothObject, Cloth::edgehash, CM_SOLVER_DEF::free, LinkNode::link, MEM_freeN(), Cloth::mfaces, LinkNode::next, NULL, Cloth::numsprings, Cloth::numverts, ClothModifierData::sim_parms, ClothSimSettings::solver_type, Cloth::springs, and Cloth::verts.
Referenced by BKE_ptcache_id_reset(), cloth_from_mesh(), cloth_from_object(), free_hair(), and hair_step().
void cloth_free_modifier_extern | ( | struct ClothModifierData * | clmd | ) |
Definition at line 627 of file cloth.c.
References BLI_bvhtree_free(), BLI_edgehash_free(), BLI_linklist_free(), Cloth::bvhselftree, Cloth::bvhtree, ClothModifierData::clothObject, Cloth::edgehash, CM_SOLVER_DEF::free, G, LinkNode::link, MEM_freeN(), Cloth::mfaces, LinkNode::next, NULL, Cloth::numsprings, Cloth::numverts, ClothModifierData::sim_parms, ClothSimSettings::solver_type, Cloth::springs, and Cloth::verts.
Referenced by freeData().
void cloth_init | ( | ClothModifierData * | clmd | ) |
cloth_init - creates a new cloth simulation.
1. create object 2. fill object with standard values or with the GUI settings if given
Definition at line 111 of file cloth.c.
References ClothSimSettings::avg_spring_len, ClothSimSettings::bending, BKE_add_effector_weights(), ClothSimSettings::Cdis, CLOTH_COLLSETTINGS_FLAG_ENABLED, ClothModifierData::coll_parms, ClothCollSettings::collision_list, ClothSimSettings::Cvi, ClothSimSettings::defgoal, ClothSimSettings::eff_force_scale, ClothSimSettings::eff_wind_scale, ClothSimSettings::effector_weights, ClothCollSettings::epsilon, ClothCollSettings::flags, ClothSimSettings::flags, ClothCollSettings::friction, ClothSimSettings::goalfrict, ClothSimSettings::goalspring, ClothSimSettings::gravity, ClothCollSettings::loop_count, ClothSimSettings::mass, ClothSimSettings::maxgoal, ClothSimSettings::maxspringlen, ClothSimSettings::mingoal, NULL, ClothModifierData::point_cache, ClothSimSettings::preroll, ClothSimSettings::presets, ClothSimSettings::reset, ClothCollSettings::self_friction, ClothCollSettings::self_loop_count, ClothCollSettings::selfepsilon, ClothSimSettings::shear, ClothModifierData::sim_parms, ClothSimSettings::solver_type, PointCache::step, ClothSimSettings::stepsPerFrame, ClothSimSettings::structural, ClothSimSettings::timescale, ClothSimSettings::velocity_smooth, and ClothSimSettings::vgroup_mass.
Referenced by initData().
void cloth_update_normals | ( | ClothVertex * | verts, |
int | nVerts, | ||
struct MFace * | face, | ||
int | totface | ||
) |
int cloth_uses_vgroup | ( | struct ClothModifierData * | clmd | ) |
Definition at line 732 of file cloth.c.
References CLOTH_SIMSETTINGS_FLAG_GOAL, CLOTH_SIMSETTINGS_FLAG_SCALING, ClothSimSettings::flags, ClothModifierData::sim_parms, ClothSimSettings::vgroup_bend, ClothSimSettings::vgroup_mass, and ClothSimSettings::vgroup_struct.
Referenced by cloth_apply_vgroup(), and requiredDataMask().
struct DerivedMesh* clothModifier_do | ( | struct ClothModifierData * | clmd, |
struct Scene * | scene, | ||
struct Object * | ob, | ||
struct DerivedMesh * | dm | ||
) | [read] |
Definition at line 431 of file cloth.c.
References BKE_ptcache_get_continue_physics(), BKE_ptcache_id_from_cloth(), BKE_ptcache_id_reset(), BKE_ptcache_id_time(), BKE_ptcache_invalidate(), BKE_ptcache_read(), BKE_ptcache_validate(), BKE_ptcache_write(), CDDM_copy(), RenderData::cfra, cloth_to_object(), ClothModifierData::clothObject, do_init_cloth(), do_step_cloth(), ClothSimSettings::dt, PointCache::flag, DerivedMesh::getNumVerts, implicit_set_positions(), PointCache::last_exact, Cloth::last_frame, Cloth::numverts, ClothModifierData::point_cache, ClothSimSettings::preroll, PTCACHE_BAKED, PTCACHE_OUTDATED, PTCACHE_READ_EXACT, PTCACHE_READ_INTERPOLATED, PTCACHE_READ_OLD, PTCACHE_REDO_NEEDED, PTCACHE_RESET_OUTDATED, Scene::r, ClothSimSettings::reset, ClothModifierData::scene, ClothModifierData::sim_parms, PointCache::simframe, ClothSimSettings::stepsPerFrame, RenderData::subframe, and ClothSimSettings::timescale.
Referenced by applyModifier(), and do_hair_dynamics().
int implicit_free | ( | struct ClothModifierData * | clmd | ) |
Definition at line 821 of file implicit.c.
References Implicit_Data::A, Implicit_Data::B, Implicit_Data::bigI, ClothModifierData::clothObject, del_bfmatrix(), del_lfvector(), Implicit_Data::dFdV, Implicit_Data::dFdX, Implicit_Data::dV, Implicit_Data::F, Cloth::implicit, Implicit_Data::M, MEM_freeN(), Implicit_Data::olddV, Implicit_Data::P, Implicit_Data::Pinv, Implicit_Data::S, Implicit_Data::V, Implicit_Data::Vnew, Implicit_Data::X, Implicit_Data::Xnew, and Implicit_Data::z.
int implicit_init | ( | struct Object * | ob, |
struct ClothModifierData * | clmd | ||
) |
void implicit_set_positions | ( | struct ClothModifierData * | clmd | ) |
Definition at line 1981 of file implicit.c.
References ClothModifierData::clothObject, G, i, Cloth::implicit, Cloth::numverts, ClothVertex::v, Implicit_Data::V, VECCOPY, Cloth::verts, ClothVertex::x, and Implicit_Data::X.
Referenced by cloth_from_object(), clothModifier_do(), and do_init_cloth().
int implicit_solver | ( | struct Object * | ob, |
float | frame, | ||
struct ClothModifierData * | clmd, | ||
struct ListBase * | effectors | ||
) |
Definition at line 1827 of file implicit.c.
References Implicit_Data::A, add_lfvector_lfvectorS(), Implicit_Data::B, Implicit_Data::bigI, Cloth::bvhtree, cloth_bvh_objcollision(), cloth_calc_force(), CLOTH_COLLSETTINGS_FLAG_ENABLED, CLOTH_SIMSETTINGS_FLAG_GOAL, CLOTH_VERT_FLAG_PINNED, ClothModifierData::clothObject, ClothModifierData::coll_parms, copy_v3_v3(), cp_lfvector(), Implicit_Data::dFdV, Implicit_Data::dFdX, Implicit_Data::dV, Implicit_Data::F, ClothCollSettings::flags, ClothVertex::flags, ClothSimSettings::flags, Cloth::implicit, Implicit_Data::M, MEM_callocN(), MEM_freeN(), mul_fvector_S(), mul_v3_fl(), Cloth::numverts, Implicit_Data::olddV, Implicit_Data::P, Implicit_Data::Pinv, Implicit_Data::S, ClothModifierData::sim_parms, simulate_implicit_euler(), step(), ClothSimSettings::stepsPerFrame, ClothSimSettings::timescale, ClothVertex::tv, ClothVertex::tx, Implicit_Data::V, VECADD, VECCOPY, VECSUB, Cloth::verts, Implicit_Data::Vnew, Implicit_Data::X, ClothVertex::xconst, Implicit_Data::Xnew, ClothVertex::xold, and Implicit_Data::z.