iMSTK
Interactive Medical Simulation Toolkit
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
imstk::PbdObjectGrasping Class Reference

This class defines grasping of a PbdObject via different picking methods. Where grasping is define as grabbing & attaching of a PbdObject's mesh to points. More...

#include <imstkPbdObjectGrasping.h>

Inheritance diagram for imstk::PbdObjectGrasping:
Inheritance graph
[legend]
Collaboration diagram for imstk::PbdObjectGrasping:
Collaboration graph
[legend]

Public Types

enum  GraspMode { Vertex, Cell, RayPoint, RayCell }
 
- Public Types inherited from imstk::EventObject
using Observer = std::tuple< bool, std::weak_ptr< EventObject >, std::function< void(Event *)> >
 

Public Member Functions

 PbdObjectGrasping (std::shared_ptr< PbdObject > graspedObject, std::shared_ptr< PbdObject > grasperObject=nullptr)
 Construct PbdObjectGrasping with a object to grasp and and optionally an object that does the grasping. Whilst grasping can work with any grasping criteria, if you want a two-way response you must supply an object to grasp with.
 
void beginVertexGrasp (std::shared_ptr< AnalyticalGeometry > geometry)
 Begin a vertex grasp (picking will begin on the next update) More...
 
void beginCellGrasp (std::shared_ptr< AnalyticalGeometry > geometry, std::string cdType="")
 Begin a cell grasp (picking will begin on the next update) Also works for rigid on rigid. More...
 
void beginRayPointGrasp (std::shared_ptr< AnalyticalGeometry > geometry, const Vec3d &rayStart, const Vec3d &rayDir, const double maxDist=-1.0)
 Begin a ray point grasp (picking will begin on the next update) More...
 
void beginRayCellGrasp (std::shared_ptr< AnalyticalGeometry > geometry, const Vec3d &rayStart, const Vec3d &rayDir, const double maxDist=-1.0)
 Begin a ray point grasp (picking will begin on the next update) More...
 
void regrasp ()
 if you already started a grasp, recalculates grasping points As the currently grasped points are already constrained to the object this will capture those point plus any new candidates
 
void endGrasp ()
 End a grasp (picking will end on next update)
 
void addPickConstraints ()
 Compute/generate the constraints for picking.
 
void removePickConstraints ()
 Remove the constraints for picking.
 
virtual void addPointToPointConstraint (const std::vector< PbdParticleId > &ptsA, const std::vector< double > &weightsA, const std::vector< PbdParticleId > &ptsB, const std::vector< double > &weightsB, const double stiffnessA, const double stiffnessB)
 Add constraint between a point on each element given via barycentric coordinates pt position = weightA_0 * ptsA_0 + weightA_1 * ptsA_1 + ...
 
virtual void addBodyToBodyConstraint (const PbdParticleId &graspedBodyId, const PbdParticleId &grasperBodyId, const Vec3d &pointOnBodies, const double compliance)
 Add 0 distance constraint between two points defined on two separate bodies.
 
virtual void addPointToBodyConstraint (const PbdParticleId &graspedParticleId, const PbdParticleId &grasperBodyId, const Vec3d &pointOnBody, const double compliance)
 Add a 0 distance constraint between a deformable point and a point on a body.
 
void setGeometryToPick (std::shared_ptr< Geometry > geomToPick, std::shared_ptr< PointwiseMap > map)
 Set a different geometry to pick with and a mapping back to the physics geometry to select the correct vertices.
 
std::shared_ptr< TaskNodegetPickingNode () const
 
void initGraphEdges (std::shared_ptr< TaskNode > source, std::shared_ptr< TaskNode > sink) override
 Setup connectivity of the compute graph.
 
bool hasConstraints () const
 Returns if any grasp constraints are present.
 
bool getGraspState () const
 Returns true if currently grasping, else false.
 
void setStiffness (const double stiffness)
 Set/Get the stiffness, 0-1 value that alters the step size in the solver.
 
double getStiffness () const
 
void setCompliance (const double compliance)
 Set/Get the compliance.
 
double getCompliance () const
 
void setPickingAlgorithm (std::shared_ptr< PickingAlgorithm > pickMethod)
 Get/Set the method use for picking, default is CellPicker.
 
