#include <mbd_caching_contact_graph_analysis.h>
Classes | |
class | constraint_traits |
class | edge_traits |
class | node_traits |
Public Member Functions | |
CachingContactGraphAnalysis (void) | |
const bool | post_broad_phase_analysis (edge_ptr_container &edges) |
void | doAbsoluteRestingTest (void) |
void | post_narrow_phase_analysis (edge_ptr_container &edges) |
void | post_contact_determination_analysis (edge_ptr_container &edges, group_ptr_container &reportedGroups) |
void | clear () |
void | add (body_type *body) |
void | remove (body_type *body) |
void | init (configuration_type &configuration) |
Protected Types | |
typedef types::math_policy::index_type | size_type |
typedef types::math_policy::vector3_type | vector3_type |
typedef types::math_policy::matrix3x3_type | matrix3x3_type |
typedef types::math_policy::quaternion_type | quaternion_type |
typedef types::math_policy::coordsys_type | coordsys_type |
typedef types::math_policy::real_type | real_type |
typedef types::configuration_type | configuration_type |
typedef types::group_container | group_container |
typedef types::group_ptr_container | group_ptr_container |
typedef types::group_type | group_type |
typedef types::edge_ptr_container | edge_ptr_container |
typedef types::indirect_edge_iterator | indirect_edge_iterator |
typedef types::body_type | body_type |
typedef types::contact_type | contact_type |
typedef types::edge_type | edge_type |
typedef types::joint_type | joint_type |
Protected Member Functions | |
void | traverseGroup (const size_type groupTag, edge_type *edge, group_type *group) |
Protected Attributes | |
configuration_type * | m_configuration |
A pointer to the configuration that holds the current configuration. | |
size_type | m_time_stamp |
Time-stamp indicating which iteration the STC analysis i performed in. |
Caching Contact Graph Analysis. This is a particular implementation of spatial-temporal-coherence analysis algorithm to be used as a policy in the CollisionDetection class.
The main idea is to store information in the contact graph edges (i.e. body pairs) and then in each query test this information to see whether information from last query can be reused, or if a quick-rejection is possible. Also a connected component search is done on the contact graph in order to determine independent contact groups.
typedef types::body_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::body_type [protected] |
typedef types::configuration_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::configuration_type [protected] |
typedef types::contact_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::contact_type [protected] |
typedef types::math_policy::coordsys_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::coordsys_type [protected] |
typedef types::edge_ptr_container OpenTissue::mbd::CachingContactGraphAnalysis< types >::edge_ptr_container [protected] |
typedef types::edge_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::edge_type [protected] |
typedef types::group_container OpenTissue::mbd::CachingContactGraphAnalysis< types >::group_container [protected] |
typedef types::group_ptr_container OpenTissue::mbd::CachingContactGraphAnalysis< types >::group_ptr_container [protected] |
typedef types::group_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::group_type [protected] |
typedef types::indirect_edge_iterator OpenTissue::mbd::CachingContactGraphAnalysis< types >::indirect_edge_iterator [protected] |
typedef types::joint_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::joint_type [protected] |
typedef types::math_policy::matrix3x3_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::matrix3x3_type [protected] |
typedef types::math_policy::quaternion_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::quaternion_type [protected] |
typedef types::math_policy::real_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::real_type [protected] |
typedef types::math_policy::index_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::size_type [protected] |
typedef types::math_policy::vector3_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::vector3_type [protected] |
OpenTissue::mbd::CachingContactGraphAnalysis< types >::CachingContactGraphAnalysis | ( | void | ) | [inline] |
void OpenTissue::mbd::CachingContactGraphAnalysis< types >::add | ( | body_type * | body | ) | [inline] |
void OpenTissue::mbd::CachingContactGraphAnalysis< types >::clear | ( | ) | [inline] |
void OpenTissue::mbd::CachingContactGraphAnalysis< types >::doAbsoluteRestingTest | ( | void | ) | [inline] |
Absolute Resting Test. This method examines each body in the configuration and tries to determine wheter it has moved since last invocation. If not then the body is said to be in absolute rest.
The term absolute rest, reflects how geometry is percieved it has nothing to do with the dynamic state of a body.
void OpenTissue::mbd::CachingContactGraphAnalysis< types >::init | ( | configuration_type & | configuration | ) | [inline] |
const bool OpenTissue::mbd::CachingContactGraphAnalysis< types >::post_broad_phase_analysis | ( | edge_ptr_container & | edges | ) | [inline] |
Post Broad Phase Analysis.
edges | The overlaps reported from the broad phase collision detection phase. |
void OpenTissue::mbd::CachingContactGraphAnalysis< types >::post_contact_determination_analysis | ( | edge_ptr_container & | edges, | |
group_ptr_container & | reportedGroups | |||
) | [inline] |
Post Contact Determination Analysis. In this phase all the geometrical proximity information that have been determined prior in the collision detection engine pipeline is analyzed inorder to build a higher level construct called contact groups. That is independent groups of contacts and bodies. Independent implies that they can be simulated independently of each other.
edges | The edges that were detected by the broad phase collision detection algorithm. | |
reportedGroups | Upon return this group container contains all the contact groups. |
void OpenTissue::mbd::CachingContactGraphAnalysis< types >::post_narrow_phase_analysis | ( | edge_ptr_container & | edges | ) | [inline] |
Post Narrow Phase Analysis. In this analysis all body pairs (i.e. overlaps or edges) that were processed by the narrow phase collision detection algorithm are examined.
For each body pair the contact state is determined and all separated body pairs are filtred from the set of processed body pairs. This is because it does not make sense to run contact determination on a separated body pair.
edges |
void OpenTissue::mbd::CachingContactGraphAnalysis< types >::remove | ( | body_type * | body | ) | [inline] |
void OpenTissue::mbd::CachingContactGraphAnalysis< types >::traverseGroup | ( | const size_type | groupTag, | |
edge_type * | edge, | |||
group_type * | group | |||
) | [inline, protected] |
Traverse Contact group_type.
groupTag | A unique index identifying the contact groups that is currently being traversed. | |
edge | The current body pair of the contact group that is traversed. | |
group | Upon return this argument holds the traversed contact group. |
configuration_type* OpenTissue::mbd::CachingContactGraphAnalysis< types >::m_configuration [protected] |
A pointer to the configuration that holds the current configuration.
size_type OpenTissue::mbd::CachingContactGraphAnalysis< types >::m_time_stamp [protected] |
Time-stamp indicating which iteration the STC analysis i performed in.