33 #define _USE_MATH_DEFINES
36 #include <vtkPolyData.h>
37 #include <vtkConeSource.h>
38 #include <vtkSTLReader.h>
41 #include <QStringList>
42 #include <QTextStream>
55 mTool(igstkTool), mPolyData(NULL),
56 mValid(false), mConfigured(false), mTracked(false)
59 Tool::mUid = mTool->getInternalStructure().mUid;
61 mValid = igstkTool->isValid();
63 this->createPolyData();
66 SLOT(toolTransformAndTimestampSlot(
Transform3D,
double)));
68 connect(mTool.get(), SIGNAL(
toolVisible(
bool)),
this, SLOT(toolVisibleSlot(
bool)));
70 connect(&mTpsTimer, SIGNAL(timeout()),
this, SLOT(calculateTpsSlot()));
72 if (mTool->getInternalStructure().mIsProbe)
74 mProbe =
ProbeImpl::New(mTool->getInternalStructure().mInstrumentId,
75 mTool->getInternalStructure().mInstrumentScannerId);
76 connect(mProbe.get(), SIGNAL(sectorChanged()),
this, SIGNAL(
toolProbeSector()));
86 std::set<Type> retval;
88 if (mTool->getInternalStructure().mIsReference)
90 if (mTool->getInternalStructure().mIsPointer)
92 if (mTool->getInternalStructure().mIsProbe)
110 return mTool->isVisible();
115 return mTool->isInitialized();
131 return this->
getProbe()->getProbeData().getDepthStart();
147 void ToolUsingIGSTK::createPolyData()
150 if (!mTool->getInternalStructure().mGraphicsFileName.isEmpty()
151 && dir.exists(mTool->getInternalStructure().mGraphicsFileName))
154 reader->SetFileName(
cstring_cast(mTool->getInternalStructure().mGraphicsFileName));
156 mPolyData = reader->GetOutput();
161 coneSource->SetResolution(25);
162 coneSource->SetRadius(10);
163 coneSource->SetHeight(100);
165 coneSource->SetDirection(0, 0, 1);
167 coneSource->GetCenter(newCenter);
168 newCenter[2] = newCenter[2] - coneSource->GetHeight() / 2;
169 coneSource->SetCenter(newCenter);
171 coneSource->Update();
172 mPolyData = coneSource->GetOutput();
179 Transform3D sMt = mTool->getInternalStructure().getCalibrationAsSSC();
180 return !
similar(sMt, identity);
185 Transform3D sMt = mTool->getInternalStructure().getCalibrationAsSSC();
192 mTool->updateCalibration(calibration);
197 return mTool->getInternalStructure().mCalibrationFilename;
202 return mTool->getInternalStructure().mTrackerType;
205 void ToolUsingIGSTK::printInternalStructure()
207 mTool->printInternalStructure();
212 return mTool->getInternalStructure().mReferencePoints;
222 QDomDocument doc = dataNode.ownerDocument();
224 if (mProbe && mProbe->isValid())
226 QDomElement probeNode = doc.createElement(
"probe");
227 mProbe->addXml(probeNode);
228 dataNode.appendChild(probeNode);
234 if (dataNode.isNull())
238 QDomNode probeNode = dataNode.namedItem(
"probe");
239 mProbe->parseXml(probeNode);
243 void ToolUsingIGSTK::toolTransformAndTimestampSlot(
Transform3D matrix,
double timestamp)
253 mTimestamp = timestamp;
254 (*mPositionHistory)[timestamp] = matrix;
261 void ToolUsingIGSTK::calculateTpsSlot()
266 if ( numberOfTransformsToCheck <= 1)
273 double lastTransform = it->first;
274 for (
int i = 0; i < numberOfTransformsToCheck; ++i)
276 double firstTransform = it->first;
277 double secondsPassed = (lastTransform - firstTransform) / 1000;
279 if (!
similar(secondsPassed, 0))
280 tpsNr = (
int) (numberOfTransformsToCheck / secondsPassed);
285 void ToolUsingIGSTK::toolVisibleSlot(
bool on)
288 mTpsTimer.start(1000);
QString qstring_cast(const T &val)
boost::shared_ptr< IgstkTool > IgstkToolPtr
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
cstring_cast_Placeholder cstring_cast(const T &val)
vtkSmartPointer< class vtkPolyData > vtkPolyDataPtr
bool similar(const DoubleBoundingBox3D &a, const DoubleBoundingBox3D &b, double tol)
boost::shared_ptr< Probe > ProbePtr
vtkSmartPointer< class vtkSTLReader > vtkSTLReaderPtr
vtkSmartPointer< class vtkConeSource > vtkConeSourcePtr
static ProbeImplPtr New(QString instrumentUid, QString scannerUid, ProbeXmlConfigParserPtr xml=ProbeXmlConfigParserPtr())