sofa::core::CollisionModel Class Reference

Abstract CollisionModel interface. More...

#include <CollisionModel.h>

Inheritance diagram for sofa::core::CollisionModel:

Inheritance graph
[legend]
Collaboration diagram for sofa::core::CollisionModel:

Collaboration graph
[legend]

Public Types

typedef CollisionElementIterator Iterator
typedef
componentmodel::topology::BaseMeshTopology 
Topology

Public Member Functions

 CollisionModel ()
 Constructor.
virtual void bwdInit ()
 Initialization method called at graph modification, during top-down traversal.
virtual ~CollisionModel ()
 Destructor.
bool empty () const
 Return true if there are no elements.
int getSize () const
 Get the number of elements.
int getNumberOfContacts () const
 Get the number of contacts attached to the collision model.
void setNumberOfContacts (int i)
 Set the number of contacts attached to the collision model.
virtual void resize (int s)
 Set the number of elements.
Iterator begin ()
 Return an iterator to the first element.
Iterator end ()
 Return an iterator pointing after the last element.
CollisionModel * getNext ()
 Return the next (finer / lower / child level) CollisionModel in the hierarchy.
CollisionModel * getPrevious ()
 Return the previous (coarser / upper / parent level) CollisionModel in the hierarchy.
void setNext (CollisionModel *val)
 Set the next (finer / lower / child level) CollisionModel in the hierarchy.
void setPrevious (CollisionModel *val)
 Set the previous (coarser / upper / parent level) CollisionModel in the hierarchy.
virtual bool isActive () const
 Return true if this CollisionModel should be used for collisions.
virtual void setActive (bool val=true)
 Set true if this CollisionModel should be used for collisions.
virtual bool isMoving () const
 Return true if this CollisionModel is changing position between iterations.
virtual void setMoving (bool val=true)
 Set true if this CollisionModel is changing position between iterations.
virtual bool isSimulated () const
 Return true if this CollisionModel is attached to a simulation.
virtual void setSimulated (bool val=true)
 Set true if this CollisionModel is attached to a simulation.
virtual void computeBoundingTree (int maxDepth=0)=0
 Create or update the bounding volume hierarchy.
virtual void computeContinuousBoundingTree (double, int maxDepth=0)
 Create or update the bounding volume hierarchy, accounting for motions within the given timestep.
virtual std::pair
< CollisionElementIterator,
CollisionElementIterator > 
getInternalChildren (int) const
 Return the list (as a pair of iterators) of internal children of an element.
virtual std::pair
< CollisionElementIterator,
CollisionElementIterator > 
getExternalChildren (int) const
 Return the list (as a pair of iterators) of external children of an element.
virtual bool isLeaf (int) const
 Checks if the element(index) is a leaf and a primitive of the collision model.
virtual bool canCollideWith (CollisionModel *model)
 Test if this model can collide with another model.
virtual bool canCollideWithElement (int, CollisionModel *, int)
 Test if two elements can collide with each other.
virtual void draw (int)
 Render an collision element.
virtual void draw ()
 Render the whole collision model.
CollisionModel * getFirst ()
 Return the first (i.e. root) CollisionModel in the hierarchy.
CollisionModel * getLast ()
 Return the last (i.e. leaf) CollisionModel in the hierarchy.
template<class DerivedModel >
DerivedModel * createPrevious ()
 Helper method to get or create the previous model in the hierarchy.
virtual Topology * getTopology ()
 Topology associated to the collision model.
virtual
sofa::core::componentmodel::topology::BaseMeshTopology * 
getMeshTopology ()
 BaseMeshTopology associated to the collision model.
const float * getColor4f ()
 Get a color that can be used to display this CollisionModel.
void setColor4f (const float *c)
 Set a color that can be used to display this CollisionModel.
Experimental methods
double getProximity ()
 Get distance to the actual (visual) surface.
double getContactStiffness (int)
 Get contact stiffness.
void setContactStiffness (double stiffness)
 Set contact stiffness.
double getContactFriction (int)
 Get contact friction (damping) coefficient.
void setContactFriction (double friction)
 Set contact friction (damping) coefficient.
std::string getContactResponse ()
 Contact response algorithm.

Protected Attributes

Data< bool > bActive
 flag indicating if this collision model is active and should be included in default collision detections
Data< bool > bMoving
 flag indicating if this object is changing position between iterations
Data< bool > bSimulated
 flag indicating if this object is controlled by a simulation
