SOFA plugin: PersistentContact  master
Open source framework for multi-physics simuation
sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 > Class Template Reference

#include <PersistentFrictionContact.h>

Inheritance diagram for sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >:

Protected Attributes

bool use_mapper_for_state1
 
bool use_mapper_for_state2
 
MechanicalState1mstate1
 
MechanicalState2mstate2
 
component::container::MechanicalObject< DataTypes1 > * constraintModel1
 
component::container::MechanicalObject< DataTypes2 > * constraintModel2
 
sofa::component::mapping::PersistentContactMappingmap1
 
sofa::component::mapping::PersistentContactMappingmap2
 
std::vector< Vector3 > barycentricValues1
 
std::vector< Vector3 > barycentricValues2
 
MappedContactsMap m_generatedContacts
 
MappedContactsMap m_stickedContacts
 
MappedContactsMap m_slidingContacts
 
DetectionOutputVector m_inactiveContacts
 

Public Member Functions

 SOFA_CLASS (SOFA_TEMPLATE2(PersistentFrictionContact, TCollisionModel1, TCollisionModel2), SOFA_TEMPLATE2(FrictionContact, TCollisionModel1, TCollisionModel2))
 
std::pair< core::CollisionModel *, core::CollisionModel * > getCollisionModels ()
 
 PersistentFrictionContact ()
 
 PersistentFrictionContact (CollisionModel1 *model1, CollisionModel2 *model2, Intersection *intersectionMethod)
 
 ~PersistentFrictionContact ()
 
void cleanup ()
 
void setDetectionOutputs (OutputVector *outputs)
 Set the generic description of a contact point. More...
 
void createResponse (core::objectmodel::BaseContext *group)
 
virtual void removeResponse ()
 
void init ()
 
void draw (const core::visual::VisualParams *vparams)
 

Protected Member Functions

std::pair< bool, bool > findMappingOrUseMapper ()
 
template<class T >
bool findMappingOrUseMapper (core::behavior::MechanicalState< T > *mState, container::MechanicalObject< T > *&constraintModel, component::mapping::PersistentContactMapping *&map)
 
void activateConstraint ()
 
void resetPersistentContactMappings ()
 
int mapThePersistentContact (Vector3 &, int, Vector3 &, bool)
 
int keepThePersistentContact (int, bool)
 
void filterDuplicatedDetectionOutputs (TOutputVector &input, DetectionOutputVector &output)
 Removes duplicate contacts. More...
 
bool haveSameId (const core::collision::DetectionOutput &input_do, const core::collision::DetectionOutput &output_do)
 
bool areNear (const core::collision::DetectionOutput &input_do, const core::collision::DetectionOutput &output_do)
 
void keepStickyContacts (const DetectionOutputVector &output)
 
void resetConstraintStoredData ()
 Reset constraint stored forces, contact states... More...
 
bool isSticked (sofa::core::collision::DetectionOutput *) const
 
bool isSliding (sofa::core::collision::DetectionOutput *) const
 
int mapThePersistentContact (Vector3 &, int index, Vector3 &pos, bool case1)
 
int mapThePersistentContact (Vector3 &baryCoord, int index, Vector3 &pos, bool case1)
 
int mapThePersistentContact (Vector3 &baryCoord, int index, Vector3 &pos, bool case1)
 
int mapThePersistentContact (Vector3 &baryCoord, int index, Vector3 &pos, bool case1)
 

Attribute details

◆ barycentricValues1

template<class TCollisionModel1 , class TCollisionModel2 >
std::vector< Vector3 > sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::barycentricValues1
protected

◆ barycentricValues2

template<class TCollisionModel1 , class TCollisionModel2 >
std::vector< Vector3 > sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::barycentricValues2
protected

◆ constraintModel1

template<class TCollisionModel1 , class TCollisionModel2 >
component::container::MechanicalObject< DataTypes1 >* sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::constraintModel1
protected

◆ constraintModel2

template<class TCollisionModel1 , class TCollisionModel2 >
component::container::MechanicalObject< DataTypes2 >* sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::constraintModel2
protected

◆ m_generatedContacts

template<class TCollisionModel1 , class TCollisionModel2 >
MappedContactsMap sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::m_generatedContacts
protected

◆ m_inactiveContacts

template<class TCollisionModel1 , class TCollisionModel2 >
DetectionOutputVector sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::m_inactiveContacts
protected

◆ m_slidingContacts

template<class TCollisionModel1 , class TCollisionModel2 >
MappedContactsMap sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::m_slidingContacts
protected

◆ m_stickedContacts

template<class TCollisionModel1 , class TCollisionModel2 >
MappedContactsMap sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::m_stickedContacts
protected

◆ map1

template<class TCollisionModel1 , class TCollisionModel2 >
sofa::component::mapping::PersistentContactMapping* sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::map1
protected

◆ map2

template<class TCollisionModel1 , class TCollisionModel2 >
sofa::component::mapping::PersistentContactMapping* sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::map2
protected

◆ mstate1

template<class TCollisionModel1 , class TCollisionModel2 >
MechanicalState1* sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::mstate1
protected

◆ mstate2

template<class TCollisionModel1 , class TCollisionModel2 >
MechanicalState2* sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::mstate2
protected

◆ use_mapper_for_state1

template<class TCollisionModel1 , class TCollisionModel2 >
bool sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::use_mapper_for_state1
protected

◆ use_mapper_for_state2

template<class TCollisionModel1 , class TCollisionModel2 >
bool sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::use_mapper_for_state2
protected

Constructor details

◆ PersistentFrictionContact() [1/2]

