iMSTK
Interactive Medical Simulation Toolkit
|
This class implements once tracking controller controlling one scene object. More...
#include <imstkSceneObjectController.h>
Public Member Functions | |
SceneObjectController (const std::string &name="SceneObjectController") | |
void | update (const double &dt) override |
Update controlled scene object using latest tracking information. | |
std::shared_ptr< SceneObject > | getControlledObject () const |
Get/Set controlled scene object. | |
virtual void | setControlledObject (std::shared_ptr< SceneObject > so) |
![]() | |
virtual void | applyForces () |
Apply forces to the haptic device. | |
const Quatd & | getEffectorRotationOffset () |
Get/Set the roation applied to the end effector, this can be used to register the device in virtual space with regard to the users point of view. | |
void | setEffectorRotationOffset (const Quatd &r) |
virtual bool | updateTrackingData (const double dt) |
Update tracking data. | |
const Vec3d & | getPosition () const |
Set/Get the position of the tracker. | |
void | setPosition (const Vec3d &pos) |
const Quatd & | getOrientation () const |
Set/Get the orientation of the tracker. | |
void | setOrientation (const Quatd &orientation) |
void | setComputeVelocity (const bool computeVelocity) |
Set/Get whether to compute the velocity from previous and current samples Useful if a device does not provide the quantity. | |
bool | getComputeVelocity () const |
void | setComputeAngularVelocity (const bool computeAngularVelocity) |
Set/Get whether to compute the anular velocity from previous and current samples Useful if the device does not provide the quantity. | |
bool | getComputeAngularVelocity () const |
const Vec3d & | getAngularVelocity () const |
Get/Set the angular velocity. | |
void | setAngularVelocity (const Vec3d &angularVelocity) |
const Vec3d & | getVelocity () const |
Get/Set the linear velocity. | |
void | setVelocity (const Vec3d &velocity) |
double | getTranslationScaling () const |
Get/Set the current scaling factor. | |
void | setTranslationScaling (const double scaling) |
const Vec3d & | getTranslationOffset () const |
Get/Set the translation offset. | |
void | setTranslationOffset (const Vec3d &t) |
const Quatd & | getRotationOffset () |
Get/Set the rotation offset, this rotation is applied to the overall device coordinate system. | |
void | setRotationOffset (const Quatd &r) |
unsigned char | getInversionFlags () |
Get/Set the inversion flags, when set the corresponding axis coordinates or rotation angle will be negated. | |
void | setInversionFlags (const unsigned char f) |
![]() | |
SIGNAL (DeviceControl, modified) | |
virtual void | printControls () |
Prints the controls. | |
std::shared_ptr< DeviceClient > | getDevice () const |
Set/Get the device client used in the control. | |
virtual void | setDevice (std::shared_ptr< DeviceClient > device) |
![]() | |
virtual void | update (const UpdateInfo &imstkNotUsed(updateData)) |
virtual void | visualUpdate (const UpdateInfo &imstkNotUsed(updateData)) |
void | initTaskGraphEdges () |
Setup the edges/connections of the TaskGraph. | |
std::shared_ptr< TaskGraph > | getTaskGraph () const |
![]() | |
const std::string & | getName () const |
void | setName (const std::string &name) |
std::weak_ptr< Entity > | getEntity () const |
Get parent entity. | |
void | initialize () |
Initialize the component, called at a later time after all component construction is complete. | |
![]() | |
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 Attributes | |
std::shared_ptr< SceneObject > | m_sceneObject |
SceneObject controlled by the Tracker. | |
![]() | |
double | m_scaling = 1.0 |
Scaling factor for physical to virtual translations. | |
Vec3d | m_translationOffset = Vec3d::Zero() |
Translation concatenated to the device translation. | |
Quatd | m_rotationOffset = Quatd::Identity() |
Rotation concatenated to the device rotation. | |
Quatd | m_effectorRotationOffset = Quatd::Identity() |
Rotation prefixed to the device rotation. | |
unsigned char | m_invertFlags = 0x00 |
Invert flags to be masked with DeviceTracker::InvertFlag. | |
Vec3d | m_currentPos = Vec3d::Zero() |
Quatd | m_currentOrientation = Quatd::Identity() |
Vec3d | m_currentVelocity = Vec3d::Zero() |
Vec3d | m_currentAngularVelocity = Vec3d::Zero() |
Vec3d | m_currentDisplacement = Vec3d::Zero() |
Quatd | m_currentRotation = Quatd::Identity() |
bool | m_computeVelocity = false |
If true, will use current and previous positions to produce velocity, if off, will ask device for velocity. | |
bool | m_computeAngularVelocity = false |
If true, will use current and previous rotations to produce angular velocity, if off, will ask device for angular velocity. | |
![]() | |
std::shared_ptr< DeviceClient > | m_deviceClient |
![]() | |
std::shared_ptr< TaskGraph > | m_taskGraph = nullptr |
![]() | |
std::string | m_name |
std::weak_ptr< Entity > | m_entity |
Parent entity this component exists on. | |
![]() | |
ParallelUtils::SpinLock | eventQueueLock |
std::deque< Command > | eventQueue |
std::vector< std::pair< std::string, std::vector< Observer > > > | queuedObservers |
std::vector< std::pair< std::string, std::vector< Observer > > > | directObservers |
Additional Inherited Members | |
![]() | |
enum | InvertFlag { transX = 0x01, transY = 0x02, transZ = 0x04, rotX = 0x08, rotY = 0x10, rotZ = 0x20 } |
![]() | |
using | Observer = std::tuple< bool, std::weak_ptr< EventObject >, std::function< void(Event *)> > |
![]() | |
TrackingDeviceControl (const std::string &name="TrackingDeviceControl") | |
![]() | |
DeviceControl (const std::string &name="DeviceControl") | |
![]() | |
Behaviour (const std::string &name="Behaviour") | |
Behaviour (const bool useTaskGraph, const std::string &name="Behaviour") | |
virtual void | initGraphEdges (std::shared_ptr< TaskNode > imstkNotUsed(source), std::shared_ptr< TaskNode > imstkNotUsed(sink)) |
Setup the edges/connections of the TaskGraph. More... | |
![]() | |
Component (const std::string &name="Component") | |
virtual void | init () |
Initialize the component, called at a later time after all component construction is complete. | |
This class implements once tracking controller controlling one scene object.
Definition at line 22 of file imstkSceneObjectController.h.