Data< bool > bSelfCollision
 flag indication if the object can self collide
Data< double > proximity
 Distance to the actual (visual) surface.
Data< double > contactStiffness
 Default contact stiffness.
Data< double > contactFriction
 Default contact friction (damping) coefficient.
Data< std::string > contactResponse
 contactResponse", "if set, indicate to the ContactManager that this model should use the given class of contacts.
Data< int > group
 If not zero, ID of a group containing this model.
Data< defaulttype::Vec4f > color
 color used to display the collision model if requested
int size
 Number of collision elements.
CollisionModel * previous
 Pointer to the previous (coarser / upper / parent level) CollisionModel in the hierarchy.
CollisionModel * next
 Pointer to the next (finer / lower / child level) CollisionModel in the hierarchy.
int numberOfContacts
 number of contacts attached to the collision model

Detailed Description

Abstract CollisionModel interface.

A CollisionModel contains a list of same-type elements. It can be part of a list of CollisionModels, each describing a level in a bounding-volume hierarchy.

Each CollisionModel stores a pointer to the next model in the hierarchy (i.e. finer / lower / child level) as well as the previous model (i.e. coarser / upper / parent level). The first CollisionModel in this list is the root of the hierarchy and contains only one element. The last CollisionModel contains the leaves of the hierarchy which are the real elements of the object.

Each element inside CollisionModels except for the last one can have a list of children. There are 2 types of child elements:

Definition at line 63 of file CollisionModel.h.


Member Typedef Documentation

Definition at line 67 of file CollisionModel.h.

Reimplemented in sofa::component::collision::FFDDistanceGridCollisionModel.

Definition at line 68 of file CollisionModel.h.


Constructor & Destructor Documentation

sofa::core::CollisionModel::CollisionModel (  )  [inline]

Constructor.

Definition at line 71 of file CollisionModel.h.

virtual sofa::core::CollisionModel::~CollisionModel (  )  [inline, virtual]

Destructor.

Definition at line 91 of file CollisionModel.h.


Member Function Documentation

Iterator sofa::core::CollisionModel::begin (  )  [inline]

virtual void sofa::core::CollisionModel::bwdInit (  )  [inline, virtual]

Initialization method called at graph modification, during top-down traversal.

Reimplemented from sofa::core::objectmodel::BaseObject.

Definition at line 86 of file CollisionModel.h.

References getColor4f().

virtual bool sofa::core::CollisionModel::canCollideWith ( CollisionModel *  model  )  [inline, virtual]

Test if this model can collide with another model.

Note that this test is only related to what are the two models (i.e. which type, attached to which object) and not where they are in space. It is used to prune unnecessary or invalid collisions (i.e. vertices of an object should be tested with triangles of another but not the same object).

Default to false if the collision models are attached to the same context (i.e. the same node in the scenegraph).

Definition at line 244 of file CollisionModel.h.

References bSelfCollision, sofa::core::objectmodel::BaseObject::getContext(), and group.

Referenced by sofa::component::collision::RayTraceDetection::addCollisionModel(), and sofa::component::collision::BruteForceDetection::addCollisionModel().

virtual bool sofa::core::CollisionModel::canCollideWithElement ( int  ,
CollisionModel *  ,
int   
) [inline, virtual]

Test if two elements can collide with each other.

This method should be implemented by models supporting self-collisions to prune tests between adjacent elements.

Default to true. Note that this method assumes that canCollideWith(model2) was already used to test if the collision models can collide.

Reimplemented in sofa::component::collision::LineModel, and sofa::component::collision::PointModel.

Definition at line 261 of file CollisionModel.h.

Referenced by sofa::component::collision::PointModel::canCollideWithElement(), and sofa::component::collision::LineModel::canCollideWithElement().

virtual void sofa::core::CollisionModel::computeBoundingTree ( int  maxDepth = 0  )  [pure virtual]

virtual void sofa::core::CollisionModel::computeContinuousBoundingTree ( double  ,
int  maxDepth = 0 
) [inline, virtual]

template<class DerivedModel >
DerivedModel* sofa::core::CollisionModel::createPrevious (  )  [inline]

Helper method to get or create the previous model in the hierarchy.

Definition at line 293 of file CollisionModel.h.

References sofa::core::objectmodel::BaseObject::getContext(), group, isMoving(), isSimulated(), previous, proximity, and setNext().

Referenced by sofa::component::collision::SpatialGridPointModel::computeBoundingTree().

