23 ToolImpl(toolFileToolStructure->mUid, toolFileToolStructure->mUid),
26 mLastReceivedPositionTime(0),
27 mConfigFileToolStructure(configFileToolStructure),
28 mToolFileToolStructure(toolFileToolStructure),
29 mPrintedWarningAboutTimeStampMismatch(false)
34 connect(&mTpsTimer, &QTimer::timeout,
this, &OpenIGTLinkTool::calculateTpsSlot);
35 connect(&mTpsTimer, &QTimer::timeout,
this, &OpenIGTLinkTool::calculateVisible);
37 if(toolFileToolStructure->mIsProbe)
46 mProbe =
ProbeImpl::New(
"ProbeToReference",
"PlusDeviceSet_OpenIGTLinkCommandsTest");
47 connect(mProbe.get(), SIGNAL(sectorChanged()),
this, SIGNAL(
toolProbeSector()));
51 this->toolVisibleSlot(
true);
57 if(openIGTLinkId.compare(this->mConfigFileToolStructure.mOpenIGTLinkTransformId, Qt::CaseInsensitive) == 0)
59 else if(openIGTLinkId.compare(this->mConfigFileToolStructure.mOpenIGTLinkImageId, Qt::CaseInsensitive) == 0)
102 return this->
getProbe()->getProbeDefinition().getDepthStart();
118 bool calibrated = !
similar(sMt, identity);
119 CX_LOG_DEBUG() <<
"Checking if openiglink tool is calibratated: " << calibrated;
125 return mToolFileToolStructure->getCalibrationAsSSC();
131 CX_LOG_WARNING() <<
"OpenIGTLinkTool::setCalibration_sMt() Receiving calibration. Should file be updated, or should it be discarded and use calibration from file instead?";
132 CX_LOG_WARNING() <<
"Current implementation discards this received calibration. sMt: " << sMt;
138 void OpenIGTLinkTool::toolTransformAndTimestampSlot(
Transform3D prMs,
double timestamp)
144 mTimestamp = timestamp * 1000;
145 this->checkTimestampMismatch();
172 (*mPositionHistory)[mTimestamp] = prMt;
177 void OpenIGTLinkTool::checkTimestampMismatch()
179 mLastReceivedPositionTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
180 double diff = mLastReceivedPositionTime - mTimestamp;
183 if(fabs(diff) > 1000)
185 this->printWarningAboutTimestampMismatch(diff);
186 mTimestamp = mLastReceivedPositionTime;
190 void OpenIGTLinkTool::printWarningAboutTimestampMismatch(
double diff)
192 if (mPrintedWarningAboutTimeStampMismatch)
195 CX_LOG_WARNING() <<
"Difference between system time and received tool timestamp: " << diff
196 <<
" The reason for this may be incompatible timestamps. " 197 <<
" System time will be used instead of received timestamp.";
198 mPrintedWarningAboutTimeStampMismatch =
true;
201 void OpenIGTLinkTool::calculateTpsSlot()
205 if (numberOfTransformsToCheck <= 1)
212 double lastTransform = rit->first;
213 for (
size_t i = 0; i < numberOfTransformsToCheck-1; ++i)
217 double firstTransform = rit->first;
218 double secondsPassed = (lastTransform - firstTransform) / 1000;
220 if (!
similar(secondsPassed, 0))
221 tpsNr =
int(numberOfTransformsToCheck / secondsPassed);
225 void OpenIGTLinkTool::calculateVisible()
229 qint64 currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
230 double diff = currentTime - mLastReceivedPositionTime;
238 void OpenIGTLinkTool::toolVisibleSlot(
bool on)
241 mTpsTimer.start(1000);
254 return mToolFileToolStructure;
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
boost::shared_ptr< Probe > ProbePtr
static ProbeImplPtr New(QString instrumentUid, QString scannerUid, ProbeXmlConfigParserPtr xml=ProbeXmlConfigParserPtr())
bool similar(const CameraInfo &lhs, const CameraInfo &rhs, double tol)
Namespace for all CustusX production code.