AGX Dynamics 2.40.0.0
Loading...
Searching...
No Matches
agxUtil::TrimeshDeformer Class Reference

#include <TrimeshDeformer.h>

+ Inheritance diagram for agxUtil::TrimeshDeformer:

Public Member Functions

 TrimeshDeformer (agxCollide::Trimesh *trimesh, agxCollide::Geometry *trimeshGeometry)
 
bool activateDualFrameInterapolation (agx::Frame *interpolationFrame1, agx::Frame *interpolationFrame2, agx::Vec3 localMeshDir)
 The dual frame interpolation will move all verticies of the trimesh in between the x-y planes of interpolationFrame1 and interpolationFrame2.
 
void activateLocalOffsetInterpolation ()
 Prepare all local offsets, and calculate weight for each effected vertex.
 
bool addLocalDeformation (const agx::RigidBody *relativeBody, const agx::RigidBody *body, agx::Real offsetReach, agx::Real fullOffsetPercent, agx::Vec3 *relativePosition=nullptr)
 For simulation models that consist of several rigid bodies, but we like to have just one visual but it is interesting to visualize local deformations.
 
 AGXSTREAM_DECLARE_SERIALIZABLE_BASE (agxUtil::TrimeshDeformer)
 
bool getEnableUpdateCollisionGeometry () const
 
agxCollide::GeometrygetGeometry ()
 
agxCollide::TrimeshgetTrimesh ()
 
bool isValid () const
 
void last (const agx::TimeStamp &) override
 Called after a step is taken in the simulation Implement this method in the derived class to get callbacks.
 
void setEnableUpdateCollisionGeometry (bool enable)
 Specify if the mesh collision properties, including mass properties and bounding box calculations needed for collision detection should be calculated each time step.
 
void update ()
 Update the trimesh given the operations activated.
 
void updateCollisionGeometry ()
 
- Public Member Functions inherited from agxSDK::StepEventListener
 StepEventListener (int mask=DEFAULT)
 Default constructor, sets the default activation mask to all (POST_STEP and PRE_STEP) events.
 
 AGXSTREAM_DECLARE_SERIALIZABLE_BASE (agxSDK::StepEventListener)
 
virtual void last (const agx::TimeStamp &time)
 Called after a step is taken in the simulation Implement this method in the derived class to get callbacks.
 
virtual void post (const agx::TimeStamp &time)
 Called after a step is taken in the simulation Implement this method in the derived class to get callbacks.
 
virtual void pre (const agx::TimeStamp &time)
 Called before a step is taken in the simulation Implement this method in the derived class to get callbacks.
 
virtual void preCollide (const agx::TimeStamp &time)
 Called before collision detection is performed in the simulation Implement this method in the derived class to get callbacks.
 
virtual void setMask (int mask) override
 Specifies a bitmask which determines which event types 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
 
SimulationgetSimulation ()
 
const SimulationgetSimulation () 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::DevicegetDevice ()
 
template<typename T >
T * getDevice ()
 
const agx::DevicegetDevice () const
 
template<typename T >
const T * getDevice () const
 
size_t getNumObjects (const agx::Name &name) const
 
agx::ObjectgetObject (const agx::Name &name, agx::Model *model, size_t index=0)
 
const agx::ObjectgetObject (const agx::Name &name, agx::Model *model, size_t index=0) const
 
agx::ObjectgetObject (const agx::Name &name, size_t index=0)
 
template<typename T >
T * getObject (const agx::Name &name, size_t index=0)
 