template<class TCollisionModel1 , class TCollisionModel2 >
sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::PersistentFrictionContact ( )
inline

◆ PersistentFrictionContact() [2/2]

template<class TCollisionModel1 , class TCollisionModel2 >
sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::PersistentFrictionContact ( CollisionModel1 model1,
CollisionModel2 model2,
Intersection intersectionMethod 
)

◆ ~PersistentFrictionContact()

template<class TCollisionModel1 , class TCollisionModel2 >
sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::~PersistentFrictionContact

Function details

◆ activateConstraint()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::activateConstraint
protected

◆ areNear()

template<class TCollisionModel1 , class TCollisionModel2 >
bool sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::areNear ( const core::collision::DetectionOutput input_do,
const core::collision::DetectionOutput output_do 
)
protected

◆ cleanup()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::cleanup

◆ createResponse()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::createResponse ( core::objectmodel::BaseContext group)

◆ draw()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::draw ( const core::visual::VisualParams vparams)

◆ filterDuplicatedDetectionOutputs()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::filterDuplicatedDetectionOutputs ( TOutputVector input,
DetectionOutputVector output 
)
protected

Removes duplicate contacts.

◆ findMappingOrUseMapper() [1/2]

template<class TCollisionModel1 , class TCollisionModel2 >
std::pair< bool, bool > sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::findMappingOrUseMapper
protected

◆ findMappingOrUseMapper() [2/2]

template<class TCollisionModel1 , class TCollisionModel2 >
template<class T >
bool sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::findMappingOrUseMapper ( core::behavior::MechanicalState< T > *  mState,
container::MechanicalObject< T > *&  constraintModel,
component::mapping::PersistentContactMapping *&  map 
)
protected

◆ getCollisionModels()

template<class TCollisionModel1 , class TCollisionModel2 >
std::pair<core::CollisionModel*,core::CollisionModel*> sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::getCollisionModels ( )
inline

◆ haveSameId()

template<class TCollisionModel1 , class TCollisionModel2 >
bool sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::haveSameId ( const core::collision::DetectionOutput input_do,
const core::collision::DetectionOutput output_do 
)
protected

◆ init()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::init

◆ isSliding()

template<class TCollisionModel1 , class TCollisionModel2 >
bool sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::isSliding ( sofa::core::collision::DetectionOutput o) const
protected

Checks if the DetectionOutput is corresponding to a sliding contact according to the previous contact resolution.

◆ isSticked()

template<class TCollisionModel1 , class TCollisionModel2 >
bool sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::isSticked ( sofa::core::collision::DetectionOutput o) const
protected

Checks if the DetectionOutput is corresponding to a sticked contact according to the previous contact resolution.

◆ keepStickyContacts()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::keepStickyContacts ( const DetectionOutputVector output)
protected

◆ keepThePersistentContact()

template<class TCollisionModel1 , class TCollisionModel2 >
int sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::keepThePersistentContact ( int  index,
bool  case1 
)
protected

◆ mapThePersistentContact() [1/5]

int sofa::component::collision::PersistentFrictionContact< PointCollisionModel< sofa::defaulttype::Vec3Types >, PointCollisionModel< sofa::defaulttype::Vec3Types > >::mapThePersistentContact ( Vector3 &  ,
int  index,
Vector3 &  pos,
bool  case1 
)
protected

◆ mapThePersistentContact() [2/5]

template<class TCollisionModel1 , class TCollisionModel2 >
int sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::mapThePersistentContact ( Vector3 &  ,
int  ,
Vector3 &  ,
bool   
)
inlineprotected

◆ mapThePersistentContact() [3/5]

int sofa::component::collision::PersistentFrictionContact< LineCollisionModel< sofa::defaulttype::Vec3Types >, PointCollisionModel< sofa::defaulttype::Vec3Types > >::mapThePersistentContact ( Vector3 &  baryCoord,
int  index,
Vector3 &  pos,
bool  case1 
)
protected

◆ mapThePersistentContact() [4/5]

int sofa::component::collision::PersistentFrictionContact< LineCollisionModel< sofa::defaulttype::Vec3Types >, LineCollisionModel< sofa::defaulttype::Vec3Types > >::mapThePersistentContact ( Vector3 &  baryCoord,
int  index,
Vector3 &  pos,
bool  case1 
)
protected

◆ mapThePersistentContact() [5/5]

int sofa::component::collision::PersistentFrictionContact< TriangleCollisionModel< sofa::defaulttype::Vec3Types >, PointCollisionModel< sofa::defaulttype::Vec3Types > >::mapThePersistentContact ( Vector3 &  baryCoord,
int  index,
Vector3 &  pos,
bool  case1 
)
protected

◆ removeResponse()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::removeResponse
virtual

◆ resetConstraintStoredData()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::resetConstraintStoredData
protected

Reset constraint stored forces, contact states...

◆ resetPersistentContactMappings()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::resetPersistentContactMappings
protected

◆ setDetectionOutputs()

template<class TCollisionModel1 , class TCollisionModel2 >
void sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::setDetectionOutputs ( OutputVector outputs)

Set the generic description of a contact point.

◆ SOFA_CLASS()

template<class TCollisionModel1 , class TCollisionModel2 >
sofa::component::collision::PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >::SOFA_CLASS ( SOFA_TEMPLATE2(PersistentFrictionContact< TCollisionModel1, TCollisionModel2 >, TCollisionModel1, TCollisionModel2)  ,
SOFA_TEMPLATE2(FrictionContact, TCollisionModel1, TCollisionModel2)   
)