14#include "mitkStandardFileLocations.h"
15#include "mitkConfig.h"
16#include <vtkCubeSource.h>
20#include <vtkSmartPointer.h>
21#include <mitkSurface.h>
22#include <mitkIOMimeTypes.h>
23#include <mitkFileReaderRegistry.h>
25#include <usModuleContext.h>
26#include <usGetModuleContext.h>
28#include <usModuleResource.h>
29#include <usModuleResourceStream.h>
31#include <mitkCoreServices.h>
32#include <mitkIFileReader.h>
33#include <mitkIOUtil.h>
34#include <mitkIOMimeTypes.h>
35#include <mitkMimeType.h>
36#include <mitkIMimeTypeProvider.h>
48mitk::Surface::Pointer LoadCoreSurface(
const us::ModuleResource& usResource)
50 us::ModuleResourceStream resStream(usResource, std::ios_base::in);
52 mitk::CoreServicePointer<mitk::IMimeTypeProvider> mimeTypeProvider(mitk::CoreServices::GetMimeTypeProvider());
54 std::vector<mitk::MimeType> mimetypesForFile = mimeTypeProvider->GetMimeTypesForFile(usResource.GetResourcePath());
55 std::vector<mitk::MimeType> mimetypesForSurface = mimeTypeProvider->GetMimeTypesForCategory(mitk::IOMimeTypes::CATEGORY_SURFACES());
59 std::vector<mitk::MimeType> mimetypes;
61 std::sort(mimetypesForFile.begin(), mimetypesForFile.end());
62 std::sort(mimetypesForSurface.begin(), mimetypesForSurface.end());
63 std::set_intersection(mimetypesForFile.begin(), mimetypesForFile.end(),
64 mimetypesForSurface.begin(), mimetypesForSurface.end(),
65 std::back_inserter(mimetypes));
67 mitk::Surface::Pointer surface;
68 if (mimetypes.empty())
70 mitkThrow() <<
"No mimetype for resource stream: " << usResource.GetResourcePath();
74 mitk::FileReaderRegistry fileReaderRegistry;
75 std::vector<us::ServiceReference<mitk::IFileReader>> refs = fileReaderRegistry.GetReferences(mimetypes[0]);
78 mitkThrow() <<
"No reader available for resource stream: " << usResource.GetResourcePath();
82 mitk::IFileReader *reader = fileReaderRegistry.GetReader(refs[0]);
83 reader->SetInput(usResource.GetResourcePath(), &resStream);
84 auto basedatas = reader->Read();
85 if (!basedatas.empty())
87 surface =
dynamic_cast<mitk::Surface*
>(basedatas.front().GetPointer());
106 MITK_ERROR <<
"No tracking device service found!";
115 mitk::Surface::Pointer output = this->GetOutput();
117 std::string filename = this->m_Data.VolumeModelLocation;
119 MITK_INFO <<
"volume: " << filename;
122 if (filename.compare(
"cube") == 0){
125 bounds[0] = bounds[2] = bounds[4] = -400.0;
126 bounds[1] = bounds[3] = bounds[5] = 400.0;
128 cubeSource->SetBounds(bounds);
129 cubeSource->Update();
131 output->SetVtkPolyData(cubeSource->GetOutput());
134 if (filename.compare(
"") == 0)
138 output->SetVtkPolyData(emptyPolyData);
144 us::Module* module = us::GetModuleContext()->GetModule();
145 us::ModuleResource moduleResource =
module->GetResource(filename);
152 mitk::Surface::Pointer fileoutput = LoadCoreSurface(moduleResource);
154 if (fileoutput ==
nullptr)
156 MITK_ERROR <<
"Exception while casting data loaded from file: " << moduleResource.GetResourcePath();
161 output->SetVtkPolyData(fileoutput->GetVtkPolyData());
170 MITK_ERROR <<
"No tracking device service found!";
This class is a collection for information of all Tracking Device Types (derived from abstract Tracki...
TrackingDeviceData GetFirstCompatibleDeviceDataForLine(TrackingDeviceType type)
TrackingVolumeGenerator()
void SetTrackingDevice(mitk::TrackingDevice::Pointer tracker)
Deprecated! Use set DeviceData instead. Sets the tracking device type of the volume....
mitk::TrackingDeviceType GetTrackingDeviceType() const
mitk::TrackingDeviceData GetTrackingDeviceData() const
void SetTrackingDeviceType(mitk::TrackingDeviceType deviceType)
Deprecated! Use set DeviceData instead. Sets the tracking device type of the volume....
void GenerateData() override
mitk::TrackingDeviceData m_Data
Holds the current tracking device data object, which is used to generate the volume.
void SetTrackingDeviceData(mitk::TrackingDeviceData deviceData)
Sets the tracking device data object which will be used to generate the volume. Each tracking device ...
std::string TrackingDeviceType