|
AGX Dynamics 2.41.1.2
|
This is a utility class that disables ContactPoints where the contact normal prevents movement along the surface velocity direction. More...
#include <SurfaceVelocityContactFilter.h>
Inheritance diagram for agxUtil::SurfaceVelocityContactFilter:Public Member Functions | |
| SurfaceVelocityContactFilter (agxSDK::ExecuteFilter *filter=nullptr) | |
| virtual KeepContactPolicy | contact (const agx::TimeStamp &time, agxCollide::GeometryContact *geometryContact) override |
| Called upon contact event if getFilter() contain CONTACT. | |
| virtual KeepContactPolicy | impact (const agx::TimeStamp &time, agxCollide::GeometryContact *geometryContact) override |
| Called upon impact event if getFilter() contain IMPACT. | |
Public Member Functions inherited from agxSDK::ContactEventListener | |
| ContactEventListener (int m=DEFAULT, ExecuteFilter *filter=nullptr) | |
| Default constructor, sets the activation mask by default to Impact and Separation. | |
| virtual KeepContactPolicy | contact (const agx::TimeStamp &time, agxCollide::GeometryContact *geometryContact) |
| Called upon contact event if getFilter() contain CONTACT. | |
| ExecuteFilter * | getFilter () |
| const ExecuteFilter * | getFilter () const |
| virtual KeepContactPolicy | impact (const agx::TimeStamp &time, agxCollide::GeometryContact *geometryContact) |
| Called upon impact event if getFilter() contain IMPACT. | |
| virtual void | post (const agx::TimeStamp &time, agxCollide::GeometryContact *geometryContact) |
| Called before agxSDK::StepEventListener::post now that the geometry contacts has contact forces from the solver. | |
| virtual void | separation (const agx::TimeStamp &time, agxCollide::GeometryPair &geometryPair) |
| Called upon separation event if getFilter() contain SEPARATION. | |
| void | setFilter (ExecuteFilter *filter) |
| Replaces the current filter with a new one. | |
| virtual void | setMask (int f) |
| Specifies a bit mask which determines which event types that will activate this listener. | |
Public Member Functions inherited from agxSDK::EventListener | |
| virtual void | addNotification () |
| Called when this listener is added to the simulation. | |
| AGXSTREAM_DECLARE_SERIALIZABLE_BASE (agxSDK::EventListener) | |
| int | getMask () const |
| agx::UInt32 | getPriority () const |
| Simulation * | getSimulation () |
| const Simulation * | getSimulation () const |
| Type | getType () const |
| bool | isEnabled () const |
| virtual void | removeNotification () |
| Called when this listener is removed from the simulation. | |
| void | setEnable (bool enable) |
| Specify whether the listener should react at all at events. | |
| virtual void | setMask (int f) |
| Specifies a bit mask which determines which event types that will activate this listener. | |
Public Member Functions inherited from agx::Component | |
| Component (const agx::Name &name=agx::Name(), agx::Model *model=agx::Component::ClassModel(), agx::Device *device=nullptr) | |
| virtual void | addObject (agx::Object *object, bool assignContext=true) |
| Add an object to the component. | |
| virtual String | autoComplete (const String &partialName, StringVector &matchingNames) const |
| virtual void | buildNavigationTree (agxJson::Value &eNode) const override |
| void | configure (Model *model) |
| virtual void | configure (TiXmlElement *eComponent) override |
| agx::Device * | getDevice () |
| template<typename T > | |
| T * | getDevice () |
| const agx::Device * | getDevice () const |
| template<typename T > | |
| const T * | getDevice () const |
| size_t | getNumObjects (const agx::Name &name) const |
| agx::Object * | getObject (const agx::Name &name, agx::Model *model, size_t index=0) |
| const agx::Object * | getObject (const agx::Name &name, agx::Model *model, size_t index=0) const |
| agx::Object * | getObject (const agx::Name &name, size_t index=0) |
| template<typename T > | |
| T * | getObject (const agx::Name &name, size_t index=0) |
| const agx::Object * | getObject (const agx::Name &name, size_t index=0) const |
| template<typename T > | |
| const T * | getObject (const agx::Name &name, size_t index=0) const |
| const agx::ObjectRefVector & | getObjects () const |
| template<typename T > | |
| void | getObjects (agx::ObjectPtrVector &result, bool recursive=false) const |
| void | getObjects (agx::ObjectPtrVector &result, const agx::Model *model, bool recursive=false) const |
| virtual Object * | getResourceImpl (const Path &path, agx::Model *model) override |
| virtual void | printSubtree () const override |
| void | printSubtree (std::ostream &stream, int depth=0) const |
| virtual void | rebind () override |
| void | removeAllObjects () |
| Remove all components. | |
| virtual void | removeObject (agx::Object *object) |
| Remove an object from the component. | |
| void | removeObject (const agx::Name &name, size_t index=0) |
| Remove an object with a specified name (and optional index) from the component. | |
| virtual void | snapshot (TiXmlNode *eParent, const String &directory) const override |
| void | traverse (ComponentVisitor *) |
| void | traverse (const TraverseCallback &callback) |
Public Member Functions inherited from agx::Object | |
| Object (const Name &name=Name(), Model *model=Object::ClassModel()) | |
| void | addListener (EventListener *listener) |
| virtual void | buildNavigationTree (agxJson::Value &eNode) const |
| virtual void | configure (TiXmlElement *) |
| agx::String | fullName () const |
| agx::String | fullPath () const |
| agx::String | fullPath (const agx::Object *root) const |
| template<typename T > | |
| T * | getAutoScopedResource (const agx::Path &path) |
| template<typename T > | |
| const T * | getAutoScopedResource (const agx::Path &path) const |
| agx::Object * | getAutoScopedResource (const agx::Path &path, agx::Model *model=nullptr) |
| const agx::Object * | getAutoScopedResource (const agx::Path &path, agx::Model *model=nullptr) const |
| agx::Object * | getContext () |
| template<typename T > | |
| T * | getContext () |
| const agx::Object * | getContext () const |
| template<typename T > | |
| const T * | getContext () const |
| agx::UInt32 | getId () const |
| const agx::Name & | getImplementationName () const |
| agx::Model * | getModel () |
| const agx::Model * | getModel () const |
| const agx::Name & | getName () const |
| agx::Object * | getNextSibling () |
| const agx::Object * | getNextSibling () const |
| agx::Path | getPath () const |
| agx::Path | getPath (const agx::Object *root) const |
| template<typename T > | |
| T * | getResource (const agx::Path &path) |
| template<typename T > | |
| const T * | getResource (const agx::Path &path) const |
| agx::Object * | getResource (const agx::Path &path, agx::Model *model=nullptr) |
| const agx::Object * | getResource (const agx::Path &path, agx::Model *model=nullptr) const |
| virtual agx::Object * | getResourceImpl (const agx::Path &path, agx::Model *model) |
| agx::Object * | getRootContext () |
| const agx::Object * | getRootContext () const |
| bool | hasListener (EventListener *listener) |
| bool | hasParent (const agx::Object *node) const |
| bool | isUnique () const |
| virtual void | printSubtree () const |
| virtual void | rebind () |
| void | removeListener (EventListener *listener) |
| virtual void | save (TiXmlElement *) const |
| virtual void | setContext (agx::Object *context) |
| void | setId (UInt32 id) |
| void | setModel (agx::Model *model) |
| Set the object model (handled automatically). | |
| void | setName (const agx::Name &name) |
| Set the name of the object. | |
| virtual void | snapshot (TiXmlNode *, const String &) const |
Public Member Functions inherited from agx::Referenced | |
| Referenced () | |
| Default constructor. | |
| Referenced (const Referenced &) | |
| template<typename T > | |
| T * | as () |
| Subclass casting. | |
| template<typename T > | |
| const T * | as () const |
| template<typename T > | |
| T * | asSafe () |
| Safe subclass casting, return nullptr if template type does not match. | |
| template<typename T > | |
| const T * | asSafe () const |
| int | getReferenceCount () const |
| template<typename T > | |
| bool | is () const |
| Subclass test. | |
| Referenced & | operator= (const Referenced &) |
| Assignment operator. Will increment the number of references to the referenced object. | |
| void | reference (void *ptr=nullptr) const |
| Explicitly increment the reference count by one, indicating that this object has another pointer which is referencing it. | |
| void | unreference (void *ptr=nullptr) const |
| Decrement the reference count by one, indicating that a pointer to this object is referencing it. | |
| void | unreference_nodelete () const |
| Decrement the reference count by one, indicating that a pointer to this object is referencing it. | |
Public Member Functions inherited from agxStream::Serializable | |
| virtual | ~Serializable () |
| Destructor for normal C++ use but hidden from SWIG bindings. | |
| virtual const char * | getClassName () const |
| bool | getEnableSerialization () const |
| bool | getEnableUuidGeneration () |
| agx::UInt32 | getIndex () const |
| This index is given at creation of this object. | |
| virtual StorageAgent * | getStorageAgent () const =0 |
| agx::Uuid | getUuid () const |
| bool | isFinished () const |
| void | setEnableSerialization (bool flag) |
| Set to false to disable serialization of this object. | |
| void | setFinished () |
| Tells this class that it is restored correctly and should not be deleted during destruction of an Archive. | |
| void | setUuid (const agx::Uuid &uuid) |
| Explicitly set a Uuid on a serializable object. | |
Additional Inherited Members | |
Public Types inherited from agxSDK::ContactEventListener | |
| enum | ActivationMask { IMPACT = 1 << 0 , CONTACT = 1 << 1 , SEPARATION = 1 << 2 , POST = 1 << 3 , DEFAULT = IMPACT | SEPARATION , ALL = IMPACT | CONTACT | SEPARATION | POST } |
| Defines the event states for which a listener will be activated, a mask can be bitwise OR:ed from these members. More... | |
| enum | KeepContactPolicy { KEEP_CONTACT , REMOVE_CONTACT , REMOVE_CONTACT_IMMEDIATELY } |
| Defines whether contact should be kept or removed after contact/impact methods returns. More... | |
Public Types inherited from agxSDK::EventListener | |
| enum | Type { UNDEFINED_TYPE , STEP_EVENT_LISTENER , CONTACT_EVENT_LISTENER , GUI_EVENT_LISTENER } |
| Type of EventListener. More... | |
Public Types inherited from agx::Component | |
| typedef Event2< Component *, Object * > | ObjectEvent |
| Event when adding removing child objects. | |
| typedef Callback1< Object * > | TraverseCallback |
Public Types inherited from agx::Object | |
| typedef agx::observer_ptr< const Event > | EventConstObserver |
| typedef agx::ref_ptr< const Event > | EventConstRef |
| typedef agx::observer_ptr< Event > | EventObserver |
| typedef agx::Vector< EventObserver > | EventObserverVector |
| typedef agx::VectorPOD< Event * > | EventPtrVector |
| typedef agx::ref_ptr< Event > | EventRef |
| typedef agx::Vector< EventRef > | EventRefVector |
Static Public Member Functions inherited from agxSDK::EventListener | |
| static agxStream::Serializable * | create (agxStream::InputArchive &) |
Static Public Member Functions inherited from agx::Component | |
| static Component * | _load (TiXmlElement *eComponent, Device *device) |
| static agx::Model * | ClassModel () |
| static Component * | load (const Path &path, const Name &implementation, Device *device, const Path &_namespace=Path()) |
| static Component * | load (const String &path, const Path &_namespace=Path()) |
| static Component * | load (const String &path, Device *device, const Path &_namespace=Path()) |
| static Component * | load (TiXmlElement *eComponent, Device *device) |
Static Public Member Functions inherited from agx::Object | |
| static agx::Model * | ClassModel () |
| static agx::String | generateName (const agx::String &bindPath) |
| static const HashSet< Object * > & | getActiveObjects () |
| static bool | getEnableRebind () |
| Should rebinding be allowed? Right now a global setting. | |
| static Object * | load (const String &path, Device *device, const String &type, const String &attribute, const String &value) |
| template<typename T > | |
| static T * | load (const String &path, Device *device, const String &type, const String &attribute, const String &value) |
| static Object * | load (const String &path, Device *device, const String &type="", size_t instance=0) |
| template<typename T > | |
| static T * | load (const String &path, Device *device, const String &type="", size_t instance=0) |
| static void | load (const String &path, Device *device, ObjectPtrVector &loadedObjects) |
| static Object * | load (TiXmlElement *eObject, Device *device) |
| template<typename T > | |
| static T * | load (TiXmlElement *eObject, Device *device) |
| static TiXmlDocument | openDocument (const String &path) |
| static void | setEnableRebind (bool flag) |
| Sets if rebinding of objects should be allowed (Right now a global setting). | |
Static Public Member Functions inherited from agx::Referenced | |
| template<typename T > | |
| static bool | ValidateCast (const Referenced *object) |
Static Public Member Functions inherited from agxStream::Serializable | |
| static void | setEnableUuidGeneration (bool flag) |
| Specify if there should be UUID:s generated for each new Serializable object. By default it is enabled. | |
Public Attributes inherited from agx::Component | |
| ObjectEvent | addObjectEvent |
| ObjectEvent | removeObjectEvent |
Protected Member Functions inherited from agxSDK::ContactEventListener | |
| virtual | ~ContactEventListener () |
| Destructor. | |
Protected Member Functions inherited from agxSDK::EventListener | |
| EventListener (Type type=UNDEFINED_TYPE) | |
| Default constructor. | |
| virtual | ~EventListener () |
| Destructor. | |
| void | setSimulation (Simulation *simulation) |
| Set the associated simulation for this EventListener. | |
Protected Member Functions inherited from agx::Component | |
| virtual | ~Component () |
| String | expandAutoCompletionMatch (const String &query, const StringVector &matchingNames) const |
| void | setDevice (Device *device) |
Protected Member Functions inherited from agx::Object | |
| virtual | ~Object () |
Protected Member Functions inherited from agx::Referenced | |
| virtual | ~Referenced () |
| Destructor. | |
| void | allocateObserverVector () const |
| void | deleteUsingDeleteHandler () const |
Protected Member Functions inherited from agxStream::Serializable | |
| Serializable () | |
| Default constructor. | |
| Serializable (const Serializable &other) | |
| Copy constructor. | |
| void | generateUuid () |
Static Protected Member Functions inherited from agx::Referenced | |
| static DeleteHandler * | getDeleteHandler () |
| static void | setDeleteHandler (DeleteHandler *handler) |
| Internal: Set a DeleteHandler to which deletion of all referenced counted objects will be delegated to. | |
Protected Attributes inherited from agxSDK::ContactEventListener | |
| ExecuteFilterRef | m_executeFilter |
Protected Attributes inherited from agxSDK::EventListener | |
| bool | m_enabled |
| int | m_mask |
| agx::UInt32 | m_priority |
| Type | m_type |
Protected Attributes inherited from agx::Referenced | |
| Mutex | m_mutex |
| ObserverContainer | m_observers |
| AtomicValue | m_refCount |
This is a utility class that disables ContactPoints where the contact normal prevents movement along the surface velocity direction.
A usecase for this class can be when multiple shapes are placed after each other to form a conveyor belt structure. When the transition from one shape to the next occurs, the object moving along the conveyor belt can collide so there are two types of contact normals: "vertical / stay ontop of the conveyor belt" as well as "horizontal / don't move into this object". The reason for this is that the overlap tests are done pairwise.
This contact listener disables the contact points that prevents the transportation along surface velocity direction.
Definition at line 43 of file SurfaceVelocityContactFilter.h.
| agxUtil::SurfaceVelocityContactFilter::SurfaceVelocityContactFilter | ( | agxSDK::ExecuteFilter * | filter = nullptr | ) |
|
overridevirtual |
Called upon contact event if getFilter() contain CONTACT.
Implement this method in the derived class to get callbacks.
| time | - Last committed time in the simulation |
| geometryContact | - Pointer to the contact data for the two contacting geometries. |
Reimplemented from agxSDK::ContactEventListener.
|
overridevirtual |
Called upon impact event if getFilter() contain IMPACT.
Implement this method in the derived class to get callbacks.
| time | - Last committed time in the simulation |
| geometryContact | - Pointer to the contact data for the two impacting geometries. |
Reimplemented from agxSDK::ContactEventListener.