16 #include "igtlioLogic.h" 17 #include "igtlioImageDevice.h" 18 #include "igtlioTransformDevice.h" 19 #include "igtlioStatusDevice.h" 20 #include "igtlioStringDevice.h" 22 #include "igtlioConnector.h" 24 #include "igtlioImageConverter.h" 25 #include "igtlioTransformConverter.h" 26 #include "igtlioCommandConverter.h" 27 #include "igtlioStatusConverter.h" 28 #include "igtlioStringConverter.h" 29 #include "igtlioUsSectorDefinitions.h" 39 mTimer(new QTimer(this)),
46 qRegisterMetaType<Transform3D>(
"Transform3D");
47 qRegisterMetaType<ImagePtr>(
"ImagePtr");
54 connect(
mTimer, SIGNAL(timeout()),
this, SLOT(periodicProcess()));
65 mSession =
mLogic->ConnectToServer(serverHost, serverPort, sync, timeout_s);
71 if (
mSession->GetConnector() &&
mSession->GetConnector()->GetState()!=igtlioConnector::STATE_OFF)
73 CX_LOG_DEBUG() <<
"NetworkHandler: Disconnecting from server" <<
mSession->GetConnector()->GetName();
74 igtlioConnectorPointer connector =
mSession->GetConnector();
76 mLogic->RemoveConnector(connector);
81 void NetworkHandler::onDeviceReceived(vtkObject* caller_device,
void* unknown,
unsigned long event ,
void*)
85 vtkSmartPointer<igtlioDevice> receivedDevice(reinterpret_cast<igtlioDevice*>(caller_device));
87 igtlioBaseConverter::HeaderData header = receivedDevice->GetHeader();
88 std::string device_type = receivedDevice->GetDeviceType();
95 QString deviceName(receivedDevice->GetDeviceName().c_str());
97 if(device_type == igtlioImageConverter::GetIGTLTypeName())
99 igtlioImageDevicePointer imageDevice = igtlioImageDevice::SafeDownCast(receivedDevice);
101 igtlioImageConverter::ContentData content = imageDevice->GetContent();
107 double timestampMS = header.timestamp * 1000;
110 cximage->setAcquisitionTime( QDateTime::currentDateTime() );
115 std::string metaLabel;
116 std::string metaDataValue;
117 QStringList igtlioLabels;
119 igtlioLabels << IGTLIO_KEY_PROBE_TYPE;
120 igtlioLabels << IGTLIO_KEY_ORIGIN;
121 igtlioLabels << IGTLIO_KEY_ANGLES;
122 igtlioLabels << IGTLIO_KEY_BOUNDING_BOX;
123 igtlioLabels << IGTLIO_KEY_DEPTHS;
124 igtlioLabels << IGTLIO_KEY_LINEAR_WIDTH;
125 igtlioLabels << IGTLIO_KEY_SPACING_X;
126 igtlioLabels << IGTLIO_KEY_SPACING_Y;
130 for (
int i = 0; i < igtlioLabels.size(); ++i)
132 metaLabel = igtlioLabels[i].toStdString();
133 bool gotMetaData = receivedDevice->GetMetaDataElement(metaLabel, metaDataValue);
153 else if(device_type == igtlioTransformConverter::GetIGTLTypeName())
155 igtlioTransformDevicePointer transformDevice = igtlioTransformDevice::SafeDownCast(receivedDevice);
156 igtlioTransformConverter::ContentData content = transformDevice->GetContent();
162 Transform3D cxtransform = Transform3D::fromVtkMatrix(content.transform);
170 double timestamp = header.timestamp;
178 std::string openigtlinktransformid;
179 bool gotTransformId = receivedDevice->GetMetaDataElement(
"equipmentId", openigtlinktransformid);
184 emit
transform(deviceName, cxtransform, timestamp);
186 else if(device_type == igtlioStatusConverter::GetIGTLTypeName())
188 igtlioStatusDevicePointer status = igtlioStatusDevice::SafeDownCast(receivedDevice);
190 igtlioStatusConverter::ContentData content = status->GetContent();
192 CX_LOG_DEBUG() <<
"STATUS: " <<
" code: " << content.code
193 <<
" subcode: " << content.subcode
194 <<
" errorname: " << content.errorname
195 <<
" statusstring: " << content.statusstring;
198 else if(device_type == igtlioStringConverter::GetIGTLTypeName())
200 igtlioStringDevicePointer
string = igtlioStringDevice::SafeDownCast(receivedDevice);
202 igtlioStringConverter::ContentData content =
string->GetContent();
208 QString message(content.string_msg.c_str());
215 CX_LOG_WARNING() <<
"Found unhandled devicetype: " << device_type;
220 void NetworkHandler::onConnectionEvent(vtkObject* caller,
void* connector,
unsigned long event ,
void*)
224 if (event==igtlioLogic::ConnectionAddedEvent)
228 if (event==igtlioLogic::ConnectionAboutToBeRemovedEvent)
234 void NetworkHandler::onDeviceAddedOrRemoved(vtkObject* caller,
void* void_device,
unsigned long event,
void* callData)
238 if (event==igtlioLogic::NewDeviceEvent)
240 igtlioDevicePointer device(reinterpret_cast<igtlioDevice*>(void_device));
243 CX_LOG_DEBUG() <<
" NetworkHandler is listening to " << device->GetDeviceName();
244 qvtkReconnect(NULL, device, igtlioDevice::ReceiveEvent,
this, SLOT(onDeviceReceived(vtkObject*,
void*,
unsigned long,
void*)));
247 if (event==igtlioLogic::RemovedDeviceEvent)
249 CX_LOG_WARNING() <<
"TODO: on remove device event, not implemented";
253 void NetworkHandler::periodicProcess()
255 mLogic->PeriodicProcess();
260 foreach(
int eventId, QList<int>()
261 << igtlioLogic::ConnectionAddedEvent
262 << igtlioLogic::ConnectionAboutToBeRemovedEvent
265 qvtkReconnect(NULL,
mLogic, eventId,
266 this, SLOT(onConnectionEvent(vtkObject*,
void*,
unsigned long,
void*)));
272 foreach(
int eventId, QList<int>()
273 << igtlioLogic::NewDeviceEvent
274 << igtlioLogic::RemovedDeviceEvent
277 qvtkReconnect(NULL,
mLogic, eventId,
278 this, SLOT(onDeviceAddedOrRemoved(vtkObject*,
void*,
unsigned long,
void*)));
287 if (probeDefinitionHaveChanged)
325 Eigen::Array3i maskDims(
mUSMask->GetDimensions());
326 unsigned char* maskPtr =
static_cast<unsigned char*
> (
mUSMask->GetScalarPointer());
327 unsigned char* imagePtr =
static_cast<unsigned char*
> (cximage->getBaseVtkImageData()->GetScalarPointer());
328 unsigned components = cximage->getBaseVtkImageData()->GetNumberOfScalarComponents();
329 unsigned dimX = maskDims[0];
330 unsigned dimY = maskDims[1];
331 for (
unsigned x = 0; x < dimX; x++)
332 for (
unsigned y = 0; y < dimY; y++)
334 unsigned pos = x + y * dimX;
335 unsigned imagePos = pos*components;
336 unsigned char maskVal = maskPtr[pos];
337 unsigned char imageVal = imagePtr[imagePos];
338 if (maskVal != 0 && imageVal <= threshold)
340 for(
unsigned i=0; i < components; ++i)
343 imagePtr[imagePos + i] = newValue;
QString qstring_cast(const T &val)
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
boost::shared_ptr< class Image > ImagePtr
igtlioSessionPointer requestConnectToServer(std::string serverHost, int serverPort=-1, IGTLIO_SYNCHRONIZATION_TYPE sync=IGTLIO_BLOCKING, double timeout_s=5)
igtlioLogicPointer mLogic
bool convertZeroesInsideSectorToOnes(ImagePtr cximage, int threshold=0, int newValue=1)
bool emitProbeDefinitionIfChanged(QString deviceName)
void string_message(QString message)
void processImageAndEmitProbeDefinition(ImagePtr cximage, QString deviceName)
igtlioSessionPointer mSession
ProbeDefinitionFromStringMessagesPtr mProbeDefinitionFromStringMessages
void connectToDeviceEvents()
void transform(QString devicename, Transform3D transform, double timestamp)
void probedefinition(QString devicename, ProbeDefinitionPtr definition)
void connectToConnectionEvents()
void disconnectFromServer()
boost::shared_ptr< class ProbeDefinitionFromStringMessages > ProbeDefinitionFromStringMessagesPtr
vtkImageDataPtr getMask()
NetworkHandler(igtlioLogicPointer logic)
Utility functions for drawing an US Probe sector.
boost::shared_ptr< class ProbeDefinition > ProbeDefinitionPtr
ProbeDefinitionPtr mProbeDefinition
void image(ImagePtr image)
void setData(ProbeDefinition data)
Namespace for all CustusX production code.