7 #include "imstkLaparoscopicToolController.h" 8 #include "imstkCollidingObject.h" 9 #include "imstkDeviceClient.h" 10 #include "imstkGeometry.h" 11 #include "imstkLogger.h" 16 LaparoscopicToolController::setParts(
17 std::shared_ptr<CollidingObject> shaft,
18 std::shared_ptr<CollidingObject> upperJaw,
19 std::shared_ptr<CollidingObject> lowerJaw,
20 std::shared_ptr<Geometry> pickGeom)
25 m_pickGeom = pickGeom;
29 m_shaftVisualTransform =
m_shaft->getVisualGeometry()->getTransform();
30 m_upperJawVisualTransform =
m_upperJaw->getVisualGeometry()->getTransform();
31 m_lowerJawVisualTransform =
m_lowerJaw->getVisualGeometry()->getTransform();
33 m_shaftCollidingTransform =
m_shaft->getCollidingGeometry()->getTransform();
34 m_upperJawCollidingTransform =
m_upperJaw->getCollidingGeometry()->getTransform();
35 m_lowerJawCollidingTransform =
m_lowerJaw->getCollidingGeometry()->getTransform();
37 m_pickGeomTransform = m_pickGeom->getTransform();
41 LaparoscopicToolController::setDevice(std::shared_ptr<DeviceClient> device)
43 TrackingDeviceControl::setDevice(device);
44 device->setButtonsEnabled(
true);
52 LOG(WARNING) <<
"warning: could not update tracking info.";
60 m_controllerWorldTransform = mat4dTranslate(controllerPosition) * mat4dRotation(controllerOrientation);
64 m_shaft->getVisualGeometry()->setTransform(m_controllerWorldTransform * m_shaftVisualTransform);
65 m_shaft->getCollidingGeometry()->setTransform(m_controllerWorldTransform * m_shaftCollidingTransform);
66 m_pickGeom->setTransform(m_controllerWorldTransform * m_pickGeomTransform);
70 if (m_deviceClient->getButton(0))
74 if (m_deviceClient->getButton(1))
86 const Mat4d upperWorldTransform = m_controllerWorldTransform * m_upperJawLocalTransform;
87 m_upperJaw->getVisualGeometry()->setTransform(upperWorldTransform * m_upperJawVisualTransform);
88 m_upperJaw->getCollidingGeometry()->setTransform(upperWorldTransform * m_upperJawCollidingTransform);
91 const Mat4d lowerWorldTransform = m_controllerWorldTransform * m_lowerJawLocalTransform;
92 m_lowerJaw->getVisualGeometry()->setTransform(lowerWorldTransform * m_upperJawVisualTransform);
93 m_lowerJaw->getCollidingGeometry()->setTransform(lowerWorldTransform * m_lowerJawCollidingTransform);
95 m_shaft->getVisualGeometry()->postModified();
96 m_lowerJaw->getVisualGeometry()->postModified();
97 m_upperJaw->getVisualGeometry()->postModified();
100 if (m_jawState == JawState::Opened &&
m_jawAngle <= 0.0)
102 m_jawState = JawState::Closed;
106 const double openingDegree = 5.0;
107 if (m_jawState == JawState::Closed &&
m_jawAngle >= openingDegree * PI / 180.0)
109 m_jawState = JawState::Opened;
std::shared_ptr< CollidingObject > m_upperJaw
Tool upper jaw.
Base class for events which contain a type, priority, and data priority defaults to 0 and uses a grea...
virtual bool updateTrackingData(const double dt)
Update tracking data.
double m_change
Amount of change in jaw angle per frame.
std::shared_ptr< CollidingObject > m_shaft
Tool shaft.
double m_maxJawAngle
Maximum angle of the jaws.
std::shared_ptr< CollidingObject > m_lowerJaw
Tool lower jaw.
double m_jawAngle
Angle of the jaws.
const Quatd & getOrientation() const
Set/Get the orientation of the tracker.
const Vec3d & getPosition() const
Set/Get the position of the tracker.
void postEvent(const T &e)
Emits the event Direct observers will be immediately called, in sync Queued observers will receive th...
Vec3d m_jawRotationAxis
Angle of the jaws.
void update(const double &dt) override
Update controlled laparoscopic tool using latest tracking information.