std::shared_ptr< PickingAlgorithmgetPickingAlgorithm () const
 
- Public Member Functions inherited from imstk::SceneObject
 SceneObject (const std::string &name="SceneObject")
 
std::shared_ptr< TaskGraphgetTaskGraph () const
 Get the computational graph.
 
std::shared_ptr< GeometrygetVisualGeometry () const
 Sets the visual geometry, adds (sets the first) VisualModel.
 
void setVisualGeometry (std::shared_ptr< Geometry > geometry)
 
std::shared_ptr< VisualModelgetVisualModel (const int index) const
 Get/add visual model.
 
void addVisualModel (std::shared_ptr< VisualModel > visualModel)
 
void removeVisualModel (std::shared_ptr< VisualModel > visualModel)
 
std::shared_ptr< TaskNodegetUpdateNode () const
 Returns the computational node for updating.
 
std::shared_ptr< TaskNodegetUpdateGeometryNode () const
 Returns the computational node for updating geometry.
 
virtual void update ()
 Update the SceneObject, called during scene update.
 
virtual void visualUpdate ()
 Update the visuals, called before render.
 
virtual void updateGeometries ()
 Update the geometries.
 
virtual bool initialize ()
 Initialize the scene object.
 
void initGraphEdges ()
 Initializes the edges of the SceneObject's computational graph.
 
virtual void reset ()
 
- Public Member Functions inherited from imstk::Entity
 Entity (const std::string &name="Entity")
 
 SIGNAL (Entity, modified)
 
EntityID getID () const
 Get ID (ALWAYS query the ID in your code, DO NOT hardcode it) More...
 
virtual const std::string getTypeName () const
 
template<typename T >
std::shared_ptr< T > addComponent ()
 Create and return a component on this entity.
 
template<typename T >
std::shared_ptr< T > addComponent (std::string name)
 
void addComponent (std::shared_ptr< Component > component)
 Add existing component to entity.
 
std::shared_ptr< ComponentgetComponent (const unsigned int index) const
 Get a component by index.
 
template<typename T >
std::shared_ptr< T > getComponent () const
 Get the first component of type T.
 
template<typename T >
std::shared_ptr< T > getComponentN (const int index) const
 Get's the Nth component of type T.
 
template<class T >
bool containsComponent () const
 Check if contains component of type T.
 
bool containsComponent (std::shared_ptr< Component > component) const
 Check if contains given component.
 
template<typename T >
std::vector< std::shared_ptr< T > > getComponents () const
 Get all components of type T.
 
const std::vector< std::shared_ptr< Component > > & getComponents ()
 
void removeComponent (std::shared_ptr< Component > component)
 Remove component if it exists.
 
const std::string & getName () const
 Get/Set the name of the entity.
 
void setName (const std::string &name)
 
- Public Member Functions inherited from imstk::EventObject
template<typename T >
void postEvent (const T &e)
 Emits the event Direct observers will be immediately called, in sync Queued observers will receive the Command in their queue for later execution, reciever must implement doEvent.
 
template<typename T >
void queueEvent (const T &e)
 Queues event directly to this.
 
void doEvent ()
 Do an event, if none exists return.
 
void doAllEvents ()
 Do all the events in the event queue.
 
void foreachEvent (std::function< void(Command cmd)> func)
 Thread safe loop over all event commands, one can implement a custom handler.
 
void rforeachEvent (std::function< void(Command cmd)> func)
 thread safe reverse loop over all event commands, one can implement a custom handler
 
void clearEvents ()
 Removes all events from queue cleans up copies of the event.
 

Protected Member Functions

virtual void updatePicking ()
 Update picking state, this should move grasp points.
 
void updateConstraints ()
 Update the constraints used for picking.
 
- Protected Member Functions inherited from imstk::SceneObject
virtual void postModifiedAll ()
 Posts modified for all geometries.
 

Protected Attributes

std::shared_ptr< TaskNodem_pickingNode = nullptr
 
std::shared_ptr< Geometrym_geomToPick = nullptr
 
std::shared_ptr< PointwiseMapm_geometryToPickMap = nullptr
 