virtual void sofa::core::CollisionModel::draw (  )  [inline, virtual]

virtual void sofa::core::CollisionModel::draw ( int   )  [inline, virtual]

bool sofa::core::CollisionModel::empty (  )  const [inline]

Return true if there are no elements.

Definition at line 94 of file CollisionModel.h.

References size.

Referenced by sofa::component::collision::RayTraceDetection::addCollisionModel(), sofa::component::collision::BruteForceDetection::addCollisionModel(), sofa::component::collision::BruteForceDetection::addCollisionPair(), sofa::gpu::cuda::CudaPointModel::computeBoundingTree(), sofa::gpu::cuda::CudaRigidDistanceGridCollisionModel::computeBoundingTree(), sofa::component::collision::TriangleOctreeModel::computeBoundingTree(), sofa::component::collision::TriangleModel::computeBoundingTree(), sofa::component::collision::TetrahedronModel::computeBoundingTree(), sofa::component::collision::TSphereModel< TDataTypes >::computeBoundingTree(), sofa::component::collision::SpatialGridPointModel::computeBoundingTree(), sofa::component::collision::RayModel::computeBoundingTree(), sofa::component::collision::PointModel::computeBoundingTree(), sofa::component::collision::LineModel::computeBoundingTree(), sofa::component::collision::GridModel::computeBoundingTree(), sofa::component::collision::FFDDistanceGridCollisionModel::computeBoundingTree(), sofa::component::collision::RigidDistanceGridCollisionModel::computeBoundingTree(), sofa::component::collision::CubeModel::computeBoundingTree(), sofa::component::collision::TriangleModel::computeContinuousBoundingTree(), sofa::component::collision::TSphereModel< TDataTypes >::computeContinuousBoundingTree(), sofa::component::collision::PointModel::computeContinuousBoundingTree(), and sofa::component::collision::LineModel::computeContinuousBoundingTree().

Iterator sofa::core::CollisionModel::end (  )  [inline]

const float * sofa::core::CollisionModel::getColor4f (  ) 

double sofa::core::CollisionModel::getContactFriction ( int   )  [inline]

Get contact friction (damping) coefficient.

Definition at line 324 of file CollisionModel.h.

References contactFriction.

std::string sofa::core::CollisionModel::getContactResponse (  )  [inline]

Contact response algorithm.

Definition at line 329 of file CollisionModel.h.

References contactResponse.

Referenced by sofa::component::collision::DefaultContactManager::createContacts().

double sofa::core::CollisionModel::getContactStiffness ( int   )  [inline]

Get contact stiffness.

Definition at line 319 of file CollisionModel.h.

References contactStiffness.

virtual std::pair<CollisionElementIterator,CollisionElementIterator> sofa::core::CollisionModel::getExternalChildren ( int   )  const [inline, virtual]

Return the list (as a pair of iterators) of external children of an element.

External children are child elements of a different type than their parent (often corresponding to the final elements).

Default to empty (i.e. two identical iterators)

Reimplemented in sofa::component::collision::CubeModel, and sofa::component::collision::GridModel.

Definition at line 218 of file CollisionModel.h.

CollisionModel* sofa::core::CollisionModel::getFirst (  )  [inline]

Return the first (i.e. root) CollisionModel in the hierarchy.

Definition at line 271 of file CollisionModel.h.

References getPrevious().

Referenced by sofa::component::collision::CarvingManager::doCarve(), and SofaFlowVR::FlowVRInputMesh::flowvrBeginIteration().

virtual std::pair<CollisionElementIterator,CollisionElementIterator> sofa::core::CollisionModel::getInternalChildren ( int   )  const [inline, virtual]

Return the list (as a pair of iterators) of internal children of an element.

Internal children are child elements of the same type as their parent (often corresponding to non-final elements). This distinction is used to optimize the intersection tests inside the hierarchy, as internal children can be processed without dynamically retrieving a new intersection method.

Default to empty (i.e. two identical iterators)

Reimplemented in sofa::component::collision::CubeModel, sofa::component::collision::GridModel, and sofa::component::collision::SphereTreeModel.

Definition at line 206 of file CollisionModel.h.

CollisionModel* sofa::core::CollisionModel::getLast (  )  [inline]

virtual sofa::core::componentmodel::topology::BaseMeshTopology* sofa::core::CollisionModel::getMeshTopology (  )  [inline, virtual]

BaseMeshTopology associated to the collision model.