const agx::ObjectgetObject (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::ObjectRefVectorgetObjects () 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 ObjectgetResourceImpl (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::ObjectgetAutoScopedResource (const agx::Path &path, agx::Model *model=nullptr)
 
const agx::ObjectgetAutoScopedResource (const agx::Path &path, agx::Model *model=nullptr) const
 
agx::ObjectgetContext ()
 
template<typename T >
T * getContext ()
 
const agx::ObjectgetContext () const
 
template<typename T >
const T * getContext () const
 
agx::UInt32 getId () const
 
const agx::NamegetImplementationName () const
 
agx::ModelgetModel ()
 
const agx::ModelgetModel () const
 
const agx::NamegetName () const
 
agx::ObjectgetNextSibling ()
 
const agx::ObjectgetNextSibling () 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::ObjectgetResource (const agx::Path &path, agx::Model *model=nullptr)
 
const agx::ObjectgetResource (const agx::Path &path, agx::Model *model=nullptr) const
 
virtual agx::ObjectgetResourceImpl (const agx::Path &path, agx::Model *model)
 
agx::ObjectgetRootContext ()
 
const agx::ObjectgetRootContext () 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.
 
Referencedoperator= (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.
 

Static Public Member Functions

static agxStream::Serializablecreate (agxStream::InputArchive &)
 
- Static Public Member Functions inherited from agxSDK::StepEventListener
static agxStream::Serializablecreate (agxStream::InputArchive &)
 
- Static Public Member Functions inherited from agxSDK::EventListener
static agxStream::Serializablecreate (agxStream::InputArchive &)
 
- Static Public Member Functions inherited from agx::Component
static Component_load (TiXmlElement *eComponent, Device *device)
 
static agx::ModelClassModel ()
 
static Componentload (const Path &path, const Name &implementation, Device *device, const Path &_namespace=Path())
 
static Componentload (const String &path, const Path &_namespace=Path())
 
static Componentload (const String &path, Device *device, const Path &_namespace=Path())
 
static Componentload (TiXmlElement *eComponent, Device *device)
 
- Static Public Member Functions inherited from agx::Object
static agx::ModelClassModel ()
 
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 Objectload (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 Objectload (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 Objectload (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.
 

Protected Member Functions

 TrimeshDeformer ()
 
virtual ~TrimeshDeformer ()
 
void removeNotification () override
 Called when this listener is removed from the simulation.
 
void setOwner (ParallelTrimeshDeformer *deformer)
 
void updateDualFrameInterpolation ()
 
void updateLocalOffset (const BodyLocalOffsetRef offset)
 
- Protected Member Functions inherited from agxSDK::StepEventListener
virtual ~StepEventListener ()
 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 ()
 

Protected Attributes

bool m_enableUpdate
 
agx::Real m_fullInterpolationLength
 
agx::FrameRef m_interpolationFrame1
 
agx::FrameRef m_interpolationFrame2
 
agx::AffineMatrix4x4 m_localFrame1VertexRotation
 
agx::Vec3 m_localMeshNormal
 
BodyLocalOffsetRefVector m_localOffsets
 
agx::Vector< agx::Vec3m_originalVertices
 
agx::observer_ptr< ParallelTrimeshDeformerm_owner
 
agxCollide::TrimeshObserver m_trimesh
 
agxCollide::GeometryObserver m_trimeshGeometry
 
agx::Vector< agx::Vec3m_verticesRelative1
 
agx::Vector< agx::Vec3m_verticesRelative2
 
- 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
 

Additional Inherited Members

- Public Types inherited from agxSDK::StepEventListener
enum  ActivationMask {
  STEP_NONE = 0x0 , PRE_COLLIDE = 0x1 , PRE_STEP = 0x2 , POST_STEP = 0x4 ,
  LAST_STEP = 0x8 , DEFAULT = PRE_STEP | POST_STEP , ALL = PRE_COLLIDE | PRE_STEP | POST_STEP | LAST_STEP
}
 Defines the event states for which a listener will be activated, a mask can be bitwise OR:ed from these members. 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 EventEventConstObserver
 
typedef agx::ref_ptr< const EventEventConstRef
 
typedef agx::observer_ptr< EventEventObserver
 
typedef agx::Vector< EventObserverEventObserverVector
 
typedef agx::VectorPOD< Event * > EventPtrVector
 
typedef agx::ref_ptr< EventEventRef
 
typedef agx::Vector< EventRefEventRefVector
 
- Public Attributes inherited from agx::Component
ObjectEvent addObjectEvent
 
ObjectEvent removeObjectEvent
 
- Static Protected Member Functions inherited from agx::Referenced
static DeleteHandlergetDeleteHandler ()
 
static void setDeleteHandler (DeleteHandler *handler)
 Internal: Set a DeleteHandler to which deletion of all referenced counted objects will be delegated to.
 

Detailed Description

Definition at line 74 of file TrimeshDeformer.h.

Constructor & Destructor Documentation

◆ TrimeshDeformer() [1/2]

agxUtil::TrimeshDeformer::TrimeshDeformer ( agxCollide::Trimesh trimesh,
agxCollide::Geometry trimeshGeometry 
)
Parameters
trimesh- an trimesh shape, which we like to update each timestep
trimeshGeometry- the geometry which include the trimesh shape. There should be no relative shape transform.

◆ TrimeshDeformer() [2/2]

agxUtil::TrimeshDeformer::TrimeshDeformer ( )
protected

◆ ~TrimeshDeformer()

virtual agxUtil::TrimeshDeformer::~TrimeshDeformer ( )
protectedvirtual

Member Function Documentation

◆ activateDualFrameInterapolation()

bool agxUtil::TrimeshDeformer::activateDualFrameInterapolation ( agx::Frame interpolationFrame1,
agx::Frame interpolationFrame2,
agx::Vec3  localMeshDir 
)

The dual frame interpolation will move all verticies of the trimesh in between the x-y planes of interpolationFrame1 and interpolationFrame2.

The relative transform between the interpolation frames at creation is considered the relaxed state. When the simulation forces the frames to move individually, all vertices get updated positions. The rule is that the verticies in the local x-y planes are not transformed, but then given the distance to the respective planes, the position for each vertex gets a weighted average depending on distance given where they would be if the shape was located at either interpolation frame, un-transformed.

This method is useful when visualizing the deformation of springs or suction cups, where the dynamics is represented by one constraint.

Initial state Transformed state ____________ x-y plane interpolationFrame2 _ \ / / / \ / / / _/\ rotated x-y plane interpolationFrame2 _/__/________ x-y plane interpolationFrame1 / / /___/____x-y plane interpolationFrame1

Parameters
interpolationFrame1- a frame from where the trimesh shape starts
interpolationFrame2- a frame from where the trimesh shape ends
localMeshDir- the mesh local direction defining trimesh start and end

◆ activateLocalOffsetInterpolation()

void agxUtil::TrimeshDeformer::activateLocalOffsetInterpolation ( )

Prepare all local offsets, and calculate weight for each effected vertex.

◆ addLocalDeformation()

bool agxUtil::TrimeshDeformer::addLocalDeformation ( const agx::RigidBody relativeBody,
const agx::RigidBody body,
agx::Real  offsetReach,
agx::Real  fullOffsetPercent,
agx::Vec3 relativePosition = nullptr 
)

For simulation models that consist of several rigid bodies, but we like to have just one visual but it is interesting to visualize local deformations.

Could be a tire, bending steel plate or a flexible lip of a suction cup which should deform non uniformly.

Parameters
relativeBody- a central body which is the owner of the trimeshGeometry that will deform
body- a body which transform relative the relativeBody we like to visualize by trimesh deformations
offsetReach- define within which distance from the body should vertices be affected
fullOffsetPercent- between (0,1) how big fraction within the offsetReach should vertices fully reflect the offset, outside it will decay linearly
relativePosition- specify if there is a known wanted realtive position, if not specified the current position will be used.

◆ AGXSTREAM_DECLARE_SERIALIZABLE_BASE()

agxUtil::TrimeshDeformer::AGXSTREAM_DECLARE_SERIALIZABLE_BASE ( agxUtil::TrimeshDeformer  )

◆ create()

static agxStream::Serializable * agxUtil::TrimeshDeformer::create ( agxStream::InputArchive )
inlinestatic

Definition at line 170 of file TrimeshDeformer.h.

◆ getEnableUpdateCollisionGeometry()

bool agxUtil::TrimeshDeformer::getEnableUpdateCollisionGeometry ( ) const
Returns
true if the mesh collision properties, including mass properties and bounding box calculations needed for collision detection should be calculated each time step.

◆ getGeometry()

agxCollide::Geometry * agxUtil::TrimeshDeformer::getGeometry ( )
Returns
pointer to the geometry of the trimesh being deformed

◆ getTrimesh()

agxCollide::Trimesh * agxUtil::TrimeshDeformer::getTrimesh ( )
Returns
pointer to the trimesh being deformed

◆ isValid()

bool agxUtil::TrimeshDeformer::isValid ( ) const
Returns
true if the trimesh and geometry instances exist.

◆ last()

void agxUtil::TrimeshDeformer::last ( const agx::TimeStamp time)
overridevirtual

Called after a step is taken in the simulation Implement this method in the derived class to get callbacks.

Note
In this call, the simulation time is the new updated time.
Parameters
time- The new updated simulation time incremented by the time step.

Reimplemented from agxSDK::StepEventListener.

◆ removeNotification()

void agxUtil::TrimeshDeformer::removeNotification ( )
overrideprotectedvirtual

Called when this listener is removed from the simulation.

Reimplemented from agxSDK::EventListener.

◆ setEnableUpdateCollisionGeometry()

void agxUtil::TrimeshDeformer::setEnableUpdateCollisionGeometry ( bool  enable)

Specify if the mesh collision properties, including mass properties and bounding box calculations needed for collision detection should be calculated each time step.

Not needed if the trimesh is only for the visual.

◆ setOwner()

void agxUtil::TrimeshDeformer::setOwner ( ParallelTrimeshDeformer deformer)
protected

◆ update()

void agxUtil::TrimeshDeformer::update ( )

Update the trimesh given the operations activated.

◆ updateCollisionGeometry()

void agxUtil::TrimeshDeformer::updateCollisionGeometry ( )

◆ updateDualFrameInterpolation()

void agxUtil::TrimeshDeformer::updateDualFrameInterpolation ( )
protected

◆ updateLocalOffset()

void agxUtil::TrimeshDeformer::updateLocalOffset ( const BodyLocalOffsetRef  offset)
protected

Member Data Documentation

◆ m_enableUpdate

bool agxUtil::TrimeshDeformer::m_enableUpdate
protected

Definition at line 194 of file TrimeshDeformer.h.

◆ m_fullInterpolationLength

agx::Real agxUtil::TrimeshDeformer::m_fullInterpolationLength
protected

Definition at line 192 of file TrimeshDeformer.h.

◆ m_interpolationFrame1

agx::FrameRef agxUtil::TrimeshDeformer::m_interpolationFrame1
protected

Definition at line 190 of file TrimeshDeformer.h.

◆ m_interpolationFrame2

agx::FrameRef agxUtil::TrimeshDeformer::m_interpolationFrame2
protected

Definition at line 191 of file TrimeshDeformer.h.

◆ m_localFrame1VertexRotation

agx::AffineMatrix4x4 agxUtil::TrimeshDeformer::m_localFrame1VertexRotation
protected

Definition at line 195 of file TrimeshDeformer.h.

◆ m_localMeshNormal

agx::Vec3 agxUtil::TrimeshDeformer::m_localMeshNormal
protected

Definition at line 193 of file TrimeshDeformer.h.

◆ m_localOffsets

BodyLocalOffsetRefVector agxUtil::TrimeshDeformer::m_localOffsets
protected

Definition at line 200 of file TrimeshDeformer.h.

◆ m_originalVertices

agx::Vector<agx::Vec3> agxUtil::TrimeshDeformer::m_originalVertices
protected

Definition at line 197 of file TrimeshDeformer.h.

◆ m_owner

agx::observer_ptr<ParallelTrimeshDeformer> agxUtil::TrimeshDeformer::m_owner
protected

Definition at line 202 of file TrimeshDeformer.h.

◆ m_trimesh

agxCollide::TrimeshObserver agxUtil::TrimeshDeformer::m_trimesh
protected

Definition at line 188 of file TrimeshDeformer.h.

◆ m_trimeshGeometry

agxCollide::GeometryObserver agxUtil::TrimeshDeformer::m_trimeshGeometry
protected

Definition at line 189 of file TrimeshDeformer.h.

◆ m_verticesRelative1

agx::Vector<agx::Vec3> agxUtil::TrimeshDeformer::m_verticesRelative1
protected

Definition at line 198 of file TrimeshDeformer.h.

◆ m_verticesRelative2

agx::Vector<agx::Vec3> agxUtil::TrimeshDeformer::m_verticesRelative2
protected

Definition at line 199 of file TrimeshDeformer.h.


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