示例#1
0
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);
}
示例#2
0
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);
	}
}
示例#3
0
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);

}
示例#4
0
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);
}
示例#5
0
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);
}