diff --git a/Modules/IGT/DataManagement/mitkNavigationTool.cpp b/Modules/IGT/DataManagement/mitkNavigationTool.cpp index 02e48810a0..679688db34 100644 --- a/Modules/IGT/DataManagement/mitkNavigationTool.cpp +++ b/Modules/IGT/DataManagement/mitkNavigationTool.cpp @@ -1,134 +1,157 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkNavigationTool.h" #include "mitkIGTException.h" #include "mitkNavigationData.h" #include "Poco/File.h" #include "mitkUnspecifiedTrackingTypeInformation.h" +#include "mitkInternalTrackingTool.h" mitk::NavigationTool::NavigationTool() : m_Identifier("None"), - m_Type(mitk::NavigationTool::Unknown), - m_CalibrationFile("none"), - m_SerialNumber(""), - m_TrackingDeviceType(mitk::UnspecifiedTrackingTypeInformation::GetTrackingDeviceName()), - m_ToolRegistrationLandmarks(mitk::PointSet::New()), - m_ToolCalibrationLandmarks(mitk::PointSet::New()), - m_ToolTipOrientation(mitk::Quaternion(0,0,0,1)) - { - m_ToolTipPosition[0] = 0; - m_ToolTipPosition[1] = 0; - m_ToolTipPosition[2] = 0; +m_Type(mitk::NavigationTool::Unknown), +m_CalibrationFile("none"), +m_SerialNumber(""), +m_TrackingDeviceType(mitk::UnspecifiedTrackingTypeInformation::GetTrackingDeviceName()), +m_ToolRegistrationLandmarks(mitk::PointSet::New()), +m_ToolCalibrationLandmarks(mitk::PointSet::New()), +m_ToolTipOrientation(mitk::Quaternion(0, 0, 0, 1)) +{ + m_ToolTipPosition[0] = 0; + m_ToolTipPosition[1] = 0; + m_ToolTipPosition[2] = 0; - m_ToolAxis[0] = 1; - m_ToolAxis[1] = 0; - m_ToolAxis[2] = 0; - } + m_ToolAxis[0] = 1; + m_ToolAxis[1] = 0; + m_ToolAxis[2] = 0; +} mitk::NavigationTool::~NavigationTool() - { - - } +{ +} mitk::AffineTransform3D::Pointer mitk::NavigationTool::GetToolTipTransform() - { - mitk::NavigationData::Pointer returnValue = mitk::NavigationData::New(); - returnValue->SetPosition(this->m_ToolTipPosition); - returnValue->SetOrientation(this->m_ToolTipOrientation); - return returnValue->GetAffineTransform3D(); - } - -void mitk::NavigationTool::Graft( const DataObject *data ) +{ + mitk::NavigationData::Pointer returnValue = mitk::NavigationData::New(); + returnValue->SetPosition(this->m_ToolTipPosition); + returnValue->SetOrientation(this->m_ToolTipOrientation); + return returnValue->GetAffineTransform3D(); +} + +void mitk::NavigationTool::Graft(const DataObject *data) { // Attempt to cast data to an NavigationData const Self* nd; try { - nd = dynamic_cast<const Self *>( data ); + nd = dynamic_cast<const Self *>(data); } - catch( ... ) + catch (...) { mitkThrowException(mitk::IGTException) << "mitk::NavigationData::Graft cannot cast " << typeid(data).name() << " to " - << typeid(const Self *).name() ; + << typeid(const Self *).name(); } if (!nd) { // pointer could not be cast back down mitkThrowException(mitk::IGTException) << "mitk::NavigationData::Graft cannot cast " << typeid(data).name() << " to " - << typeid(const Self *).name() ; + << typeid(const Self *).name(); } // Now copy anything that is needed m_Identifier = nd->GetIdentifier(); m_Type = nd->GetType(); m_DataNode->SetName(nd->GetDataNode()->GetName()); m_DataNode->SetData(nd->GetDataNode()->GetData()); m_SpatialObject = nd->GetSpatialObject(); m_TrackingTool = nd->GetTrackingTool(); m_CalibrationFile = nd->GetCalibrationFile(); m_SerialNumber = nd->GetSerialNumber(); m_TrackingDeviceType = nd->GetTrackingDeviceType(); m_ToolRegistrationLandmarks = nd->GetToolRegistrationLandmarks(); m_ToolCalibrationLandmarks = nd->GetToolCalibrationLandmarks(); m_ToolTipPosition = nd->GetToolTipPosition(); m_ToolTipOrientation = nd->GetToolTipOrientation(); m_ToolAxis = nd->GetToolAxis(); - } bool mitk::NavigationTool::IsToolTipSet() - { - if( (m_ToolTipPosition[0] == 0) && +{ + if ((m_ToolTipPosition[0] == 0) && (m_ToolTipPosition[1] == 0) && (m_ToolTipPosition[2] == 0) && (m_ToolTipOrientation.x() == 0) && (m_ToolTipOrientation.y() == 0) && (m_ToolTipOrientation.z() == 0) && (m_ToolTipOrientation.r() == 1)) - return false; + return false; else return true; - } +} void mitk::NavigationTool::SetCalibrationFile(const std::string filename) - { +{ //check if file does exist: - if (filename=="") - { + if (filename == "") + { m_CalibrationFile = "none"; - } + } else - { + { Poco::File myFile(filename); if (myFile.exists()) m_CalibrationFile = filename; else m_CalibrationFile = "none"; - } } +} std::string mitk::NavigationTool::GetToolName() - { - if (this->m_DataNode.IsNull()) {return "";} - else {return m_DataNode->GetName();} - } +{ + if (this->m_DataNode.IsNull()) { return ""; } + else { return m_DataNode->GetName(); } +} mitk::Surface::Pointer mitk::NavigationTool::GetToolSurface() +{ + if (this->m_DataNode.IsNull()) { return nullptr; } + else if (this->m_DataNode->GetData() == nullptr) { return nullptr; } + else { return dynamic_cast<mitk::Surface*>(m_DataNode->GetData()); } +} + +std::string mitk::NavigationTool::GetStringWithAllToolInformation() const +{ + std::stringstream _info; + _info << "Navigation Tool: \nIdentifier: " << this->m_Identifier << "\n" + << "NavigationToolType: " << m_Type << "\n" + << "Calibration file: " << m_CalibrationFile << "\n" + << "Serial number: " << m_SerialNumber << "\n" + << "TrackingDeviceType: " << m_TrackingDeviceType << "\n" + << "ToolTip Position: " << m_ToolTipPosition << "\n" + << "ToolTip Orientation: " << m_ToolTipOrientation << "\n" + << "ToolTip Axis: " << m_ToolAxis + << "\nTrackingTool: " << m_TrackingTool; + + mitk::InternalTrackingTool* _trackingTool = dynamic_cast<mitk::InternalTrackingTool*>(m_TrackingTool.GetPointer()); + if (_trackingTool) { - if (this->m_DataNode.IsNull()) {return nullptr;} - else if (this->m_DataNode->GetData() == nullptr) {return nullptr;} - else {return dynamic_cast<mitk::Surface*>(m_DataNode->GetData());} + _info << "\n \n TrackingTool: " << m_TrackingTool->GetToolName() + << "\n ToolTip Position:" << _trackingTool->GetToolTip() + << "\n ToolTip Orientation:" << _trackingTool->GetToolTipOrientation(); } + + return _info.str(); +} \ No newline at end of file diff --git a/Modules/IGT/DataManagement/mitkNavigationTool.h b/Modules/IGT/DataManagement/mitkNavigationTool.h index 7280a317c9..c3b5329fca 100644 --- a/Modules/IGT/DataManagement/mitkNavigationTool.h +++ b/Modules/IGT/DataManagement/mitkNavigationTool.h @@ -1,206 +1,212 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef NAVIGATIONTOOL_H_INCLUDED #define NAVIGATIONTOOL_H_INCLUDED //itk headers #include <itkObjectFactory.h> #include <itkSpatialObject.h> #include <itkDataObject.h> //mitk headers #include <mitkCommon.h> #include <mitkDataNode.h> #include <mitkPointSet.h> #include <mitkTrackingTool.h> #include <mitkTrackingTypes.h> #include <mitkSurface.h> #include <MitkIGTExports.h> namespace mitk { /**Documentation * \brief An object of this class represents a navigation tool in the view of the software. * A few informations like an identifier, a toolname, a surface and a itk spatial * object are stored in such an object. The classes NavigationToolReader and * are availiable to write/read tools to/from the harddisc. If you need a collection * of navigation tools the class NavigationToolStorage could be used. * * \ingroup IGT */ class MITKIGT_EXPORT NavigationTool : public itk::DataObject { public: mitkClassMacroItkParent(NavigationTool,itk::DataObject); itkFactorylessNewMacro(Self) itkCloneMacro(Self) enum NavigationToolType {Instrument, Fiducial, Skinmarker, Unknown}; //## getter and setter ## //NavigationToolType: itkGetConstMacro(Type,NavigationToolType); itkSetMacro(Type,NavigationToolType); //Identifier: itkGetConstMacro(Identifier,std::string); itkSetMacro(Identifier,std::string); //Datatreenode: itkGetConstMacro(DataNode,mitk::DataNode::Pointer); itkSetMacro(DataNode,mitk::DataNode::Pointer); //SpatialObject: itkGetConstMacro(SpatialObject,itk::SpatialObject<3>::Pointer); itkSetMacro(SpatialObject,itk::SpatialObject<3>::Pointer); //TrackingTool: itkGetConstMacro(TrackingTool,mitk::TrackingTool::Pointer); itkSetMacro(TrackingTool,mitk::TrackingTool::Pointer); //CalibrationFile: itkGetConstMacro(CalibrationFile,std::string); void SetCalibrationFile(const std::string filename); //Tool tip definition: itkGetConstMacro(ToolTipPosition,mitk::Point3D); itkSetMacro(ToolTipPosition,mitk::Point3D); itkGetConstMacro(ToolTipOrientation,mitk::Quaternion); itkSetMacro(ToolTipOrientation,mitk::Quaternion); //Tool Axis definition: //default tool axis is along x axis, the tool axis must be normalized itkGetConstMacro(ToolAxis, mitk::Point3D); itkSetMacro(ToolAxis, mitk::Point3D); /** @return Returns the tooltip as transform object. */ mitk::AffineTransform3D::Pointer GetToolTipTransform(); /** @return Returns true if a tooltip is set, false if not. */ bool IsToolTipSet(); //Tool Landmarks: /** For overview, here are descriptons of the two types of tool landmarks: * * tool calibration landmarks: These landmarks may be used clearly define the tools pose only by * using landmarks in the tool coordinate system. E.g., two landmarks for a 5DoF tool and three * landmarks for a 6DoF tool. These landmarks may be used, e.g., for a point based registration * of a tool from image space to tracking space. * * tool registration landmarks: These landmarks are designed for representing defined landmarks * on a tools surface. The number of these landmarks might exeed the number of tool calibration * landmarks for reasons of redundancy and averaging. They are used for, e.g., manually registering * the pose of a tool by visual markers in a CT scan. If you would use these landmarks to do a * point based registration from image space to tracking space later, you might overweight the * tool because of two many landmarks compared to other markers. * * @return Returns the tool registration landmarks which represent markers / special points on a * tool that can be used for registration. The landmarks should be given in tool coordinates. * If there are no landmarks defined for this tool the method returns an empty point set. */ itkGetConstMacro(ToolRegistrationLandmarks,mitk::PointSet::Pointer); /** @brief Sets the tool registration landmarks which represent markers / special points on a * tool that can be used for registration. The landmarks should be given in tool coordinates. */ itkSetMacro(ToolRegistrationLandmarks,mitk::PointSet::Pointer); /** @return Returns the tool calibration landmarks for calibration of the defined points in the * tool coordinate system, e.g. 2 landmarks for a 5DoF tool and 3 landmarks for a 6DoF tool. */ itkGetConstMacro(ToolCalibrationLandmarks,mitk::PointSet::Pointer); /** @brief Sets the tool calibration landmarks for calibration of defined points in the * tool coordinate system, e.g. 2 landmarks for a 5DoF tool and 3 landmarks for a 6DoF tool. */ itkSetMacro(ToolCalibrationLandmarks,mitk::PointSet::Pointer); //SerialNumber: itkGetConstMacro(SerialNumber,std::string); itkSetMacro(SerialNumber,std::string); //TrackingDeviceType: itkGetConstMacro(TrackingDeviceType,mitk::TrackingDeviceType); itkSetMacro(TrackingDeviceType,mitk::TrackingDeviceType); //ToolName (only getter): /** @return Returns the name of this navigation tool. Returns an empty string if there is * no name (for example because the data node has not been set yet). * * Note: There is no setter for the name, * because the name of the corresponding data node is used as tool name. So if you * want to modify the name of this navigation tool only get the data node and modify * its name. */ std::string GetToolName(); //ToolSurface (only getter): /** @return Returns the surface of this navigation tool. Returns NULL if there is * no surface (for example because the data node has not been set yet). * * Note: There is no setter for the surface, * because the surface is the data of the corresponding data node. So if you * want to set a new surface only get the data node and modify its data. */ mitk::Surface::Pointer GetToolSurface(); /** * \brief Graft the data and information from one NavigationTool to another. * * Copies the content of data into this object. * This is a convenience method to setup a second NavigationTool object with all the meta * information of another NavigationTool object. * Note that this method is different than just using two * SmartPointers to the same NavigationTool object since separate DataObjects are * still maintained. */ virtual void Graft(const DataObject *data) override; + + + /** + * Return all relevant information as string, e.g. to display all tool information + */ + std::string GetStringWithAllToolInformation() const; //####################### protected: NavigationTool(); ~NavigationTool(); //## data structure of a navigation tool object ## std::string m_Identifier; NavigationToolType m_Type; /** @brief This DataNode holds a toolname and a tool surface */ mitk::DataNode::Pointer m_DataNode; /** @brief This member variable holds a mathamatical description of the tool */ itk::SpatialObject<3>::Pointer m_SpatialObject; /** @brief This member variable holds a pointer to the corresponding tracking tool in the hardware. */ mitk::TrackingTool::Pointer m_TrackingTool; /** @brief The path to the calibration file of the tool. */ std::string m_CalibrationFile; /** @brief A unique serial number of the tool which is needed to identify the tool correctly. This is very important * in case of the NDI Aurora System. */ std::string m_SerialNumber; /** @brief This member holds the tracking device type of the tool. */ mitk::TrackingDeviceType m_TrackingDeviceType; /** @brief Holds landmarks for tool registration. */ mitk::PointSet::Pointer m_ToolRegistrationLandmarks; /** @brief Holds landmarks for calibration of the defined points in the tool coordinate system, * e.g. 2 landmarks for a 5DoF tool and 3 landmarks for a 6DoF tool. */ mitk::PointSet::Pointer m_ToolCalibrationLandmarks; /** @brief Holds the position of the tool tip. */ mitk::Point3D m_ToolTipPosition; /** @brief Holds the orientation of the tool tip. */ mitk::Quaternion m_ToolTipOrientation; /** @brief Holds the axis of the tool. */ mitk::Point3D m_ToolAxis; //################################################# }; } // namespace mitk #endif //NAVIGATIONTOOL diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.cpp b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.cpp index 59886b777f..78642b723e 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.cpp +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.cpp @@ -1,412 +1,419 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkNavigationToolManagementWidget.h" //mitk headers #include "mitkTrackingTypes.h" #include <mitkSurface.h> #include <mitkNavigationToolReader.h> #include <mitkNavigationToolWriter.h> #include <mitkNavigationToolStorage.h> #include <mitkNavigationToolStorageDeserializer.h> #include <mitkNavigationToolStorageSerializer.h> #include <QmitkIGTCommonHelper.h> //qt headers #include <qfiledialog.h> #include <qinputdialog.h> #include <qmessagebox.h> #include <qsettings.h> //poco headers #include <Poco/Path.h> const std::string QmitkNavigationToolManagementWidget::VIEW_ID = "org.mitk.views.navigationtoolmanagementwidget"; QmitkNavigationToolManagementWidget::QmitkNavigationToolManagementWidget(QWidget* parent, Qt::WindowFlags f) : QWidget(parent, f) { m_Controls = NULL; CreateQtPartControl(this); CreateConnections(); } QmitkNavigationToolManagementWidget::~QmitkNavigationToolManagementWidget() { } void QmitkNavigationToolManagementWidget::CreateQtPartControl(QWidget *parent) { if (!m_Controls) { // create GUI widgets m_Controls = new Ui::QmitkNavigationToolManagementWidgetControls; m_Controls->setupUi(parent); } //Disable StorageControls in the beginning, because there is no storage to edit DisableStorageControls(); } void QmitkNavigationToolManagementWidget::OnLoadTool() { if (m_NavigationToolStorage->isLocked()) { MessageBox("Storage is locked, cannot modify it. Maybe the tracking device which uses this storage is connected. If you want to modify the storage please disconnect the device first."); return; } mitk::NavigationToolReader::Pointer myReader = mitk::NavigationToolReader::New(); std::string filename = QFileDialog::getOpenFileName(NULL,tr("Add Navigation Tool"), QmitkIGTCommonHelper::GetLastFileLoadPath(), "*.IGTTool").toLatin1().data(); QmitkIGTCommonHelper::SetLastFileLoadPathByFileName(QString::fromStdString(filename)); if (filename == "") return; mitk::NavigationTool::Pointer readTool = myReader->DoRead(filename); if (readTool.IsNull()) MessageBox("Error: " + myReader->GetErrorMessage()); else { if (!m_NavigationToolStorage->AddTool(readTool)) { MessageBox("Error: Can't add tool!"); m_DataStorage->Remove(readTool->GetDataNode()); } UpdateToolTable(); } } void QmitkNavigationToolManagementWidget::OnSaveTool() { //if no item is selected, show error message: if (m_Controls->m_ToolList->currentItem() == NULL) { MessageBox("Error: Please select tool first!"); return; } mitk::NavigationToolWriter::Pointer myWriter = mitk::NavigationToolWriter::New(); std::string filename = QFileDialog::getSaveFileName(NULL,tr("Save Navigation Tool"), QmitkIGTCommonHelper::GetLastFileSavePath(), "*.IGTTool").toLatin1().data(); QmitkIGTCommonHelper::SetLastFileSavePathByFileName(QString::fromStdString(filename)); if (filename == "") return; std::string fileExt = Poco::Path(filename).getExtension(); if (fileExt == "") { filename.append(".IGTTool"); } if (!myWriter->DoWrite(filename,m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row()))) MessageBox("Error: "+ myWriter->GetErrorMessage()); } void QmitkNavigationToolManagementWidget::CreateConnections() { if (m_Controls) { //main widget page: connect((QObject*)(m_Controls->m_AddTool), SIGNAL(clicked()), this, SLOT(OnAddTool())); connect((QObject*)(m_Controls->m_DeleteTool), SIGNAL(clicked()), this, SLOT(OnDeleteTool())); connect((QObject*)(m_Controls->m_EditTool), SIGNAL(clicked()), this, SLOT(OnEditTool())); connect((QObject*)(m_Controls->m_MoveToolUp), SIGNAL(clicked()), this, SLOT(OnMoveToolUp())); connect((QObject*)(m_Controls->m_MoveToolDown), SIGNAL(clicked()), this, SLOT(OnMoveToolDown())); connect((QObject*)(m_Controls->m_LoadStorage), SIGNAL(clicked()), this, SLOT(OnLoadStorage())); connect((QObject*)(m_Controls->m_SaveStorage), SIGNAL(clicked()), this, SLOT(OnSaveStorage())); connect((QObject*)(m_Controls->m_LoadTool), SIGNAL(clicked()), this, SLOT(OnLoadTool())); connect((QObject*)(m_Controls->m_SaveTool), SIGNAL(clicked()), this, SLOT(OnSaveTool())); connect((QObject*)(m_Controls->m_CreateNewStorage), SIGNAL(clicked()), this, SLOT(OnCreateStorage())); + connect((QObject*)(m_Controls->m_ToolList), SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(OnToolSelected())); + //widget page "add tool": connect((QObject*)(m_Controls->m_ToolCreationWidget), SIGNAL(Canceled()), this, SLOT(OnAddToolCancel())); connect((QObject*)(m_Controls->m_ToolCreationWidget), SIGNAL(NavigationToolFinished()), this, SLOT(OnAddToolSave())); } } void QmitkNavigationToolManagementWidget::Initialize(mitk::DataStorage* dataStorage) { m_DataStorage = dataStorage; m_Controls->m_ToolCreationWidget->Initialize(m_DataStorage, "Tool0"); } void QmitkNavigationToolManagementWidget::LoadStorage(mitk::NavigationToolStorage::Pointer storageToLoad) { if (storageToLoad.IsNotNull()) { m_NavigationToolStorage = storageToLoad; m_Controls->m_StorageName->setText(m_NavigationToolStorage->GetName().c_str()); EnableStorageControls(); } else { m_NavigationToolStorage = NULL; DisableStorageControls(); } UpdateToolTable(); } //################################################################################## //############################## slots: main widget ################################ //################################################################################## void QmitkNavigationToolManagementWidget::OnMoveToolUp() { if (m_NavigationToolStorage.IsNotNull()) { int toolIndex = m_Controls->m_ToolList->currentIndex().row(); if (toolIndex >= 0) { mitk::NavigationTool::Pointer currentNavigationTool = m_NavigationToolStorage->GetTool(toolIndex); if (currentNavigationTool.IsNotNull()) { std::string currentIdentifier = currentNavigationTool->GetIdentifier(); int NewNumber = m_Controls->m_ToolList->currentIndex().row() - 1; if (NewNumber < 0) { MITK_WARN << "Cannot move tool up because it is on the top!"; } else { m_NavigationToolStorage->AssignToolNumber(currentIdentifier, NewNumber); } UpdateToolTable(); } } } } void QmitkNavigationToolManagementWidget::OnMoveToolDown() { if (m_NavigationToolStorage.IsNotNull()) { int toolIndex = m_Controls->m_ToolList->currentIndex().row(); if (toolIndex >= 0) { mitk::NavigationTool::Pointer currentNavigationTool = m_NavigationToolStorage->GetTool(toolIndex); if (currentNavigationTool.IsNotNull()) { std::string currentIdentifier = currentNavigationTool->GetIdentifier(); int NewNumber = m_Controls->m_ToolList->currentIndex().row() + 1; if (NewNumber >= m_NavigationToolStorage->GetToolCount()) { MITK_WARN << "Cannot move tool down because it is the last tool in this storage!"; } else { m_NavigationToolStorage->AssignToolNumber(currentIdentifier, NewNumber); } UpdateToolTable(); } } } } void QmitkNavigationToolManagementWidget::OnAddTool() { if (m_NavigationToolStorage->isLocked()) { MessageBox("Storage is locked, cannot modify it. Maybe the tracking device which uses this storage is connected. If you want to modify the storage please disconnect the device first."); return; } QString defaultIdentifier = "NavigationTool#" + QString::number(m_NavigationToolStorage->GetToolCount()); QString defaultName = "NavigationTool" + QString::number(m_NavigationToolStorage->GetToolCount()); m_Controls->m_ToolCreationWidget->Initialize(m_DataStorage, defaultIdentifier.toStdString(), defaultName.toStdString()); m_edit = false; m_Controls->m_MainWidgets->setCurrentIndex(1); } void QmitkNavigationToolManagementWidget::OnDeleteTool() { //first: some checks if (m_NavigationToolStorage->isLocked()) { MessageBox("Storage is locked, cannot modify it. Maybe the tracking device which uses this storage is connected. If you want to modify the storage please disconnect the device first."); return; } else if (m_Controls->m_ToolList->currentItem() == NULL) //if no item is selected, show error message: { MessageBox("Error: Please select tool first!"); return; } m_DataStorage->Remove(m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row())->GetDataNode()); m_NavigationToolStorage->DeleteTool(m_Controls->m_ToolList->currentIndex().row()); UpdateToolTable(); } void QmitkNavigationToolManagementWidget::OnEditTool() { if (m_NavigationToolStorage->isLocked()) { MessageBox("Storage is locked, cannot modify it. Maybe the tracking device which uses this storage is connected. If you want to modify the storage please disconnect the device first."); return; } else if (m_Controls->m_ToolList->currentItem() == NULL) //if no item is selected, show error message: { MessageBox("Error: Please select tool first!"); return; } mitk::NavigationTool::Pointer selectedTool = m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row()); m_Controls->m_ToolCreationWidget->SetDefaultData(selectedTool); m_NavigationToolStorage->SetName("test"); m_edit = true; m_Controls->m_MainWidgets->setCurrentIndex(1); } void QmitkNavigationToolManagementWidget::OnCreateStorage() { QString storageName = QInputDialog::getText(NULL, "Storage Name", "Name of the new tool storage:"); if (storageName.isNull()) return; m_NavigationToolStorage = mitk::NavigationToolStorage::New(this->m_DataStorage); m_NavigationToolStorage->SetName(storageName.toStdString()); m_Controls->m_StorageName->setText(m_NavigationToolStorage->GetName().c_str()); EnableStorageControls(); emit NewStorageAdded(m_NavigationToolStorage, storageName.toStdString()); } void QmitkNavigationToolManagementWidget::OnLoadStorage() { mitk::NavigationToolStorageDeserializer::Pointer myDeserializer = mitk::NavigationToolStorageDeserializer::New(m_DataStorage); std::string filename = QFileDialog::getOpenFileName(NULL, tr("Open Navigation Tool Storage"), "/", tr("IGT Tool Storage (*.IGTToolStorage)")).toStdString(); if (filename == "") return; try { mitk::NavigationToolStorageDeserializer::Pointer myDeserializer = mitk::NavigationToolStorageDeserializer::New(m_DataStorage); std::string filename = QFileDialog::getOpenFileName(NULL, tr("Open Navigation Tool Storage"), QmitkIGTCommonHelper::GetLastFileLoadPath(), tr("IGT Tool Storage (*.IGTToolStorage)")).toStdString(); if (filename == "") return; QmitkIGTCommonHelper::SetLastFileLoadPathByFileName(QString::fromStdString(filename)); try { mitk::NavigationToolStorage::Pointer tempStorage = myDeserializer->Deserialize(filename); if (tempStorage.IsNull()) MessageBox("Error" + myDeserializer->GetErrorMessage()); else { Poco::Path myPath = Poco::Path(filename.c_str()); tempStorage->SetName(myPath.getFileName()); //set the filename as name for the storage, so the user can identify it this->LoadStorage(tempStorage); emit NewStorageAdded(m_NavigationToolStorage,myPath.getFileName()); } } catch (const mitk::Exception& exception) { MessageBox(exception.GetDescription()); } } catch (const mitk::Exception& exception) { MessageBox(exception.GetDescription()); } } void QmitkNavigationToolManagementWidget::OnSaveStorage() { QFileDialog *fileDialog = new QFileDialog; fileDialog->setDefaultSuffix("IGTToolStorage"); QString suffix = "IGT Tool Storage (*.IGTToolStorage)"; QString filename = fileDialog->getSaveFileName(NULL, tr("Save Navigation Tool Storage"), QmitkIGTCommonHelper::GetLastFileSavePath(), suffix, &suffix); if (filename.isEmpty()) return; //canceled by the user // check file suffix QFileInfo file(filename); if(file.suffix().isEmpty()) filename += ".IGTToolStorage"; //serialize tool storage mitk::NavigationToolStorageSerializer::Pointer mySerializer = mitk::NavigationToolStorageSerializer::New(); if (!mySerializer->Serialize(filename.toStdString(), m_NavigationToolStorage)) { MessageBox("Error: " + mySerializer->GetErrorMessage()); return; QmitkIGTCommonHelper::SetLastFileSavePath(file.absolutePath()); } Poco::Path myPath = Poco::Path(filename.toStdString()); m_Controls->m_StorageName->setText(QString::fromStdString(myPath.getFileName())); } //################################################################################## //############################## slots: add tool widget ############################ //################################################################################## void QmitkNavigationToolManagementWidget::OnAddToolSave() { mitk::NavigationTool::Pointer newTool = m_Controls->m_ToolCreationWidget->GetCreatedTool(); if (m_edit) //here we edit a existing tool { mitk::NavigationTool::Pointer editedTool = m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row()); editedTool->Graft(newTool); //Keep this line, 'cause otherwise, the NavigationToolStorage wouldn't notice, that the toolStorage changed. m_NavigationToolStorage->UpdateMicroservice(); } else //here we create a new tool { m_NavigationToolStorage->AddTool(newTool); } UpdateToolTable(); m_Controls->m_MainWidgets->setCurrentIndex(0); } void QmitkNavigationToolManagementWidget::OnAddToolCancel() { m_Controls->m_MainWidgets->setCurrentIndex(0); } +void QmitkNavigationToolManagementWidget::OnToolSelected() +{ + m_Controls->m_ToolInformation->setText(QString(m_NavigationToolStorage->GetTool(m_Controls->m_ToolList->currentIndex().row())->GetStringWithAllToolInformation().c_str())); +} + //################################################################################## //############################## private help methods ############################## //################################################################################## void QmitkNavigationToolManagementWidget::UpdateToolTable() { m_Controls->m_ToolList->clear(); if (m_NavigationToolStorage.IsNull()) return; for (int i = 0; i < m_NavigationToolStorage->GetToolCount(); i++) { QString currentTool = "Tool" + QString::number(i) + ": " + QString(m_NavigationToolStorage->GetTool(i)->GetDataNode()->GetName().c_str()) + " "; currentTool += "(" + QString::fromStdString(m_NavigationToolStorage->GetTool(i)->GetTrackingDeviceType()) + "/"; switch (m_NavigationToolStorage->GetTool(i)->GetType()) { case mitk::NavigationTool::Instrument: currentTool += "Instrument)"; break; case mitk::NavigationTool::Fiducial: currentTool += "Fiducial)"; break; case mitk::NavigationTool::Skinmarker: currentTool += "Skinmarker)"; break; default: currentTool += "Unknown)"; } m_Controls->m_ToolList->addItem(currentTool); } } void QmitkNavigationToolManagementWidget::MessageBox(std::string s) { QMessageBox msgBox; msgBox.setText(s.c_str()); msgBox.exec(); } void QmitkNavigationToolManagementWidget::DisableStorageControls() { m_Controls->m_StorageName->setText("<none>"); m_Controls->m_AddTool->setEnabled(false); m_Controls->m_LoadTool->setEnabled(false); m_Controls->m_MoveToolUp->setEnabled(false); m_Controls->m_MoveToolDown->setEnabled(false); m_Controls->m_selectedLabel->setEnabled(false); m_Controls->m_DeleteTool->setEnabled(false); m_Controls->m_EditTool->setEnabled(false); m_Controls->m_SaveTool->setEnabled(false); m_Controls->m_ToolList->setEnabled(false); m_Controls->m_SaveStorage->setEnabled(false); m_Controls->m_ToolLabel->setEnabled(false); } void QmitkNavigationToolManagementWidget::EnableStorageControls() { m_Controls->m_AddTool->setEnabled(true); m_Controls->m_LoadTool->setEnabled(true); m_Controls->m_MoveToolUp->setEnabled(true); m_Controls->m_MoveToolDown->setEnabled(true); m_Controls->m_selectedLabel->setEnabled(true); m_Controls->m_DeleteTool->setEnabled(true); m_Controls->m_EditTool->setEnabled(true); m_Controls->m_SaveTool->setEnabled(true); m_Controls->m_ToolList->setEnabled(true); m_Controls->m_SaveStorage->setEnabled(true); m_Controls->m_ToolLabel->setEnabled(true); } \ No newline at end of file diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.h b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.h index afe0874bcb..f7df781dab 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.h +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidget.h @@ -1,112 +1,113 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef QMITKNAVIGATIONTOOLMANAGEMENTWIDGET_H #define QMITKNAVIGATIONTOOLMANAGEMENTWIDGET_H //QT headers #include <QWidget> //mitk headers #include "MitkIGTUIExports.h" #include "mitkNavigationTool.h" #include <mitkNavigationToolStorage.h> //ui header #include "ui_QmitkNavigationToolManagementWidgetControls.h" /** Documentation: * \brief An object of this class offers an UI to manage NavigationTools and * NavigationToolStorages. This means a user may create, save and load * single NavigationTools and/or NavigationToolStorages with this widget. * * Be sure to call the Initialize-methode before you start the widget * otherwise some errors might occure. * * \ingroup IGTUI */ class MITKIGTUI_EXPORT QmitkNavigationToolManagementWidget : public QWidget { Q_OBJECT public: static const std::string VIEW_ID; /** Initializes the widget. Has to be called before any action, otherwise errors might occur. */ void Initialize(mitk::DataStorage* dataStorage); /** Loads a storage to the widget. The old storage storage is dropped, so be careful, if the * storage is not saved somewhere else it might be lost. You might want to ask the user if he * wants to save the storage to the harddisk before calling this method. * @param storageToLoad This storage will be loaded and might be modified by the user. */ void LoadStorage(mitk::NavigationToolStorage::Pointer storageToLoad); QmitkNavigationToolManagementWidget(QWidget* parent = 0, Qt::WindowFlags f = 0); ~QmitkNavigationToolManagementWidget(); signals: /** This signal is emmited if a new storage was added by the widget itself, e.g. because * a storage was loaded from the harddisk. * @param newStorage Holds the new storage which was added. * @param storageName Name of the new storage (e.g. filename) */ void NewStorageAdded(mitk::NavigationToolStorage::Pointer newStorage, std::string storageName); protected slots: //main widget page: void OnAddTool(); void OnDeleteTool(); void OnEditTool(); void OnLoadTool(); void OnSaveTool(); void OnMoveToolUp(); void OnMoveToolDown(); void OnLoadStorage(); void OnSaveStorage(); void OnCreateStorage(); + void OnToolSelected(); //widget page "add tool": void OnAddToolCancel(); void OnAddToolSave(); protected: /// \brief Creation of the connections virtual void CreateConnections(); virtual void CreateQtPartControl(QWidget *parent); Ui::QmitkNavigationToolManagementWidgetControls* m_Controls; /** @brief holds the DataStorage */ mitk::DataStorage* m_DataStorage; /** @brief holds the NavigationToolStorage we are working with. */ mitk::NavigationToolStorage::Pointer m_NavigationToolStorage; /** @brief shows if we are in edit mode, if not we create new navigation tool objects. */ bool m_edit; //############## private help methods ####################### void MessageBox(std::string s); void UpdateToolTable(); void DisableStorageControls(); void EnableStorageControls(); }; #endif diff --git a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidgetControls.ui b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidgetControls.ui index a80055349a..6d9bd14ec7 100644 --- a/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidgetControls.ui +++ b/Modules/IGTUI/Qmitk/QmitkNavigationToolManagementWidgetControls.ui @@ -1,308 +1,315 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>QmitkNavigationToolManagementWidgetControls</class> <widget class="QWidget" name="QmitkNavigationToolManagementWidgetControls"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>443</width> <height>781</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QVBoxLayout" name="verticalLayout_4"> <item> <layout class="QHBoxLayout" name="horizontalLayout_3"> <item> <spacer name="horizontalSpacer_3"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QLabel" name="label_2"> <property name="text"> <string>Whole Storage:</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_CreateNewStorage"> <property name="text"> <string>Create New</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_LoadStorage"> <property name="text"> <string>Load</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_SaveStorage"> <property name="text"> <string>Save</string> </property> </widget> </item> </layout> </item> <item> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </item> <item> <widget class="QStackedWidget" name="m_MainWidgets"> <property name="currentIndex"> <number>0</number> </property> <widget class="QWidget" name="main_page"> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QLabel" name="label_10"> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Storage Name:</span></p></body></html></string> </property> </widget> </item> <item> <widget class="QLabel" name="m_StorageName"> <property name="text"> <string><none></string> </property> </widget> </item> <item> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_4"> <item> <widget class="QLabel" name="m_ToolLabel"> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Tools:</span></p></body></html></string> </property> </widget> </item> <item> <spacer name="horizontalSpacer_4"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <widget class="QListWidget" name="m_ToolList"/> </item> <item> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QPushButton" name="m_AddTool"> <property name="maximumSize"> <size> <width>50</width> <height>16777215</height> </size> </property> <property name="text"> <string>Add</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_LoadTool"> <property name="maximumSize"> <size> <width>50</width> <height>16777215</height> </size> </property> <property name="text"> <string>Load</string> </property> </widget> </item> <item> <widget class="QLabel" name="m_selectedLabel"> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Selected:</span></p></body></html></string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_MoveToolUp"> <property name="maximumSize"> <size> <width>50</width> <height>16777215</height> </size> </property> <property name="text"> <string>Up</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_MoveToolDown"> <property name="maximumSize"> <size> <width>50</width> <height>16777215</height> </size> </property> <property name="text"> <string>Down</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_DeleteTool"> <property name="maximumSize"> <size> <width>50</width> <height>16777215</height> </size> </property> <property name="text"> <string>Delete</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_EditTool"> <property name="maximumSize"> <size> <width>50</width> <height>16777215</height> </size> </property> <property name="text"> <string>Edit</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_SaveTool"> <property name="maximumSize"> <size> <width>50</width> <height>16777215</height> </size> </property> <property name="text"> <string>Save</string> </property> </widget> </item> <item> <spacer name="verticalSpacer_2"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> </layout> </item> </layout> </item> + <item> + <widget class="QLabel" name="m_ToolInformation"> + <property name="text"> + <string/> + </property> + </widget> + </item> </layout> </widget> <widget class="QWidget" name="new_tool_page"> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <widget class="QmitkNavigationToolCreationWidget" name="m_ToolCreationWidget" native="true"> <property name="minimumSize"> <size> <width>0</width> <height>150</height> </size> </property> </widget> </item> <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> </layout> </widget> </widget> </item> </layout> </widget> <customwidgets> <customwidget> <class>QmitkNavigationToolCreationWidget</class> <extends>QWidget</extends> <header>QmitkNavigationToolCreationWidget.h</header> <container>1</container> </customwidget> </customwidgets> <resources/> <connections/> </ui> diff --git a/Plugins/org.mitk.gui.qt.igt.app.echotrack/src/internal/UltrasoundCalibrationControls.ui b/Plugins/org.mitk.gui.qt.igt.app.echotrack/src/internal/UltrasoundCalibrationControls.ui index 55ea3f8943..59289dd670 100644 --- a/Plugins/org.mitk.gui.qt.igt.app.echotrack/src/internal/UltrasoundCalibrationControls.ui +++ b/Plugins/org.mitk.gui.qt.igt.app.echotrack/src/internal/UltrasoundCalibrationControls.ui @@ -1,1162 +1,1163 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>UltrasoundCalibrationControls</class> <widget class="QWidget" name="UltrasoundCalibrationControls"> <property name="enabled"> <bool>true</bool> </property> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>374</width> <height>923</height> </rect> </property> <property name="minimumSize"> <size> <width>0</width> <height>0</height> </size> </property> <property name="windowTitle"> <string>QmitkTemplate</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QToolBox" name="m_ToolBox"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="currentIndex"> <number>1</number> </property> <widget class="QWidget" name="m_Config"> <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>356</width> - <height>824</height> + <width>200</width> + <height>57</height> </rect> </property> <attribute name="label"> <string>Config</string> </attribute> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <widget class="QmitkUSNavigationStepCombinedModality" name="m_CombinedModalityManagerWidget" native="true"/> </item> <item> <widget class="QPushButton" name="m_StartCalibrationButton"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> <string>Start Calibration for Selected Device</string> </property> </widget> </item> </layout> </widget> <widget class="QWidget" name="m_SpatialCalibration"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>356</width> <height>824</height> </rect> </property> <attribute name="label"> <string>Spatial Calibration</string> </attribute> <widget class="QTabWidget" name="tabWidget"> <property name="geometry"> <rect> <x>0</x> <y>10</y> <width>351</width> <height>831</height> </rect> </property> <property name="currentIndex"> - <number>2</number> + <number>1</number> </property> <widget class="QWidget" name="m_Spacing"> <attribute name="title"> <string>Spacing</string> </attribute> <widget class="QWidget" name="gridLayoutWidget"> <property name="geometry"> <rect> <x>10</x> <y>150</y> <width>281</width> <height>41</height> </rect> </property> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="2"> <widget class="QPushButton" name="m_SpacingAddPoint"> <property name="text"> <string>Add Point</string> </property> </widget> </item> <item row="0" column="1"> <spacer name="horizontalSpacer_5"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="0" column="0"> <widget class="QPushButton" name="m_SpacingBtnFreeze"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> <string>Freeze</string> </property> </widget> </item> </layout> </widget> <widget class="QLabel" name="label_49"> <property name="geometry"> <rect> <x>10</x> <y>10</y> <width>281</width> <height>131</height> </rect> </property> <property name="text"> <string><html><head/><body><p>1. Freeze the US-Image.</p><p>2. Mark two points in the US-Image of which you know <br/>they are exactly 30mm apart in horizontal direction.</p><p>3. Marktwo more points in the US-Image of which you <br/>know they are exactly 20mm apart vertical direction.</p><p>4. Now you can click the &quot;Calculate Spacing&quot;-Button. <br/>The spacing is calculated and applied to the US-Image.</p></body></html></string> </property> <property name="alignment"> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> </property> </widget> <widget class="QListWidget" name="m_SpacingPointsList"> <property name="geometry"> <rect> <x>10</x> <y>200</y> <width>281</width> <height>192</height> </rect> </property> </widget> <widget class="QPushButton" name="m_CalculateSpacing"> <property name="geometry"> <rect> <x>20</x> <y>400</y> <width>261</width> <height>23</height> </rect> </property> <property name="text"> <string>Calculate Spacing</string> </property> </widget> </widget> <widget class="QWidget" name="m_PointBased"> <attribute name="title"> <string>Point Based</string> </attribute> <widget class="QLabel" name="label"> <property name="geometry"> <rect> <x>10</x> <y>10</y> <width>221</width> <height>16</height> </rect> </property> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600; text-decoration: underline;">Step 1: Collect Points</span></p></body></html></string> </property> </widget> <widget class="QLabel" name="label_5"> <property name="geometry"> <rect> <x>10</x> <y>30</y> - <width>231</width> + <width>261</width> <height>91</height> </rect> </property> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Slowly move a tracking tool into the image plane of the ultrasound. As soon as it becomes visible, click &quot;freeze&quot; and mark the point on the screen. Do this with as many points as necessary, then click calibrate to perform calibration.</span></p></body></html></string> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Slowly move a tracking tool into the image plane of the ultrasound. As soon as it becomes visible, click &quot;freeze&quot; and mark the point on the screen by moving the Crosshair to the pont in the US image (best: click in 2D Axial view).</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Do this with as many points as necessary, then click calibrate to perform calibration.</p></body></html></string> </property> <property name="wordWrap"> <bool>true</bool> </property> </widget> <widget class="QLabel" name="label_6"> <property name="geometry"> <rect> <x>10</x> <y>120</y> <width>291</width> <height>31</height> </rect> </property> <property name="font"> <font> <weight>75</weight> <bold>true</bold> </font> </property> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Tracking Status:</span></p></body></html></string> </property> </widget> <widget class="QPushButton" name="m_CalibBtnSaveCalibration"> <property name="enabled"> <bool>false</bool> </property> <property name="geometry"> <rect> <x>10</x> <y>620</y> <width>301</width> <height>23</height> </rect> </property> <property name="text"> <string>Save Calibration</string> </property> </widget> <widget class="Line" name="line_2"> <property name="geometry"> <rect> <x>10</x> <y>550</y> <width>291</width> <height>16</height> </rect> </property> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> <widget class="QListWidget" name="m_CalibPointList"> <property name="geometry"> <rect> <x>10</x> <y>200</y> <width>301</width> <height>225</height> </rect> </property> </widget> <widget class="QLabel" name="label_2"> <property name="geometry"> <rect> <x>10</x> <y>450</y> <width>571</width> <height>16</height> </rect> </property> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600; text-decoration: underline;">Step 2: Calibrate (perform landmark transformation)</span></p></body></html></string> </property> </widget> <widget class="QWidget" name="layoutWidget"> <property name="geometry"> <rect> <x>10</x> <y>160</y> <width>301</width> <height>25</height> </rect> </property> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QPushButton" name="m_CalibBtnFreeze"> <property name="text"> <string>Freeze</string> </property> </widget> </item> <item> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="m_CalibBtnAddPoint"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> <string>Add Point</string> </property> </widget> </item> </layout> </widget> <widget class="Line" name="line"> <property name="geometry"> <rect> <x>10</x> <y>430</y> <width>301</width> <height>21</height> </rect> </property> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> <widget class="QPushButton" name="m_CalibBtnCalibrate"> <property name="geometry"> <rect> <x>10</x> <y>510</y> <width>301</width> <height>23</height> </rect> </property> <property name="text"> <string>Calibrate</string> </property> </widget> <widget class="QCheckBox" name="m_saveAdditionalCalibrationLog"> <property name="geometry"> <rect> <x>10</x> <y>590</y> <width>584</width> <height>17</height> </rect> </property> <property name="text"> <string>Save additional logging information (MITK scene, etc.)</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> <widget class="QCheckBox" name="m_ScaleTransform"> <property name="geometry"> <rect> <x>10</x> <y>480</y> <width>584</width> <height>17</height> </rect> </property> <property name="text"> <string>Activate Scaling during Calibration Transform</string> </property> </widget> <widget class="QLabel" name="label_4"> <property name="geometry"> <rect> <x>10</x> <y>570</y> <width>291</width> <height>16</height> </rect> </property> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600; text-decoration: underline;">Step 3: Save calibration to hard disc</span></p></body></html></string> </property> </widget> <widget class="QPushButton" name="m_CalibBtnStopCalibration"> <property name="geometry"> <rect> <x>10</x> <y>680</y> <width>301</width> <height>23</height> </rect> </property> <property name="text"> <string>Stop Calibration Process</string> </property> </widget> <widget class="QPushButton" name="m_CalibBtnRestartCalibration"> <property name="geometry"> <rect> <x>10</x> <y>710</y> <width>301</width> <height>23</height> </rect> </property> <property name="text"> <string>Restart Current Calibration</string> </property> </widget> <widget class="QmitkToolTrackingStatusWidget" name="m_CalibTrackingStatus" native="true"> <property name="geometry"> <rect> <x>100</x> <y>120</y> <width>211</width> <height>31</height> </rect> </property> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>40</verstretch> </sizepolicy> </property> </widget> <widget class="Line" name="line_3"> <property name="geometry"> <rect> <x>10</x> <y>650</y> <width>301</width> <height>20</height> </rect> </property> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> </widget> </widget> <widget class="QWidget" name="m_Plus"> <attribute name="title"> <string>PLUS Connection</string> </attribute> <widget class="QWidget" name="verticalLayoutWidget"> <property name="geometry"> <rect> <x>10</x> <y>10</y> <width>301</width> <height>241</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout_8"> <item> <widget class="QLabel" name="label_19"> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; text-decoration: underline;">Step 1: Calibrate using fCal</span></p></body></html></string> </property> <property name="alignment"> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> </property> </widget> </item> <item> <widget class="QLabel" name="label_22"> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1. Setup the Connection to PLUS</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2. Start fCal with the EchoTrackCalibration Config file</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3. Connect fcal to MITK, once it connected successfully you can click the &quot;Start Streaming&quot; Button below</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">4. Now follow the steps in fCal and don't forget to save the Calibration in the end</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">5. Finish fCal</p></body></html></string> </property> <property name="wordWrap"> <bool>true</bool> </property> </widget> </item> <item> <widget class="QLabel" name="label_23"> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; text-decoration: underline;">Step 2: Get the calibration back from PLUS</span></p></body></html></string> </property> </widget> </item> <item> <widget class="QLabel" name="label_24"> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1. Start a PLUS Server with the configfile you saved in the final step of fCal</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2. Once the Server connected to MITK click the &quot;Start Streaming&quot; Button below</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3. Now Click the &quot;Get Calibration from PLUS&quot;Button below</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">4. You can now save the calibration</p></body></html></string> </property> <property name="wordWrap"> <bool>true</bool> </property> </widget> </item> </layout> </widget> <widget class="QGroupBox" name="groupBox_3"> <property name="geometry"> <rect> <x>10</x> <y>270</y> <width>301</width> <height>281</height> </rect> </property> <property name="title"> <string/> </property> <widget class="QPushButton" name="m_StartStreaming"> <property name="enabled"> <bool>false</bool> </property> <property name="geometry"> <rect> <x>0</x> <y>90</y> <width>299</width> <height>23</height> </rect> </property> <property name="text"> <string>Start Streaming</string> </property> </widget> <widget class="QPushButton" name="m_GetCalibrationFromPLUS"> <property name="enabled"> <bool>false</bool> </property> <property name="geometry"> <rect> <x>0</x> <y>140</y> <width>299</width> <height>23</height> </rect> </property> <property name="text"> <string>Get Calibration from PLUS</string> </property> </widget> <widget class="QPushButton" name="m_SavePlusCalibration"> <property name="enabled"> <bool>false</bool> </property> <property name="geometry"> <rect> <x>0</x> <y>180</y> <width>299</width> <height>23</height> </rect> </property> <property name="text"> <string>Save PLUS Calibration</string> </property> </widget> <widget class="QPushButton" name="m_StopPlusCalibration"> <property name="geometry"> <rect> <x>0</x> <y>220</y> <width>299</width> <height>23</height> </rect> </property> <property name="text"> <string>Stop Calibration with PLUS</string> </property> </widget> <widget class="QLabel" name="m_ConnectionStatus"> <property name="enabled"> <bool>false</bool> </property> <property name="geometry"> <rect> <x>0</x> <y>60</y> <width>291</width> <height>21</height> </rect> </property> <property name="text"> <string/> </property> </widget> <widget class="QLabel" name="m_GotCalibrationLabel"> <property name="geometry"> <rect> <x>0</x> <y>120</y> <width>281</width> <height>16</height> </rect> </property> <property name="text"> <string/> </property> </widget> <widget class="QPushButton" name="m_StartPlusCalibrationButton"> <property name="enabled"> <bool>false</bool> </property> <property name="geometry"> <rect> <x>0</x> <y>30</y> <width>301</width> <height>23</height> </rect> </property> <property name="text"> <string>Setup PLUS Connection</string> </property> </widget> <widget class="QLabel" name="m_SetupStatus"> <property name="enabled"> <bool>false</bool> </property> <property name="geometry"> <rect> <x>0</x> <y>10</y> <width>291</width> <height>21</height> </rect> </property> <property name="text"> <string/> </property> </widget> </widget> </widget> </widget> </widget> <widget class="QWidget" name="m_Evaluation"> <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>356</width> - <height>824</height> + <width>100</width> + <height>30</height> </rect> </property> <attribute name="label"> <string>Evaluation</string> </attribute> <widget class="QTabWidget" name="tabWidget_2"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>311</width> <height>821</height> </rect> </property> <property name="currentIndex"> <number>1</number> </property> <widget class="QWidget" name="m_PointBasedEval"> <attribute name="title"> <string>Point Based Evaluation</string> </attribute> <widget class="QLabel" name="label_9"> <property name="geometry"> <rect> <x>10</x> <y>130</y> <width>301</width> <height>16</height> </rect> </property> <property name="text"> <string>Mark the visible needle tip with the crosshair</string> </property> </widget> <widget class="QLabel" name="label_7"> <property name="geometry"> <rect> <x>10</x> <y>10</y> <width>301</width> <height>31</height> </rect> </property> <property name="text"> <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Bring the needle into the tracking volume, so the projection can be calculated</span></p></body></html></string> </property> <property name="wordWrap"> <bool>true</bool> </property> </widget> <widget class="QLabel" name="label_8"> <property name="geometry"> <rect> <x>10</x> <y>70</y> <width>291</width> <height>31</height> </rect> </property> <property name="text"> <string>Push the needle forward until it becomes visible in the Image</string> </property> <property name="wordWrap"> <bool>true</bool> </property> </widget> <widget class="QPushButton" name="m_EvalBtnStep3"> <property name="geometry"> <rect> <x>10</x> <y>150</y> <width>291</width> <height>23</height> </rect> </property> <property name="text"> <string>Step 3: Add Target Points</string> </property> </widget> <widget class="QPushButton" name="m_EvalBtnStep2"> <property name="geometry"> <rect> <x>10</x> <y>100</y> <width>291</width> <height>23</height> </rect> </property> <property name="text"> <string>Step 2: Freeze Image</string> </property> </widget> <widget class="QGroupBox" name="groupBox"> <property name="geometry"> <rect> <x>10</x> <y>440</y> <width>291</width> <height>108</height> </rect> </property> <property name="title"> <string>When done, save results</string> </property> <layout class="QGridLayout" name="gridLayout_2"> <item row="2" column="2"> <widget class="QPushButton" name="m_BtnReset"> <property name="text"> <string>Run Next Round</string> </property> </widget> </item> <item row="0" column="1" colspan="2"> <widget class="QLineEdit" name="m_EvalFilePath"/> </item> <item row="1" column="0"> <widget class="QLabel" name="label_11"> <property name="text"> <string>Prefix:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> </widget> </item> <item row="2" column="1"> <widget class="QPushButton" name="m_EvalBtnSave"> <property name="text"> <string>Save Results</string> </property> </widget> </item> <item row="0" column="0"> <widget class="QLabel" name="label_10"> <property name="text"> <string>Path:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> </widget> </item> <item row="1" column="1" colspan="2"> <widget class="QLineEdit" name="m_EvalFilePrefix"/> </item> </layout> </widget> <widget class="QGroupBox" name="groupBox_2"> <property name="geometry"> <rect> <x>10</x> <y>180</y> <width>291</width> <height>247</height> </rect> </property> <property name="title"> <string>Control</string> </property> <layout class="QFormLayout" name="formLayout"> <property name="fieldGrowthPolicy"> <enum>QFormLayout::AllNonFixedFieldsGrow</enum> </property> <item row="0" column="0"> <widget class="QLabel" name="label_13"> <property name="text"> <string>Tracking Status:</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QmitkToolTrackingStatusWidget" name="m_EvalTrackingStatus" native="true"/> </item> <item row="1" column="0"> <widget class="QLabel" name="label_14"> <property name="text"> <string># Projection Points:</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="label_12"> <property name="text"> <string># Target Points:</string> </property> </widget> </item> <item row="2" column="1"> <widget class="QLabel" name="m_EvalLblNumTargetPoints"> <property name="text"> <string>0</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="label_15"> <property name="text"> <string>Evaluation TRE:</string> </property> </widget> </item> <item row="4" column="1"> <widget class="QLabel" name="m_EvalLblEvaluationFRE"> <property name="text"> <string>0</string> </property> </widget> </item> <item row="5" column="0"> <widget class="QLabel" name="label_17"> <property name="text"> <string>Projection TRE:</string> </property> </widget> </item> <item row="5" column="1"> <widget class="QLabel" name="m_EvalLblProjectionFRE"> <property name="text"> <string>0</string> </property> </widget> </item> <item row="6" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>Calibration FRE:</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QLabel" name="m_EvalLblNumProjectionPoints"> <property name="text"> <string>0</string> </property> </widget> </item> <item row="6" column="1"> <widget class="QLabel" name="m_EvalLblCalibrationFRE"> <property name="text"> <string>0</string> </property> </widget> </item> </layout> </widget> <widget class="QPushButton" name="m_EvalBtnStep1"> <property name="geometry"> <rect> <x>10</x> <y>50</y> <width>291</width> <height>23</height> </rect> </property> <property name="text"> <string>Step 1: Save Needle Projection</string> </property> </widget> </widget> <widget class="QWidget" name="m_ReferenceDevice"> <attribute name="title"> <string>Reference Device</string> </attribute> <widget class="QLabel" name="label_21"> <property name="geometry"> <rect> <x>10</x> <y>10</y> <width>281</width> <height>16</height> </rect> </property> <property name="text"> <string>Choose pointer:</string> </property> </widget> <widget class="QmitkNavigationDataSourceSelectionWidget" name="m_VerificationPointerChoser" native="true"> <property name="geometry"> <rect> <x>10</x> <y>30</y> <width>281</width> <height>50</height> </rect> </property> <property name="minimumSize"> <size> <width>0</width> <height>50</height> </size> </property> </widget> <widget class="QToolBox" name="toolBox"> <property name="geometry"> <rect> <x>10</x> <y>90</y> <width>281</width> <height>366</height> </rect> </property> <property name="currentIndex"> <number>1</number> </property> <widget class="QWidget" name="page"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>179</width> <height>82</height> </rect> </property> <attribute name="label"> <string>Create Reference</string> </attribute> <layout class="QVBoxLayout" name="verticalLayout_6"> <item> <widget class="QLabel" name="label_16"> <property name="text"> <string>Current reference points:</string> </property> </widget> </item> <item> <widget class="QmitkPointListWidget" name="m_ReferencePointsPointListWidget" native="true"/> </item> <item> <widget class="QPushButton" name="m_AddReferencePoints"> <property name="text"> <string>Add Current Pointer Tip Position</string> </property> </widget> </item> <item> <spacer name="verticalSpacer_3"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>111</height> </size> </property> </spacer> </item> </layout> </widget> <widget class="QWidget" name="page_2"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>281</width> <height>312</height> </rect> </property> <attribute name="label"> <string>Quick Verification</string> </attribute> <layout class="QVBoxLayout" name="verticalLayout_7"> <item> <widget class="QmitkDataStorageComboBox" name="m_ReferencePointsComboBox"/> </item> <item> <widget class="QPushButton" name="m_StartVerification"> <property name="text"> <string>Start Verification</string> </property> </widget> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <widget class="QLabel" name="label_18"> <property name="text"> <string>Current Point:</string> </property> </widget> </item> <item> <spacer name="horizontalSpacer_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QLabel" name="m_CurrentPointLabel"> <property name="text"> <string><none></string> </property> </widget> </item> </layout> </item> <item> <widget class="QPushButton" name="m_AddCurrentPointerTipForVerification"> <property name="text"> <string>Add current pointer tip</string> </property> </widget> </item> <item> <widget class="QLabel" name="label_20"> <property name="text"> <string>Result:</string> </property> </widget> </item> <item> <widget class="QTextEdit" name="m_ResultsTextEdit"/> </item> </layout> </widget> </widget> </widget> </widget> </widget> </widget> </item> </layout> </widget> <layoutdefault spacing="6" margin="11"/> <customwidgets> <customwidget> <class>QmitkToolTrackingStatusWidget</class> <extends>QWidget</extends> <header location="global">QmitkToolTrackingStatusWidget.h</header> <container>1</container> </customwidget> <customwidget> <class>QmitkUSNavigationStepCombinedModality</class> <extends>QWidget</extends> <header>src/internal/NavigationStepWidgets/QmitkUSNavigationStepCombinedModality.h</header> <container>1</container> </customwidget> <customwidget> <class>QmitkPointListWidget</class> <extends>QWidget</extends> <header>QmitkPointListWidget.h</header> <container>1</container> </customwidget> <customwidget> <class>QmitkDataStorageComboBox</class> <extends>QComboBox</extends> <header>QmitkDataStorageComboBox.h</header> </customwidget> <customwidget> <class>QmitkNavigationDataSourceSelectionWidget</class> <extends>QWidget</extends> <header>QmitkNavigationDataSourceSelectionWidget.h</header> <container>1</container> </customwidget> </customwidgets> <resources/> <connections/> <slots> <slot>OnStartCalibrationProcess()</slot> <slot>OnReset()</slot> <slot>OnStopCalibrationProcess()</slot> </slots> </ui>