Reimplemented in sofa::component::collision::FFDDistanceGridCollisionModel.

Definition at line 337 of file CollisionModel.h.

References sofa::core::objectmodel::BaseObject::getContext().

CollisionModel* sofa::core::CollisionModel::getNext (  )  [inline]

int sofa::core::CollisionModel::getNumberOfContacts (  )  const [inline]

Get the number of contacts attached to the collision model.

Definition at line 106 of file CollisionModel.h.

References numberOfContacts.

CollisionModel* sofa::core::CollisionModel::getPrevious (  )  [inline]

double sofa::core::CollisionModel::getProximity (  )  [inline]

Get distance to the actual (visual) surface.

Definition at line 316 of file CollisionModel.h.

References proximity.

int sofa::core::CollisionModel::getSize (  )  const [inline]

virtual Topology* sofa::core::CollisionModel::getTopology (  )  [inline, virtual]

Topology associated to the collision model.

Definition at line 334 of file CollisionModel.h.

References sofa::core::objectmodel::BaseObject::getContext().

virtual bool sofa::core::CollisionModel::isActive (  )  const [inline, virtual]

virtual bool sofa::core::CollisionModel::isLeaf ( int   )  const [inline, virtual]

Checks if the element(index) is a leaf and a primitive of the collision model.

Default to true since triangle model, line model, etc. does not have this method implemented and they are themselves (normally) leaves and primitives

Reimplemented in sofa::component::collision::CubeModel, sofa::component::collision::GridModel, and sofa::component::collision::SphereTreeModel.

Definition at line 228 of file CollisionModel.h.

virtual bool sofa::core::CollisionModel::isMoving (  )  const [inline, virtual]

virtual bool sofa::core::CollisionModel::isSimulated (  )  const [inline, virtual]

virtual void sofa::core::CollisionModel::resize ( int  s  )  [inline, virtual]

virtual void sofa::core::CollisionModel::setActive ( bool  val = true  )  [inline, virtual]

Set true if this CollisionModel should be used for collisions.

Definition at line 165 of file CollisionModel.h.

References bActive.

void sofa::core::CollisionModel::setColor4f ( const float *  c  )  [inline]

Set a color that can be used to display this CollisionModel.

Definition at line 342 of file CollisionModel.h.

References color.

Referenced by getColor4f().

void sofa::core::CollisionModel::setContactFriction ( double  friction  )  [inline]

Set contact friction (damping) coefficient.

Definition at line 326 of file CollisionModel.h.

References contactFriction.

void sofa::core::CollisionModel::setContactStiffness ( double  stiffness  )  [inline]

Set contact stiffness.

Definition at line 321 of file CollisionModel.h.

References contactStiffness.

virtual void sofa::core::CollisionModel::setMoving ( bool  val = true  )  [inline, virtual]

Set true if this CollisionModel is changing position between iterations.

Definition at line 175 of file CollisionModel.h.

References bMoving.

Referenced by main().

void sofa::core::CollisionModel::setNext ( CollisionModel *  val  )  [inline]

Set the next (finer / lower / child level) CollisionModel in the hierarchy.

Definition at line 148 of file CollisionModel.h.

References next.

Referenced by createPrevious().

void sofa::core::CollisionModel::setNumberOfContacts ( int  i  )  [inline]

Set the number of contacts attached to the collision model.

Definition at line 112 of file CollisionModel.h.

References numberOfContacts.

void sofa::core::CollisionModel::setPrevious ( CollisionModel *  val  )  [inline]

Set the previous (coarser / upper / parent level) CollisionModel in the hierarchy.

Definition at line 154 of file CollisionModel.h.

References previous.

Referenced by sofa::component::collision::GridModel::computeBoundingTree(), and sofa::component::collision::CubeModel::computeBoundingTree().

virtual void sofa::core::CollisionModel::setSimulated ( bool  val = true  )  [inline, virtual]

Set true if this CollisionModel is attached to a simulation.

Definition at line 185 of file CollisionModel.h.

References bSimulated.

Referenced by main().


Field Documentation

flag indicating if this collision model is active and should be included in default collision detections

Definition at line 342 of file CollisionModel.h.

Referenced by isActive(), and setActive().

flag indicating if this object is changing position between iterations

Definition at line 348 of file CollisionModel.h.

Referenced by isMoving(), and setMoving().

flag indicating if this object is controlled by a simulation

Definition at line 350 of file CollisionModel.h.

Referenced by isSimulated(), and setSimulated().

