MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkAbstractToFDeviceFactory.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
15//Microservices
16#include <usModuleContext.h>
17#include <usGetModuleContext.h>
18#include <usModule.h>
19#include <usModuleResource.h>
20#include <usModuleResourceStream.h>
21
22#include <tinyxml2.h>
23
25{
26 ToFCameraDevice::Pointer device = CreateToFCameraDevice();
27 mitk::CameraIntrinsics::Pointer cameraIntrinsics = GetCameraIntrinsics();
28 device->SetProperty("CameraIntrinsics", mitk::CameraIntrinsicsProperty::New(cameraIntrinsics));
29 m_Devices.push_back(device);
30
31 us::ModuleContext* context = us::GetModuleContext();
32 us::ServiceProperties deviceProps;
33 deviceProps["ToFDeviceName"] = GetCurrentDeviceName();
34 m_DeviceRegistrations.insert(std::make_pair(device.GetPointer(), context->RegisterService(device.GetPointer(),deviceProps)));
35 return device;
36}
37
38void mitk::AbstractToFDeviceFactory::DisconnectToFDevice(const ToFCameraDevice::Pointer& device)
39{
40 std::map<ToFCameraDevice*,us::ServiceRegistration<ToFCameraDevice> >::iterator i = m_DeviceRegistrations.find(device.GetPointer());
41 if (i == m_DeviceRegistrations.end()) return;
42
43 i->second.Unregister();
44 m_DeviceRegistrations.erase(i);
45
46 m_Devices.erase(std::remove(m_Devices.begin(), m_Devices.end(), device), m_Devices.end());
47}
48
50{
51 return m_Devices.size();
52}
53
55{
56 us::ModuleResource resource = GetIntrinsicsResource();
57 if (! resource.IsValid())
58 {
59 MITK_WARN << "Could not load resource '" << resource.GetName() << "'. CameraIntrinsics are invalid!";
60 }
61
62 // Create ResourceStream from Resource
63 us::ModuleResourceStream resStream(resource);
64 std::string resString(std::istreambuf_iterator<char>(resStream), {});
65
66 // Parse XML
67 tinyxml2::XMLDocument xmlDocument;
68 xmlDocument.Parse(resString.c_str());
69
70 //Retrieve Child Element and convert to CamerIntrinsics
71 auto* element = xmlDocument.FirstChildElement();
72 mitk::CameraIntrinsics::Pointer intrinsics = mitk::CameraIntrinsics::New();
73 intrinsics->FromXML(element);
74
75 return intrinsics;
76}
77
79{
80 us::Module* module = us::GetModuleContext()->GetModule();
81 return module->GetResource("CalibrationFiles/Default_Parameters.xml");
82 MITK_WARN << "Loaded Default CameraIntrinsics. Overwrite AbstractToFDeviceFactory::GetIntrinsicsResource() if you want to define your own.";
83}
ToFCameraDevice::Pointer ConnectToFDevice()
ConnectToFDevice Use this method to connect a device.
std::string GetCurrentDeviceName() override
GetCurrentDeviceName Get the human readable name of the current device. A factory can produce many de...
virtual us::ModuleResource GetIntrinsicsResource()
Returns the ModuleResource that contains a xml definition of the CameraIntrinsics.
CameraIntrinsics::Pointer GetCameraIntrinsics()
Returns the CameraIntrinsics for the cameras created by this factory.
void DisconnectToFDevice(const ToFCameraDevice::Pointer &device)
DisconnectToFDevice Use this method to disconnect a device.
std::map< ToFCameraDevice *, us::ServiceRegistration< ToFCameraDevice > > m_DeviceRegistrations
m_DeviceRegistrations A map containing all the pairs of device registration numbers and devices.
std::vector< ToFCameraDevice::Pointer > m_Devices
m_Devices A list (vector) containing all connected devices of the respective factory.
size_t GetNumberOfDevices()
GetNumberOfDevices Get the number of devices produced by this factory. This function will return the ...
virtual ToFCameraDevice::Pointer CreateToFCameraDevice()=0
CreateToFCameraDevice Create a new device of the respective factory. E.g. a "KinectFactory" creates a...