diff --git a/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.cpp b/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.cpp new file mode 100644 index 0000000000..0ab55d2ea3 --- /dev/null +++ b/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.cpp @@ -0,0 +1,160 @@ +/*========================================================================= + +Program: Medical Imaging & Interaction Toolkit +Language: C++ +Date: $Date: 2011-01-18 13:22:38 +0100 (Di, 18 Jan 2011) $ +Version: $Revision: 28959 $ + +Copyright (c) German Cancer Research Center, Division of Medical and +Biological Informatics. All rights reserved. +See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#include "mitkTrackingDeviceSourceConfigurator.h" + +#include "mitkNDITrackingDevice.h" +#include "mitkClaronTrackingDevice.h" + + +mitk::TrackingDeviceSourceConfigurator::TrackingDeviceSourceConfigurator(mitk::NavigationToolStorage::Pointer NavigationTools, mitk::TrackingDevice::Pointer TrackingDevice) +{ +m_NavigationTools = NavigationTools; +m_TrackingDevice = TrackingDevice; +m_ErrorMessage = ""; +} + + +mitk::TrackingDeviceSourceConfigurator::~TrackingDeviceSourceConfigurator() +{ +} + +bool mitk::TrackingDeviceSourceConfigurator::IsCreateTrackingDeviceSourcePossible() +{ +if (m_NavigationTools.IsNull()) + { + m_ErrorMessage = "NavigationToolStorage is NULL!"; + return false; + } +else if (m_TrackingDevice.IsNull()) + { + m_ErrorMessage = "TrackingDevice is NULL!"; + return false; + } +else + { + for (int i=0; iGetToolCount(); i++) + { + if (m_NavigationTools->GetTool(i)->GetTrackingDeviceType() != m_TrackingDevice->GetType()) + { + m_ErrorMessage = "At least one tool is not of the same type like the tracking device."; + return false; + } + } + //TODO in case of Aurora: check if the tools are automatically detected by comparing the serial number + return true; + } +} + +mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateTrackingDeviceSource() +{ +mitk::NavigationDataObjectVisualizationFilter::Pointer dummy; +return this->CreateTrackingDeviceSource(dummy); +} + +mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateTrackingDeviceSource(mitk::NavigationDataObjectVisualizationFilter::Pointer &visualizationFilter) +{ + if (!this->IsCreateTrackingDeviceSourcePossible()) return NULL; + mitk::TrackingDeviceSource::Pointer returnValue; + if (m_TrackingDevice->GetType()==mitk::NDIAurora) + { + returnValue = CreateNDIAuroraTrackingDeviceSource(m_TrackingDevice,m_NavigationTools); + visualizationFilter = CreateNavigationDataObjectVisualizationFilter(returnValue,m_NavigationTools); + } + else if (m_TrackingDevice->GetType()==mitk::NDIPolaris) + { + returnValue = CreateNDIPolarisTrackingDeviceSource(m_TrackingDevice,m_NavigationTools); + visualizationFilter = CreateNavigationDataObjectVisualizationFilter(returnValue,m_NavigationTools); + } + else if (m_TrackingDevice->GetType()==mitk::ClaronMicron) + { + returnValue = CreateMicronTrackerTrackingDeviceSource(m_TrackingDevice,m_NavigationTools); + visualizationFilter = CreateNavigationDataObjectVisualizationFilter(returnValue,m_NavigationTools); + } + //TODO: insert other tracking systems? + return returnValue; +} + +std::string mitk::TrackingDeviceSourceConfigurator::GetErrorMessage() +{ + return this->m_ErrorMessage; +} + +//############################ internal help methods ######################################## + +mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateNDIPolarisTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools) + { + mitk::TrackingDeviceSource::Pointer returnValue = mitk::TrackingDeviceSource::New(); + mitk::NDITrackingDevice::Pointer thisDevice = dynamic_cast(trackingDevice.GetPointer()); + //add the tools to the tracking device + for (int i=0; iGetToolCount(); i++) + { + mitk::NavigationTool::Pointer thisNavigationTool = m_NavigationTools->GetTool(i); + bool toolAddSuccess = thisDevice->AddTool(thisNavigationTool->GetToolName().c_str(),thisNavigationTool->GetCalibrationFile().c_str()); + if (!toolAddSuccess) + { + this->m_ErrorMessage = "Can't add tool, is the SROM-file valid?"; + return NULL; + } + } + returnValue->SetTrackingDevice(thisDevice); + return returnValue; + } + +mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateNDIAuroraTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools) + { + mitk::NDITrackingDevice::Pointer thisDevice = dynamic_cast(trackingDevice.GetPointer()); + for (int i=0; iGetToolCount(); i++) + { + //TODO here: create a tracking tool for every navigation tool + // check if some tools are already connected to the aurora + // also: new class, which handles the visualization of tool surfaces? => NavigationDataObjectVisual + + } + return NULL; + } + +mitk::TrackingDeviceSource::Pointer mitk::TrackingDeviceSourceConfigurator::CreateMicronTrackerTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools) + { + mitk::TrackingDeviceSource::Pointer returnValue = mitk::TrackingDeviceSource::New(); + mitk::ClaronTrackingDevice::Pointer thisDevice = dynamic_cast(trackingDevice.GetPointer()); + //add the tools to the tracking device + for (int i=0; iGetToolCount(); i++) + { + mitk::NavigationTool::Pointer thisNavigationTool = m_NavigationTools->GetTool(i); + bool toolAddSuccess = thisDevice->AddTool(thisNavigationTool->GetToolName().c_str(),thisNavigationTool->GetCalibrationFile().c_str()); + if (!toolAddSuccess) + { + this->m_ErrorMessage = "Can't add tool, is the toolfile valid?"; + return NULL; + } + } + returnValue->SetTrackingDevice(thisDevice); + return returnValue; + } + +mitk::NavigationDataObjectVisualizationFilter::Pointer mitk::TrackingDeviceSourceConfigurator::CreateNavigationDataObjectVisualizationFilter(mitk::TrackingDeviceSource::Pointer trackingDeviceSource, mitk::NavigationToolStorage::Pointer navigationTools) + { + mitk::NavigationDataObjectVisualizationFilter::Pointer returnValue = mitk::NavigationDataObjectVisualizationFilter::New(); + for (int i=0; iGetNumberOfOutputs(); i++) + { + mitk::NavigationTool::Pointer currentTool = navigationTools->GetToolByName(trackingDeviceSource->GetOutput(i)->GetName()); + returnValue->SetInput(i,trackingDeviceSource->GetOutput(i)); //is this the right way to connect the filters? + returnValue->SetRepresentationObject(i,currentTool->GetDataNode()->GetData()); + } + return returnValue; + } diff --git a/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.h b/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.h new file mode 100644 index 0000000000..523297c53b --- /dev/null +++ b/Modules/IGT/IGTFilters/mitkTrackingDeviceSourceConfigurator.h @@ -0,0 +1,84 @@ +/*========================================================================= + +Program: Medical Imaging & Interaction Toolkit +Language: C++ +Date: $Date: 2011-01-18 13:22:38 +0100 (Di, 18 Jan 2011) $ +Version: $Revision: 28959 $ + +Copyright (c) German Cancer Research Center, Division of Medical and +Biological Informatics. All rights reserved. +See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + + +#ifndef MITKTRACKINGDEVICESOURCECONFIGURATOR_H_HEADER_INCLUDED_ +#define MITKTRACKINGDEVICESOURCECONFIGURATOR_H_HEADER_INCLUDED_ + +#include + +//itk includes +#include + +//mitk IGT includes +#include "mitkTrackingDeviceSource.h" +#include "mitkNavigationToolStorage.h" +#include "mitkNavigationDataObjectVisualizationFilter.h" + +namespace mitk { + /**Documentation + * \brief This class offers a factory method for objects of the class TrackingDeviceSource. It initializes this TrackingDeviceSource with + * the given navigation tools and the given tracking device. The factory method also checks if all tools are valid and of the same + * type like the TrackingDevice. You can do this check before trying to create the TrackingDeviceSource by calling the method + * IsCreateTrackingDeviceSourcePossible(), if it returns false you might want to get the error message by calling the method + * GetErrorMessage(). + * \ingroup IGT + */ + class MitkIGT_EXPORT TrackingDeviceSourceConfigurator : public itk::Object + { + public: + mitkClassMacro(TrackingDeviceSourceConfigurator, itk::Object); + mitkNewMacro2Param(Self,mitk::NavigationToolStorage::Pointer,mitk::TrackingDevice::Pointer); + + /** @return Returns if it's possible to create a tracking device source, which means the tools are checked + * if they are of the same type like the tracking device, etc. If it returns false you can get + * the reason for this by getting the error message. + */ + bool IsCreateTrackingDeviceSourcePossible(); + + /** @return Returns a new TrackingDeviceSource. Returns NULL if there was an error on creating the + * TrackingDeviceSource. If there was an error it's availiable as error message. + */ + mitk::TrackingDeviceSource::Pointer CreateTrackingDeviceSource(); + + /** @return Returns a new TrackingDeviceSource. Returns NULL if there was an error on creating the + * TrackingDeviceSource. If there was an error it's availiable as error message. + * @param visualizationFilter (return value) returns a visualization filter which is already connected to the tracking device source. + * This filter visualises the surfaces which are availiable by the navigation tool storage. + */ + mitk::TrackingDeviceSource::Pointer CreateTrackingDeviceSource(mitk::NavigationDataObjectVisualizationFilter::Pointer &visualizationFilter); + + /** @return Returns the current error message. Returns an empty string if there was no error. + */ + std::string GetErrorMessage(); + + protected: + TrackingDeviceSourceConfigurator(mitk::NavigationToolStorage::Pointer NavigationTools, mitk::TrackingDevice::Pointer TrackingDevice); + virtual ~TrackingDeviceSourceConfigurator(); + + mitk::NavigationToolStorage::Pointer m_NavigationTools; + mitk::TrackingDevice::Pointer m_TrackingDevice; + std::string m_ErrorMessage; + + mitk::TrackingDeviceSource::Pointer CreateNDIPolarisTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools); + mitk::TrackingDeviceSource::Pointer CreateNDIAuroraTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools); + mitk::TrackingDeviceSource::Pointer CreateMicronTrackerTrackingDeviceSource(mitk::TrackingDevice::Pointer trackingDevice, mitk::NavigationToolStorage::Pointer navigationTools); + mitk::NavigationDataObjectVisualizationFilter::Pointer CreateNavigationDataObjectVisualizationFilter(mitk::TrackingDeviceSource::Pointer trackingDeviceSource, mitk::NavigationToolStorage::Pointer navigationTools); + + }; +} // namespace mitk +#endif /* MITKTrackingDeviceSource_H_HEADER_INCLUDED_ */ \ No newline at end of file diff --git a/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.cpp b/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.cpp index 783257cccf..cb11d5b2c9 100644 --- a/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.cpp +++ b/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.cpp @@ -1,67 +1,73 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-05-28 17:19:30 +0200 (Do, 28 Mai 2009) $ Version: $Revision $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "mitkNavigationToolStorage.h" mitk::NavigationToolStorage::NavigationToolStorage() { m_ToolCollection = std::vector(); } mitk::NavigationToolStorage::~NavigationToolStorage() { } bool mitk::NavigationToolStorage::DeleteTool(int number) { if ((unsigned int)number > m_ToolCollection.size()) return false; std::vector::iterator it = m_ToolCollection.begin() + number; m_ToolCollection.erase(it); return true; } bool mitk::NavigationToolStorage::AddTool(mitk::NavigationTool::Pointer tool) { if (GetTool(tool->GetIdentifier()).IsNotNull()) return false; else { m_ToolCollection.push_back(tool); return true; } } mitk::NavigationTool::Pointer mitk::NavigationToolStorage::GetTool(int number) { return m_ToolCollection.at(number); } mitk::NavigationTool::Pointer mitk::NavigationToolStorage::GetTool(std::string identifier) { for (int i=0; iGetIdentifier())==identifier) return GetTool(i); return NULL; } + +mitk::NavigationTool::Pointer mitk::NavigationToolStorage::GetToolByName(std::string name) + { + for (int i=0; iGetToolName())==name) return GetTool(i); + return NULL; + } int mitk::NavigationToolStorage::GetToolCount() { return m_ToolCollection.size(); } bool mitk::NavigationToolStorage::isEmpty() { return m_ToolCollection.empty(); } diff --git a/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.h b/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.h index 637ec569f1..b89d3d0ccf 100644 --- a/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.h +++ b/Modules/IGT/IGTToolManagement/mitkNavigationToolStorage.h @@ -1,91 +1,98 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-08-11 15:15:02 +0200 (Di, 11 Aug 2009) $ Version: $Revision $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef NAVIGATIONTOOLSTORAGE_H_INCLUDED #define NAVIGATIONTOOLSTORAGE_H_INCLUDED //itk headers #include //mitk headers #include #include #include "mitkNavigationTool.h" namespace mitk { /**Documentation * \brief An object of this class represents a collection of navigation tools. * You may add/delete navigation tools or store/load the whole collection * to/from the harddisc by using the class NavigationToolStorageSerializer * and NavigationToolStorageDeserializer. * * \ingroup IGT */ class MitkIGT_EXPORT NavigationToolStorage : public itk::Object { public: mitkClassMacro(NavigationToolStorage,itk::Object); itkNewMacro(Self); /** * @brief Adds a tool to the storage. Be sure that the tool has a unique * identifier which is not already part of this storage. * @return Returns true if the tool was added to the storage, false if not * (false can be returned if the identifier already exists in this storage * for example). */ bool AddTool(mitk::NavigationTool::Pointer tool); /** * @return Returns the tracking tool at the position "number" * in the storage. Returns NULL if there is no * tracking tool at this position. */ mitk::NavigationTool::Pointer GetTool(int number); /** * @return Returns the tracking tool with the given identifier. * Returns NULL if there is no * tracking tool with this identifier in the storage. */ mitk::NavigationTool::Pointer GetTool(std::string identifier); + + /** + * @return Returns the tracking tool with the given name. + * Returns NULL if there is no + * tracking tool with this name in the storage. + */ + mitk::NavigationTool::Pointer GetToolByName(std::string name); /** * @brief Deletes a tool from the collection. */ bool DeleteTool(int number); /** * @return Returns the number of tools stored in the storage. */ int GetToolCount(); /** * @return Returns true if the storage is empty, false if not. */ bool isEmpty(); protected: NavigationToolStorage(); ~NavigationToolStorage(); std::vector m_ToolCollection; }; } // namespace mitk #endif //NAVIGATIONTOOLSTORAGE \ No newline at end of file diff --git a/Modules/IGT/files.cmake b/Modules/IGT/files.cmake index a62d73e6d9..628aeb2fe0 100644 --- a/Modules/IGT/files.cmake +++ b/Modules/IGT/files.cmake @@ -1,56 +1,57 @@ SET(CPP_FILES IGTFilters/mitkNavigationDataLandmarkTransformFilter.cpp IGTFilters/mitkNavigationDataReferenceTransformFilter.cpp IGTFilters/mitkNavigationDataTransformFilter.cpp IGTFilters/mitkNavigationDataRecorder.cpp IGTFilters/mitkNavigationDataPlayer.cpp IGTFilters/mitkNavigationDataObjectVisualizationFilter.cpp IGTFilters/mitkCameraVisualization.cpp IGTFilters/mitkNavigationData.cpp IGTFilters/mitkNavigationDataDisplacementFilter.cpp IGTFilters/mitkNavigationDataSequentialPlayer.cpp IGTFilters/mitkNavigationDataSource.cpp IGTFilters/mitkNavigationDataToMessageFilter.cpp IGTFilters/mitkNavigationDataToNavigationDataFilter.cpp IGTFilters/mitkNavigationDataToOpenGLFilter.cpp IGTFilters/mitkNavigationDataToPointSetFilter.cpp IGTFilters/mitkTrackingDeviceSource.cpp IGTFilters/mitkTimeStamp.cpp IGTFilters/mitkRealTimeClock.cpp + IGTFilters/mitkTrackingDeviceSourceConfigurator.cpp IGTTrackingDevices/mitkClaronTool.cpp IGTTrackingDevices/mitkClaronTrackingDevice.cpp IGTTrackingDevices/mitkInternalTrackingTool.cpp IGTTrackingDevices/mitkNDIPassiveTool.cpp IGTTrackingDevices/mitkNDIProtocol.cpp IGTTrackingDevices/mitkNDITrackingDevice.cpp IGTTrackingDevices/mitkSerialCommunication.cpp IGTTrackingDevices/mitkTrackingDevice.cpp IGTTrackingDevices/mitkTrackingTool.cpp IGTTrackingDevices/mitkTrackingVolume.cpp IGTTrackingDevices/mitkVirtualTrackingDevice.cpp IGTTrackingDevices/mitkVirtualTrackingTool.cpp - + IGTToolManagement/mitkNavigationToolStorage.cpp IGTToolManagement/mitkNavigationToolStorageSerializer.cpp IGTToolManagement/mitkNavigationToolStorageDeserializer.cpp IGTToolManagement/mitkNavigationTool.cpp IGTToolManagement/mitkNavigationToolReader.cpp IGTToolManagement/mitkNavigationToolWriter.cpp ) IF(MITK_USE_MICRON_TRACKER) SET(CPP_FILES ${CPP_FILES} IGTTrackingDevices/mitkClaronInterface.cpp) ELSE() SET(CPP_FILES ${CPP_FILES} IGTTrackingDevices/mitkClaronInterfaceStub.cpp) ENDIF(MITK_USE_MICRON_TRACKER) IF(MITK_USE_MICROBIRD_TRACKER) SET(CPP_FILES ${CPP_FILES} IGTTrackingDevices/mitkMicroBirdTrackingDevice.cpp) ENDIF(MITK_USE_MICROBIRD_TRACKER) IF(WIN32) SET(CPP_FILES ${CPP_FILES} IGTFilters/mitkWindowsRealTimeClock.cpp) ELSE() SET(CPP_FILES ${CPP_FILES} IGTFilters/mitkLinuxRealTimeClock.cpp) -ENDIF(WIN32) +ENDIF(WIN32) \ No newline at end of file