MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
OpenIGTLinkPlugin.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============================================================================*/
12
13// Blueberry
14#include <berryISelectionService.h>
15#include <berryIWorkbenchWindow.h>
16
17// Qmitk
18#include "OpenIGTLinkPlugin.h"
19
20// Qt
21#include <QMessageBox>
22
23//mitk image
24#include <mitkImage.h>
25
26//VTK
27#include <vtkSmartPointer.h>
28
29const std::string OpenIGTLinkPlugin::VIEW_ID = "org.mitk.views.openigtlinkplugin";
30
34
36{
37 // create GUI widgets from the Qt Designer's .ui file
38 m_Controls.setupUi(parent);
39 connect(m_Controls.buttonConnect, SIGNAL(clicked()), this, SLOT(ConnectButtonClicked()));
40 connect(m_Controls.buttonReceive, SIGNAL(clicked()), this, SLOT(ReceivingButtonClicked()));
41 connect(&m_Timer, SIGNAL(timeout()), this, SLOT(UpdatePipeline()));
42
43 m_Image2dNode = mitk::DataNode::New();
44
45 m_State = IDLE;
46 StateChanged(m_State);
47}
48
50{
52 mitk::Image::Pointer image2d = m_ImageFilter2D->GetNextImage().at(0);
53 mitk::Image::Pointer image3d = m_ImageFilter3D->GetNextImage().at(0);
54
55 m_Image2dNode->SetName("US Image Stream");
56 m_Image2dNode->SetData(image2d);
57
58 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
59}
60
61void OpenIGTLinkPlugin::OnSelectionChanged(berry::IWorkbenchPart::Pointer,
62 const QList<mitk::DataNode::Pointer> &)
63{
64 // iterate all selected objects, adjust warning visibility
65}
66
68{
69 bool success;
70
71 switch (m_State)
72 {
73 case IDLE:
74 m_IGTLClient = mitk::IGTLClient::New(true);
75 m_IGTLClient->SetHostname(m_Controls.textEditHostname->text().toStdString());
76 m_IGTLClient->SetPortNumber(m_Controls.spinBoxPort->value());
77
78 success = m_IGTLClient->OpenConnection();
79
80 if (!success)
81 {
82 QMessageBox::warning(nullptr, QString("Connection failed"), QString("Client could not connect to given server."),
83 QMessageBox::Ok, QMessageBox::Abort);
84 }
85 else
86 {
87 m_State = CONNECTED;
88 StateChanged(m_State);
89 }
90 break;
91 case CONNECTED:
92 success = m_IGTLClient->CloseConnection();
93 m_State = IDLE;
94 StateChanged(m_State);
95 break;
96 case RECEIVING:
98 success = m_IGTLClient->CloseConnection();
99 m_State = IDLE;
100 StateChanged(m_State);
101 break;
102 }
103}
104
106{
107 switch (m_State)
108 {
109 case IDLE:
110 QMessageBox::warning(nullptr, QString("Not ready.."), QString("The client must be connected to a server first."),
111 QMessageBox::Ok, QMessageBox::Abort);
112 break;
113 case CONNECTED:
114 m_IGTL2DImageDeviceSource = mitk::IGTL2DImageDeviceSource::New();
115 m_IGTL3DImageDeviceSource = mitk::IGTL3DImageDeviceSource::New();
116 m_IGTLTransformDeviceSource = mitk::IGTLTrackingDataDeviceSource::New();
117
121
122 this->GetDataStorage()->Add(m_Image2dNode);
123
124 m_IGTLMessageToNavigationDataFilter = mitk::IGTLMessageToNavigationDataFilter::New();
125 m_NavigationDataObjectVisualizationFilter = mitk::NavigationDataObjectVisualizationFilter::New();
126 m_ImageFilter2D = mitk::IGTLMessageToUSImageFilter::New();
127 m_ImageFilter3D = mitk::IGTLMessageToUSImageFilter::New();
128
129 m_IGTLMessageToNavigationDataFilter->SetNumberOfExpectedOutputs(3);
130
133
136
137 //create an object that will be moved respectively to the navigation data
138 for (size_t i = 0; i < m_IGTLMessageToNavigationDataFilter->GetNumberOfIndexedOutputs(); i++)
139 {
140 mitk::DataNode::Pointer newNode = mitk::DataNode::New();
141 QString name("DemoNode T");
142 name.append(QString::number(i));
143 newNode->SetName(name.toStdString());
144
145 //create small sphere and use it as surface
146 mitk::Surface::Pointer mySphere = mitk::Surface::New();
148 vtkSphere->SetRadius(2.0f);
149 vtkSphere->SetCenter(0.0, 0.0, 0.0);
150 vtkSphere->Update();
151 mySphere->SetProperty("color", mitk::ColorProperty::New(1, 0, 0));
152 mySphere->SetVtkPolyData(vtkSphere->GetOutput());
153 newNode->SetData(mySphere);
154
155 this->GetDataStorage()->Add(newNode);
156
157 m_NavigationDataObjectVisualizationFilter->SetRepresentationObject(i, mySphere.GetPointer());
158 }
159
160 m_IGTLClient->StartCommunication();
161 m_Timer.setInterval(10);
162 m_Timer.start();
163
164 m_State = RECEIVING;
165 StateChanged(m_State);
166 break;
167 case RECEIVING:
168 m_IGTLClient->StopCommunication();
169 this->GetDataStorage()->Remove(this->GetDataStorage()->GetAll());
170 m_Timer.stop();
171 m_State = CONNECTED;
172 StateChanged(m_State);
173 break;
174 }
175}
176
177void OpenIGTLinkPlugin::StateChanged(OpenIGTLinkPlugin::State newState)
178{
179 switch (newState)
180 {
181 case IDLE:
182 m_Controls.buttonConnect->setText(QString("Connect To Server"));
183 m_Controls.buttonReceive->setText(QString("Start Receiving"));
184 m_Controls.buttonReceive->setDisabled(true);
185 break;
186 case CONNECTED:
187 m_Controls.buttonConnect->setText(QString("Disconnect From Server"));
188 m_Controls.buttonReceive->setText(QString("Start Receiving"));
189 m_Controls.buttonReceive->setDisabled(false);
190 break;
191 case RECEIVING:
192 m_Controls.buttonConnect->setText(QString("Disconnect From Server"));
193 m_Controls.buttonReceive->setText(QString("Stop Receiving"));
194 m_Controls.buttonReceive->setDisabled(false);
195 break;
196 }
197}
Ui::OpenIGTLinkPluginControls m_Controls
mitk::IGTL3DImageDeviceSource::Pointer m_IGTL3DImageDeviceSource
mitk::IGTL2DImageDeviceSource::Pointer m_IGTL2DImageDeviceSource
void SetFocus() override
mitk::IGTLTrackingDataDeviceSource::Pointer m_IGTLTransformDeviceSource
mitk::DataNode::Pointer m_Image2dNode
mitk::IGTLMessageToUSImageFilter::Pointer m_ImageFilter3D
void OnSelectionChanged(berry::IWorkbenchPart::Pointer source, const QList< mitk::DataNode::Pointer > &nodes) override
mitk::NavigationDataObjectVisualizationFilter::Pointer m_NavigationDataObjectVisualizationFilter
mitk::IGTLMessageToUSImageFilter::Pointer m_ImageFilter2D
void CreateQtPartControl(QWidget *parent) override
mitk::IGTLClient::Pointer m_IGTLClient
static const std::string VIEW_ID
mitk::IGTLMessageToNavigationDataFilter::Pointer m_IGTLMessageToNavigationDataFilter