void IgstkTool::processReceivedTransformResult(igstk::CoordinateSystemTransformToResult result) { if (!this->validReferenceForResult(result)) return; // emit even if not visible: need error metadata igstk::NDITracker::TrackingSampleInfo sampleInfo = this->getSampleInfo(); // ignore duplicate positions if (similar(mLatestEmittedTimestamp, sampleInfo.m_TimeStamp,1.0E-3)) { return; } mLatestEmittedTimestamp = sampleInfo.m_TimeStamp; QDomDocument doc; QDomElement root = doc.createElement("info"); doc.appendChild(root); sampleInfo2xml(sampleInfo, root); ToolPositionMetadata metadata; metadata.mData = doc.toString(); igstk::Transform transform = result.GetTransform(); Transform3D prMt = igstk2Transform3D(transform); double timestamp = transform.GetStartTime(); emit toolTransformAndTimestamp(prMt, timestamp, metadata); }
void PlaybackTool::timeChangedSlot() { QDateTime time = mTime->getTime(); qint64 time_ms = time.toMSecsSinceEpoch(); TimedTransformMapPtr positions = mBase->getPositionHistory(); if (positions->empty()) return; // find last stored time before current time. TimedTransformMap::iterator lastSample = positions->lower_bound(time_ms); if (lastSample!=positions->begin()) --lastSample; // interpret as hidden if no samples has been received the last time: qint64 timeout = 200; bool visible = (lastSample!=positions->end()) && (fabs(time_ms - lastSample->first) < timeout); // change visibility if applicable if (mVisible!=visible) { mVisible = visible; emit toolVisible(mVisible); } // emit new position if visible if (this->getVisible()) { m_rMpr = lastSample->second; mTimestamp = lastSample->first; emit toolTransformAndTimestamp(m_rMpr, mTimestamp); } }
void SliceProxy::toolTransformAndTimestampSlot(Transform3D prMt, double timestamp) { //std::cout << "proxy get transform" << std::endl; Transform3D rMpr = mDataManager->get_rMpr(); Transform3D rMt = rMpr*prMt; // if (similar(rMt, mCutplane->getToolPosition())) // { // return; // } mCutplane->setToolPosition(rMt); this->changed(); emit toolTransformAndTimestamp(prMt, timestamp); }
void ToolImpl::set_prMt(const Transform3D& prMt, double timestamp) { if (mPositionHistory->count(timestamp)) { if (similar(mPositionHistory->find(timestamp)->second, prMt)) return; } m_prMt = prMt; // Store positions in history, but only if visible - the history has no concept of visibility if (this->getVisible()) (*mPositionHistory)[timestamp] = m_prMt; emit toolTransformAndTimestamp(m_prMt, timestamp); }
void ToolUsingIGSTK::toolTransformAndTimestampSlot(Transform3D matrix, double timestamp) { Transform3D prMt_filtered = matrix; if (mTrackingPositionFilter) { mTrackingPositionFilter->addPosition(matrix, timestamp); prMt_filtered = mTrackingPositionFilter->getFilteredPosition(); } mTimestamp = timestamp; (*mPositionHistory)[timestamp] = matrix; // store original in history m_prMt = prMt_filtered; emit toolTransformAndTimestamp(m_prMt, timestamp); // ToolImpl::set_prMt(matrix, timestamp); }