Default contact friction (damping) coefficient.

Definition at line 358 of file CollisionModel.h.

Referenced by getContactFriction(), and setContactFriction().

Data<std::string> sofa::core::CollisionModel::contactResponse [protected]

contactResponse", "if set, indicate to the ContactManager that this model should use the given class of contacts.

that this is only indicative, and in particular if both collision models specify a different class it is up to the manager to choose.

Definition at line 362 of file CollisionModel.h.

Referenced by getContactResponse().

If not zero, ID of a group containing this model.

No collision can occur between collision models of the same group (allowing the same object to have multiple collision models

Definition at line 365 of file CollisionModel.h.

Referenced by canCollideWith(), and createPrevious().

Pointer to the next (finer / lower / child level) CollisionModel in the hierarchy.

Definition at line 376 of file CollisionModel.h.

Referenced by getNext(), and setNext().

number of contacts attached to the collision model

Definition at line 379 of file CollisionModel.h.

Referenced by getNumberOfContacts(), and setNumberOfContacts().

Pointer to the previous (coarser / upper / parent level) CollisionModel in the hierarchy.

Definition at line 373 of file CollisionModel.h.

Referenced by createPrevious(), getPrevious(), and setPrevious().

Data<double> sofa::core::CollisionModel::proximity [protected]

Distance to the actual (visual) surface.

Definition at line 354 of file CollisionModel.h.

Referenced by createPrevious(), and getProximity().

Number of collision elements.

Definition at line 370 of file CollisionModel.h.

Referenced by sofa::component::collision::CubeModel::addCube(), sofa::component::collision::SphereTreeModel::addSphere(), sofa::component::collision::TSphereModel< TDataTypes >::addSphere(), sofa::component::collision::SphereTreeModel::applyScale(), sofa::component::collision::TSphereModel< TDataTypes >::applyScale(), sofa::gpu::cuda::CudaPointModel::computeBoundingTree(), sofa::gpu::cuda::CudaRigidDistanceGridCollisionModel::computeBoundingTree(), sofa::component::collision::TriangleOctreeModel::computeBoundingTree(), sofa::component::collision::TriangleModel::computeBoundingTree(), sofa::component::collision::TetrahedronModel::computeBoundingTree(), sofa::component::collision::TSphereModel< TDataTypes >::computeBoundingTree(), sofa::component::collision::SpatialGridPointModel::computeBoundingTree(), sofa::component::collision::RayModel::computeBoundingTree(), sofa::component::collision::PointModel::computeBoundingTree(), sofa::component::collision::LineModel::computeBoundingTree(), sofa::component::collision::GridModel::computeBoundingTree(), sofa::component::collision::FFDDistanceGridCollisionModel::computeBoundingTree(), sofa::component::collision::RigidDistanceGridCollisionModel::computeBoundingTree(), sofa::component::collision::CubeModel::computeBoundingTree(), sofa::component::collision::TriangleModel::computeContinuousBoundingTree(), sofa::component::collision::TSphereModel< TDataTypes >::computeContinuousBoundingTree(), sofa::component::collision::PointModel::computeContinuousBoundingTree(), sofa::component::collision::LineModel::computeContinuousBoundingTree(), sofa::gpu::cuda::CudaPointModel::draw(), sofa::component::collision::TriangleModel::draw(), sofa::component::collision::TetrahedronModel::draw(), sofa::component::collision::TSphereModel< TDataTypes >::draw(), sofa::component::collision::RayModel::draw(), sofa::component::collision::PointModel::draw(), sofa::component::collision::LineModel::draw(), sofa::component::collision::CubeModel::draw(), empty(), end(), sofa::component::collision::SphereTreeModel::getInternalChildren(), sofa::component::collision::RayModel::getNbRay(), getSize(), sofa::component::collision::CarvingManager::init(), sofa::component::collision::SphereTreeModel::isLeaf(), resize(), sofa::component::collision::SphereTreeModel::setSphere(), sofa::component::collision::TSphereModel< TDataTypes >::setSphere(), sofa::component::collision::CubeModel::updateCubes(), sofa::component::collision::TriangleModel::updateFromTopology(), sofa::component::collision::FFDDistanceGridCollisionModel::updateGrid(), and sofa::component::collision::TriangleModel::updateNormals().


The documentation for this class was generated from the following files:

Generated on Sun Nov 23 04:21:58 2008 for Sofa by  doxygen 1.5.7.1