std::shared_ptr< PbdObjectm_objectToGrasp = nullptr
 
std::shared_ptr< PbdObjectm_grasperObject = nullptr
 
std::shared_ptr< AnalyticalGeometrym_graspGeom = nullptr
 
std::shared_ptr< PickingAlgorithmm_pickMethod = nullptr
 
GraspMode m_graspMode = GraspMode::Cell
 
bool m_isGrasping = false
 
bool m_regrasp = false
 Add grasped points to the current grasp.
 
bool m_isPrevGrasping = false
 
double m_stiffness = 0.4
 
double m_compliance = 0.0001
 
std::vector< std::tuple< PbdParticleId, Vec3d > > m_constraintPts
 Vec of virtual particle grasp point ids, and local positions when grasped.
 
std::vector< std::shared_ptr< PbdConstraint > > m_constraints
 List of PBD constraints.
 
- Protected Attributes inherited from imstk::SceneObject
std::shared_ptr< TaskGraphm_taskGraph = nullptr
 Computational Graph.
 
- Protected Attributes inherited from imstk::Entity
std::vector< std::shared_ptr< Component > > m_components
 
EntityID m_ID
 unique ID of entity
 
std::string m_name
 Not unique name.
 
- Protected Attributes inherited from imstk::EventObject
ParallelUtils::SpinLock eventQueueLock
 
std::deque< CommandeventQueue
 
std::vector< std::pair< std::string, std::vector< Observer > > > queuedObservers
 
std::vector< std::pair< std::string, std::vector< Observer > > > directObservers
 

Additional Inherited Members

- Static Protected Attributes inherited from imstk::Entity
static std::atomic< EntityID > m_count { 0 }
 current count of entities
 

Detailed Description

This class defines grasping of a PbdObject via different picking methods. Where grasping is define as grabbing & attaching of a PbdObject's mesh to points.

Given an input PickData the appropriate grasping will be produced.

Definition at line 32 of file imstkPbdObjectGrasping.h.

Member Function Documentation

◆ beginCellGrasp()

void imstk::PbdObjectGrasping::beginCellGrasp ( std::shared_ptr< AnalyticalGeometry geometry,
std::string  cdType = "" 
)

Begin a cell grasp (picking will begin on the next update) Also works for rigid on rigid.

Parameters
Geometryattached/grasped too
Theintersection type/class name

Definition at line 247 of file imstkPbdObjectGrasping.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ beginRayCellGrasp()

void imstk::PbdObjectGrasping::beginRayCellGrasp ( std::shared_ptr< AnalyticalGeometry geometry,
const Vec3d &  rayStart,
const Vec3d &  rayDir,
const double  maxDist = -1.0 
)

Begin a ray point grasp (picking will begin on the next update)

Parameters
Geometryattached/grasped too
Globalspace ray start
Globalspace ray direction

Definition at line 284 of file imstkPbdObjectGrasping.cpp.

Here is the caller graph for this function:

◆ beginRayPointGrasp()

void imstk::PbdObjectGrasping::beginRayPointGrasp ( std::shared_ptr< AnalyticalGeometry geometry,
const Vec3d &  rayStart,
const Vec3d &  rayDir,
const double  maxDist = -1.0 
)

Begin a ray point grasp (picking will begin on the next update)

Parameters
Geometryattached/grasped too
Globalspace ray start
Globalspace ray direction

Definition at line 271 of file imstkPbdObjectGrasping.cpp.

Here is the caller graph for this function:

◆ beginVertexGrasp()

void imstk::PbdObjectGrasping::beginVertexGrasp ( std::shared_ptr< AnalyticalGeometry geometry)

Begin a vertex grasp (picking will begin on the next update)

Parameters
Geometryattached/grasped too

Definition at line 234 of file imstkPbdObjectGrasping.cpp.

Here is the caller graph for this function:

Member Data Documentation

◆ m_stiffness

double imstk::PbdObjectGrasping::m_stiffness = 0.4
protected

Stiffness of grasp, when 1 the position is completely moved too the grasp point when stiffness < 1 it will slowly converge on the grasp point

Definition at line 218 of file imstkPbdObjectGrasping.h.


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