From 5c7f0fc144883c41119c40482601538673648c09 Mon Sep 17 00:00:00 2001 From: Laura Connolly <15lpc1@queensu.ca> Date: Mon, 22 Jun 2020 09:57:29 -0400 Subject: [PATCH 01/17] Added NDArrayMessage converter --- Converter/igtlioNDArrayMessageConverter.cxx | 49 +++++++++++++++++++++ Converter/igtlioNDArrayMessageConverter.h | 25 +++++++++++ 2 files changed, 74 insertions(+) create mode 100644 Converter/igtlioNDArrayMessageConverter.cxx create mode 100644 Converter/igtlioNDArrayMessageConverter.h diff --git a/Converter/igtlioNDArrayMessageConverter.cxx b/Converter/igtlioNDArrayMessageConverter.cxx new file mode 100644 index 0000000..c0c1bd1 --- /dev/null +++ b/Converter/igtlioNDArrayMessageConverter.cxx @@ -0,0 +1,49 @@ +#include "igtlioNDArrayMessageConverter.h" +#include "igtlNDArrayMessage.h" +#include + +int igtlioNDArrayMessageConverter::fromIGTL(igtl::MessageBase::Pointer source, + HeaderData* header, + ContentData* dest, + bool checkCRC, + igtl::MessageBase::MetaDataMap& outMetaInfo) +{ + igtl::NDArrayMessage::Pointer msg; + msg = igtl::NDArrayMessage::New(); + msg->Copy(source); + + int c = msg->Unpack(checkCRC); + + if ((c & igtl::MessageHeader::UNPACK_BODY == 0)) + { + return 0; + } + + if (!IGTLtoHeader(dynamic_pointer_cast(msg), header, outMetaInfo)) + return 0; + + dest->NDArray_msg = msg->GetArray(); + + + return 1; +} + +int igtlioNDArrayMessageConverter::toIGTL(const HeaderData& header, const ContentData& source, igtl::NDArrayMessage::Pointer* dest, igtl::MessageBase::MetaDataMap metaInfo) +{ + if (dest->IsNull()) + *dest = igtl::NDArrayMessage::New(); + (*dest)->InitPack(); + igtl::NDArrayMessage::Pointer msg = *dest; + + if (!metaInfo.empty()) + { + msg->SetHeaderVersion(IGTL_HEADER_VERSION_2); + } + igtl::MessageBase::Pointer basemsg = dynamic_pointer_cast(msg); + HeadertoIGTL(header, &basemsg, metaInfo); + + msg->SetArray(source.NDArray_msg); + msg->Pack(); + + return 1; +} \ No newline at end of file diff --git a/Converter/igtlioNDArrayMessageConverter.h b/Converter/igtlioNDArrayMessageConverter.h new file mode 100644 index 0000000..aec863f --- /dev/null +++ b/Converter/igtlioNDArrayMessageConverter.h @@ -0,0 +1,25 @@ +#ifndef NDARRAYCONVERTER_H +#define NDARRAYCONVERTER_H + +#include "igtlioConverterExport.h" +#include +#include "igtlioBaseConverter.h" +class OPENIGTLINKIO_CONVERTER_EXPORT igtlioNDArrayMessageConverter : public igtlioBaseConverter +{ +public: + + + struct ContentData + { + igtl::NDArrayMessage NDArray_msg; + }; + + static const char* GetIGTLName() { return GetIGTlTypeName(); } + static const char* GetIGTlTypeName() {return "ARRAY"; } + + static int fromIGTL(igtl::MessageBase::Pointer source, HeaderData* header, ContentData* content, bool checkCRC, igtl::MessageBase::MetaDataMap& outMetaInfo); + static int toIGTL(const HeaderData& header, const ContentData& source, igtl::NDArrayMessage::Pointer* dest, igtl::MessageBase::MetaDataMap metaInfo = igtl::MessageBase::MetaDataMap()); + +}; + +#endif //NDARRAYCONVERTER_H \ No newline at end of file From c3ae18e539768777a7e2d2ebd219679d51c4f828 Mon Sep 17 00:00:00 2001 From: Laura Connolly <15lpc1@queensu.ca> Date: Mon, 22 Jun 2020 13:46:31 -0400 Subject: [PATCH 02/17] Updated converter function. --- Converter/CMakeLists.txt | 2 ++ ...onverter.cxx => igtlioNDArrayConverter.cxx} | 18 ++++++++++-------- ...ageConverter.h => igtlioNDArrayConverter.h} | 5 +++-- 3 files changed, 15 insertions(+), 10 deletions(-) rename Converter/{igtlioNDArrayMessageConverter.cxx => igtlioNDArrayConverter.cxx} (67%) rename Converter/{igtlioNDArrayMessageConverter.h => igtlioNDArrayConverter.h} (82%) diff --git a/Converter/CMakeLists.txt b/Converter/CMakeLists.txt index 8c45b3b..7556ec6 100644 --- a/Converter/CMakeLists.txt +++ b/Converter/CMakeLists.txt @@ -31,6 +31,7 @@ set(${PROJECT_NAME}_SRCS igtlioStringConverter.cxx igtlioTransformConverter.cxx igtlioTrackingDataConverter.cxx + igtlioNDArrayConverter.cxx ) set(${PROJECT_NAME}_HDRS @@ -47,6 +48,7 @@ set(${PROJECT_NAME}_HDRS igtlioTransformConverter.h igtlioUsSectorDefinitions.h igtlioTrackingDataConverter.h + igtlioNDArrayConverter.h ) IF(OpenIGTLink_ENABLE_VIDEOSTREAMING) diff --git a/Converter/igtlioNDArrayMessageConverter.cxx b/Converter/igtlioNDArrayConverter.cxx similarity index 67% rename from Converter/igtlioNDArrayMessageConverter.cxx rename to Converter/igtlioNDArrayConverter.cxx index c0c1bd1..6af8ef3 100644 --- a/Converter/igtlioNDArrayMessageConverter.cxx +++ b/Converter/igtlioNDArrayConverter.cxx @@ -1,8 +1,9 @@ -#include "igtlioNDArrayMessageConverter.h" +#include "igtlioNDArrayConverter.h" #include "igtlNDArrayMessage.h" #include +#include -int igtlioNDArrayMessageConverter::fromIGTL(igtl::MessageBase::Pointer source, +int igtlioNDArrayConverter::fromIGTL(igtl::MessageBase::Pointer source, HeaderData* header, ContentData* dest, bool checkCRC, @@ -13,6 +14,8 @@ int igtlioNDArrayMessageConverter::fromIGTL(igtl::MessageBase::Pointer source, msg->Copy(source); int c = msg->Unpack(checkCRC); + + if ((c & igtl::MessageHeader::UNPACK_BODY == 0)) { @@ -21,14 +24,15 @@ int igtlioNDArrayMessageConverter::fromIGTL(igtl::MessageBase::Pointer source, if (!IGTLtoHeader(dynamic_pointer_cast(msg), header, outMetaInfo)) return 0; - - dest->NDArray_msg = msg->GetArray(); + vtkSmartPointer NDArray_msg = dest->NDArray_msg; + NDArray_msg->Allocate(msg->GetPackSize()); + memcpy(NDArray_msg->GetVoidPointer(0), msg->GetPackPointer(), msg->GetBodySizeToRead()); return 1; } -int igtlioNDArrayMessageConverter::toIGTL(const HeaderData& header, const ContentData& source, igtl::NDArrayMessage::Pointer* dest, igtl::MessageBase::MetaDataMap metaInfo) +int igtlioNDArrayConverter::toIGTL(const HeaderData& header, const ContentData& source, igtl::NDArrayMessage::Pointer* dest, igtl::MessageBase::MetaDataMap metaInfo) { if (dest->IsNull()) *dest = igtl::NDArrayMessage::New(); @@ -41,9 +45,7 @@ int igtlioNDArrayMessageConverter::toIGTL(const HeaderData& header, const Conten } igtl::MessageBase::Pointer basemsg = dynamic_pointer_cast(msg); HeadertoIGTL(header, &basemsg, metaInfo); - - msg->SetArray(source.NDArray_msg); + msg->Pack(); - return 1; } \ No newline at end of file diff --git a/Converter/igtlioNDArrayMessageConverter.h b/Converter/igtlioNDArrayConverter.h similarity index 82% rename from Converter/igtlioNDArrayMessageConverter.h rename to Converter/igtlioNDArrayConverter.h index aec863f..f9a05c2 100644 --- a/Converter/igtlioNDArrayMessageConverter.h +++ b/Converter/igtlioNDArrayConverter.h @@ -4,14 +4,15 @@ #include "igtlioConverterExport.h" #include #include "igtlioBaseConverter.h" -class OPENIGTLINKIO_CONVERTER_EXPORT igtlioNDArrayMessageConverter : public igtlioBaseConverter +class vtkDataArray; +class OPENIGTLINKIO_CONVERTER_EXPORT igtlioNDArrayConverter : public igtlioBaseConverter { public: struct ContentData { - igtl::NDArrayMessage NDArray_msg; + vtkSmartPointer NDArray_msg; }; static const char* GetIGTLName() { return GetIGTlTypeName(); } From 74cf5c460b5f1386aa17bfaf4e1349afca182f99 Mon Sep 17 00:00:00 2001 From: Laura Connolly <15lpc1@queensu.ca> Date: Tue, 23 Jun 2020 12:00:15 -0400 Subject: [PATCH 03/17] Updated NDArrayDevice files, keep getting "this pointer" error. --- Devices/CMakeLists.txt | 3 + Devices/igtlioNDArrayDevice.cxx | 119 ++++++++++++++++++++++++++++++++ Devices/igtlioNDArrayDevice.h | 59 ++++++++++++++++ 3 files changed, 181 insertions(+) create mode 100644 Devices/igtlioNDArrayDevice.cxx create mode 100644 Devices/igtlioNDArrayDevice.h diff --git a/Devices/CMakeLists.txt b/Devices/CMakeLists.txt index 07558b9..214ba72 100644 --- a/Devices/CMakeLists.txt +++ b/Devices/CMakeLists.txt @@ -28,8 +28,10 @@ set(${PROJECT_NAME}_SRCS igtlioPolyDataDevice.cxx igtlioStatusDevice.cxx igtlioStringDevice.cxx + igtlioNDArrayDevice.cxx igtlioTransformDevice.cxx igtlioTrackingDataDevice.cxx + ) set(${PROJECT_NAME}_HDRS @@ -41,6 +43,7 @@ set(${PROJECT_NAME}_HDRS igtlioPolyDataDevice.h igtlioStatusDevice.h igtlioStringDevice.h + igtlioNDArrayDevice.h igtlioTransformDevice.h igtlioTrackingDataDevice.h ) diff --git a/Devices/igtlioNDArrayDevice.cxx b/Devices/igtlioNDArrayDevice.cxx new file mode 100644 index 0000000..b922bea --- /dev/null +++ b/Devices/igtlioNDArrayDevice.cxx @@ -0,0 +1,119 @@ +#include "igtlioNDArrayDevice.h" +#include + +//--------------------------------------------------------------------------- +igtlioDevicePointer igtlioNDArrayDeviceCreator::Create(std::string device_name) +{ + igtlioNDArrayDevicePointer retval = igtlioNDArrayDevicePointer::New(); + retval->SetDeviceName(device_name); + return retval; +} + +//--------------------------------------------------------------------------- +std::string igtlioNDArrayDeviceCreator::GetDeviceType() const +{ + return igtlioNDArrayConverter::GetIGTLTypeName(); +} + +//--------------------------------------------------------------------------- +vtkStandardNewMacro(igtlioNDArrayDeviceCreator); + + + + +//--------------------------------------------------------------------------- +vtkStandardNewMacro(igtlioNDArrayDevice); +//--------------------------------------------------------------------------- +igtlioNDArrayDevice::igtlioNDArrayDevice() +{ +} + +//--------------------------------------------------------------------------- +igtlioNDArrayDevice::~igtlioNDArrayDevice() +{ +} + +//--------------------------------------------------------------------------- +std::string igtlioNDArrayDevice::GetDeviceType() const +{ + return igtlioNDArrayConverter::GetIGTLTypeName(); +} + +int igtlioNDArrayDevice::ReceiveIGTLMessage(igtl::NDArrayMessage::Pointer buffer, bool checkCRC) +{ + int success = igtlioNDArrayConverter::fromIGTL(buffer, &HeaderData, &Content, checkCRC, this->metaInfo); + if (success) + { + this->Modified(); + this->InvokeEvent(ArrayModifiedEvent, this); + } + return success; +} +//--------------------------------------------------------------------------- +unsigned int igtlioNDArrayDevice::GetDeviceContentModifiedEvent() const +{ + return ArrayModifiedEvent; +} + +//--------------------------------------------------------------------------- +int igtlioNDArrayDevice::ReceiveIGTLMessage(igtl::NDArrayMessage::Pointer buffer, bool checkCRC) +{ + int success = igtlioNDArrayConverter::fromIGTL(buffer, &HeaderData, &Content, checkCRC, this->metaInfo); + if (success) + { + this->Modified(); + this->InvokeEvent(ArrayModifiedEvent, this); + } + return success; +} + +//--------------------------------------------------------------------------- +igtl::NDArrayMessage::Pointer igtlioNDArrayDevice::GetIGTLMessage() +{ + + if (!igtlioNDArrayConverter::toIGTL(HeaderData, Content, &this->OutMessage, this->metaInfo)) + { + return 0; + } + + return dynamic_pointer_cast(this->OutMessage); +} + +//--------------------------------------------------------------------------- +igtl::NDArrayMessage::Pointer igtlioNDArrayDevice::GetIGTLMessage(MESSAGE_PREFIX prefix) +{ + if (prefix==MESSAGE_PREFIX_NOT_DEFINED) + { + return this->GetIGTLMessage(); + } + + return igtl::NDArrayMessage::Pointer(); +} + +//--------------------------------------------------------------------------- +std::set igtlioNDArrayDevice::GetSupportedMessagePrefixes() const +{ + std::set retval; + retval.insert(MESSAGE_PREFIX_NOT_DEFINED); + return retval; +} + +void igtlioNDArrayDevice::SetContent(igtlioNDArrayConverter::ContentData content) +{ + Content = content; + this->Modified(); + this->InvokeEvent(ArrayModifiedEvent, this); +} + +igtlioNDArrayConverter::ContentData igtlioNDArrayDevice::GetContent() +{ + return Content; +} + +//--------------------------------------------------------------------------- +void igtlioNDArrayDevice::PrintSelf(ostream& os, vtkIndent indent) +{ + igtlioDevice::PrintSelf(os, indent); + + os << indent << "Array:\t" << Content.NDArray_msg << "\n"; +} diff --git a/Devices/igtlioNDArrayDevice.h b/Devices/igtlioNDArrayDevice.h new file mode 100644 index 0000000..c489cdd --- /dev/null +++ b/Devices/igtlioNDArrayDevice.h @@ -0,0 +1,59 @@ +#ifndef NDARRAYDEVICE_H +#define NDARRAYDEVICE_H + +#include "igtlioDevicesExport.h" + +#include "igtlioNDArrayConverter.h" +#include "igtlioDevice.h" + +class vtkDataArray; + +typedef vtkSmartPointer igtlioNDArrayDevicePointer; + +class OPENIGTLINKIO_DEVICES_EXPORT igtlioNDArrayDevice : public igtlioDevice +{ +public: + enum { + ArrayModifiedEvent = 118960, + }; + + virtual unsigned int GetDeviceContentModifiedEvent() const; + virtual std::string GetDeviceType() const; + //virtual int ReceiveIGTLMessage(igtl::NDArrayMessage::Pointer buffer, bool checkCRC); + virtual igtl::NDArrayMessage::Pointer GetIGTLMessage() const; + virtual igtl::NDArrayMessage::Pointer GetIGTLMessage(MESSAGE_PREFIX prefix) const; + virtual std::set GetSupportedMessagePrefixes(); + + void SetContent(igtlioNDArrayConverter::ContentData content); + igtlioNDArrayConverter::ContentData GetContent(); + + public: + static igtlioNDArrayDevice *New(); + vtkTypeMacro(igtlioNDArrayDevice,igtlioDevice); + + void PrintSelf(ostream& os, vtkIndent indent); + + protected: + igtlioNDArrayDevice(); + ~igtlioNDArrayDevice(); + + protected: + igtl::NDArrayMessage::Pointer OutMessage; + //igtl::GetStatusMessage::Pointer GetMessage; + + igtlioNDArrayConverter::ContentData Content; +}; + + +//--------------------------------------------------------------------------- +class OPENIGTLINKIO_DEVICES_EXPORT igtlioNDArrayDeviceCreator : public igtlioDeviceCreator +{ +public: + virtual igtlioDevicePointer Create(std::string device_name); + virtual std::string GetDeviceType(); + + static igtlioNDArrayDeviceCreator *New(); + vtkTypeMacro(igtlioNDArrayDeviceCreator,vtkObject); +}; + +#endif // NDARRAYDEVICE_H From 38ce626a9d505fae13f9db4b3665f02e941ae8ec Mon Sep 17 00:00:00 2001 From: Laura Connolly <15lpc1@queensu.ca> Date: Tue, 30 Jun 2020 14:27:04 -0400 Subject: [PATCH 04/17] Fixed capitalization error. --- Converter/igtlioNDArrayConverter.cxx | 4 ++-- Converter/igtlioNDArrayConverter.h | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Converter/igtlioNDArrayConverter.cxx b/Converter/igtlioNDArrayConverter.cxx index 6af8ef3..2026068 100644 --- a/Converter/igtlioNDArrayConverter.cxx +++ b/Converter/igtlioNDArrayConverter.cxx @@ -16,7 +16,7 @@ int igtlioNDArrayConverter::fromIGTL(igtl::MessageBase::Pointer source, int c = msg->Unpack(checkCRC); - + cbcbcpa if ((c & igtl::MessageHeader::UNPACK_BODY == 0)) { return 0; @@ -28,7 +28,7 @@ int igtlioNDArrayConverter::fromIGTL(igtl::MessageBase::Pointer source, vtkSmartPointer NDArray_msg = dest->NDArray_msg; NDArray_msg->Allocate(msg->GetPackSize()); memcpy(NDArray_msg->GetVoidPointer(0), msg->GetPackPointer(), msg->GetBodySizeToRead()); - + dest->NDArray_msg = NDArray_msg; return 1; } diff --git a/Converter/igtlioNDArrayConverter.h b/Converter/igtlioNDArrayConverter.h index f9a05c2..42e7578 100644 --- a/Converter/igtlioNDArrayConverter.h +++ b/Converter/igtlioNDArrayConverter.h @@ -5,6 +5,7 @@ #include #include "igtlioBaseConverter.h" class vtkDataArray; +typedef vtkSmartPointer igtlioNDArrayDevicePointer; class OPENIGTLINKIO_CONVERTER_EXPORT igtlioNDArrayConverter : public igtlioBaseConverter { public: @@ -15,8 +16,8 @@ class OPENIGTLINKIO_CONVERTER_EXPORT igtlioNDArrayConverter : public igtlioBaseC vtkSmartPointer NDArray_msg; }; - static const char* GetIGTLName() { return GetIGTlTypeName(); } - static const char* GetIGTlTypeName() {return "ARRAY"; } + static const char* GetIGTLName() { return GetIGTLTypeName(); } + static const char* GetIGTLTypeName() {return "ARRAY"; } static int fromIGTL(igtl::MessageBase::Pointer source, HeaderData* header, ContentData* content, bool checkCRC, igtl::MessageBase::MetaDataMap& outMetaInfo); static int toIGTL(const HeaderData& header, const ContentData& source, igtl::NDArrayMessage::Pointer* dest, igtl::MessageBase::MetaDataMap metaInfo = igtl::MessageBase::MetaDataMap()); From 59f6a522699b7e7c8b603c43130679efb4a2a222 Mon Sep 17 00:00:00 2001 From: Adam Rankin Date: Thu, 15 Oct 2020 11:38:16 -0400 Subject: [PATCH 05/17] COMP: Enabling compilation with vtk >= 8.9.0 (#82) --- CMakeLists.txt | 7 +++++++ Converter/CMakeLists.txt | 9 ++++++--- Devices/CMakeLists.txt | 9 ++++++--- Devices/igtlioImageDevice.cxx | 2 +- Logic/CMakeLists.txt | 10 +++++++--- Logic/igtlioConnector.cxx | 22 +++++++++++++++++++--- Tools/CMakeLists.txt | 13 ++++++++++--- 7 files changed, 56 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 49d8f29..e201556 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,13 @@ include(GenerateExportHeader) # Find dependencies find_package(OpenIGTLink REQUIRED NO_MODULE) find_package(VTK REQUIRED NO_MODULE) +if(VTK_VERSION VERSION_LESS 8.9.0) + set(IGTLIO_VTK_PREFIX VTK::) + set(IGTLIO_MODULE_PREFIX vtk) +else() + set(IGTLIO_VTK_PREFIX vtk) + set(IGTLIO_MODULE_PREFIX "") +endif() include(${OpenIGTLink_USE_FILE}) ########################################################### diff --git a/Converter/CMakeLists.txt b/Converter/CMakeLists.txt index 7556ec6..a3054ec 100644 --- a/Converter/CMakeLists.txt +++ b/Converter/CMakeLists.txt @@ -3,15 +3,18 @@ project(igtlioConverter) set(${PROJECT_NAME}_EXPORT_DIRECTIVE "OPENIGTLINKIO_CONVERTER_EXPORT") set(VTK_MODULES - vtkIOImage - vtkImagingMath + ${IGTLIO_MODULE_PREFIX}IOImage + ${IGTLIO_MODULE_PREFIX}ImagingMath ) find_package(VTK REQUIRED NO_MODULE COMPONENTS ${VTK_MODULES} ) -include(${VTK_USE_FILE}) + +if(VTK_VERSION VERSION_LESS 8.9.0) + include(${VTK_USE_FILE}) +endif() set(${PROJECT_NAME}_INCLUDE_DIRECTORIES PUBLIC $ diff --git a/Devices/CMakeLists.txt b/Devices/CMakeLists.txt index 214ba72..a31f924 100644 --- a/Devices/CMakeLists.txt +++ b/Devices/CMakeLists.txt @@ -3,15 +3,18 @@ project(igtlioDevices) set(${PROJECT_NAME}_EXPORT_DIRECTIVE "OPENIGTLINKIO_DEVICES_EXPORT") set(VTK_MODULES - vtkIOImage - vtkImagingMath + ${IGTLIO_MODULE_PREFIX}IOImage + ${IGTLIO_MODULE_PREFIX}ImagingMath ) find_package(VTK REQUIRED NO_MODULE COMPONENTS ${VTK_MODULES} ) -include(${VTK_USE_FILE}) + +if(VTK_VERSION VERSION_LESS 8.9.0) + include(${VTK_USE_FILE}) +endif() set(${PROJECT_NAME}_INCLUDE_DIRECTORIES PUBLIC $ diff --git a/Devices/igtlioImageDevice.cxx b/Devices/igtlioImageDevice.cxx index fda6003..566f9cc 100644 --- a/Devices/igtlioImageDevice.cxx +++ b/Devices/igtlioImageDevice.cxx @@ -91,7 +91,7 @@ igtl::MessageBase::Pointer igtlioImageDevice::GetIGTLMessage() { if (!Content.image) { - vtkWarningMacro("Image is NULL, message not generated.") + vtkWarningMacro("Image is NULL, message not generated."); return 0; } diff --git a/Logic/CMakeLists.txt b/Logic/CMakeLists.txt index c7c6e78..cf2cfda 100644 --- a/Logic/CMakeLists.txt +++ b/Logic/CMakeLists.txt @@ -3,15 +3,18 @@ project(igtlioLogic) set(${PROJECT_NAME}_EXPORT_DIRECTIVE "OPENIGTLINKIO_LOGIC_EXPORT") set(VTK_MODULES - vtkIOImage - vtkImagingMath + ${IGTLIO_MODULE_PREFIX}IOImage + ${IGTLIO_MODULE_PREFIX}ImagingMath ) find_package(VTK REQUIRED NO_MODULE COMPONENTS ${VTK_MODULES} ) -include(${VTK_USE_FILE}) + +if(VTK_VERSION VERSION_LESS 8.9.0) + include(${VTK_USE_FILE}) +endif() set(${PROJECT_NAME}_INCLUDE_DIRECTORIES PUBLIC $ @@ -45,6 +48,7 @@ set(${PROJECT_NAME}_HDRS set(${PROJECT_NAME}_TARGET_LIBRARIES igtlioDevices ${OpenIGTLink_LIBRARIES} + ${IGTLIO_VTK_PREFIX}CommonSystem ${VTK_LIBRARIES} ) diff --git a/Logic/igtlioConnector.cxx b/Logic/igtlioConnector.cxx index 2db5fdb..115649b 100644 --- a/Logic/igtlioConnector.cxx +++ b/Logic/igtlioConnector.cxx @@ -278,9 +278,17 @@ void* igtlioConnector::ReceiverThreadFunction(void* ptr) connector->RemoveClient(clientID); // Signal to the threader that this thread has become free +#if VTK_MAJOR_VERSION < 9 // change to std::mutex with v9.0.0 vinfo->ActiveFlagLock->Lock(); +#else + vinfo->ActiveFlagLock->lock(); +#endif (*vinfo->ActiveFlag) = 0; - vinfo->ActiveFlagLock->Unlock(); +#if VTK_MAJOR_VERSION < 9 // change to std::mutex with v9.0.0 + vinfo->ActiveFlagLock->UnLock(); +#else + vinfo->ActiveFlagLock->unlock(); +#endif return NULL; //why??? } @@ -409,9 +417,17 @@ void* igtlioConnector::ConnectionAcceptThreadFunction(void* ptr) connector->RequestInvokeEvent(igtlioConnector::DeactivatedEvent); // need to Request the InvokeEvent, because we are not on the main thread now // Signal to the threader that this thread has become free +#if VTK_MAJOR_VERSION < 9 // change to std::mutex with v9.0.0 vinfo->ActiveFlagLock->Lock(); +#else + vinfo->ActiveFlagLock->lock(); +#endif (*vinfo->ActiveFlag) = 0; - vinfo->ActiveFlagLock->Unlock(); +#if VTK_MAJOR_VERSION < 9 // change to std::mutex with v9.0.0 + vinfo->ActiveFlagLock->UnLock(); +#else + vinfo->ActiveFlagLock->unlock(); +#endif return 0; } @@ -836,7 +852,7 @@ int igtlioConnector::SendCommand(igtlioCommandPointer command) { if (command->IsInProgress()) { - vtkWarningMacro("SendCommand: Command " << command->GetCommandId() << "-" << command->GetName() << " is already in progress! Attempting to cancel and resend.") + vtkWarningMacro("SendCommand: Command " << command->GetCommandId() << "-" << command->GetName() << " is already in progress! Attempting to cancel and resend."); this->CancelCommand(command); } diff --git a/Tools/CMakeLists.txt b/Tools/CMakeLists.txt index f7490a9..3f9bb69 100644 --- a/Tools/CMakeLists.txt +++ b/Tools/CMakeLists.txt @@ -4,9 +4,16 @@ set(${PROJECT_NAME}_EXPORT_DIRECTIVE "OPENIGTLINKIO_TOOLS_EXPORT") find_package(OpenIGTLink REQUIRED) include(${OpenIGTLink_USE_FILE}) - -find_package(VTK REQUIRED NO_MODULE COMPONENTS vtkIOXMLParser) -include(${VTK_USE_FILE}) + +set(VTK_MODULES + ${IGTLIO_MODULE_PREFIX}IOXMLParser +) + +find_package(VTK REQUIRED NO_MODULE COMPONENTS ${VTK_MODULES}) + +if(VTK_VERSION VERSION_LESS 8.9.0) + include(${VTK_USE_FILE}) +endif() set(${PROJECT_NAME}_INCLUDE_DIRECTORIES PUBLIC $ From e0d7b7f537d08026f404d9990acc0af0cda0e82f Mon Sep 17 00:00:00 2001 From: Adam Rankin Date: Thu, 15 Oct 2020 11:42:20 -0400 Subject: [PATCH 06/17] COMP: haha... just testing you guys --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e201556..c1682f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,11 +46,11 @@ include(GenerateExportHeader) find_package(OpenIGTLink REQUIRED NO_MODULE) find_package(VTK REQUIRED NO_MODULE) if(VTK_VERSION VERSION_LESS 8.9.0) - set(IGTLIO_VTK_PREFIX VTK::) - set(IGTLIO_MODULE_PREFIX vtk) -else() set(IGTLIO_VTK_PREFIX vtk) set(IGTLIO_MODULE_PREFIX "") +else() + set(IGTLIO_VTK_PREFIX VTK::) + set(IGTLIO_MODULE_PREFIX vtk) endif() include(${OpenIGTLink_USE_FILE}) From 4147cea94d18e243d2f4372498eff1d8b6b6f3a1 Mon Sep 17 00:00:00 2001 From: Adam Rankin Date: Tue, 20 Oct 2020 14:45:12 -0400 Subject: [PATCH 07/17] COMP: Fixed vtk module prefix for VTK < 8.9 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c1682f8..edf0c1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,10 +47,10 @@ find_package(OpenIGTLink REQUIRED NO_MODULE) find_package(VTK REQUIRED NO_MODULE) if(VTK_VERSION VERSION_LESS 8.9.0) set(IGTLIO_VTK_PREFIX vtk) - set(IGTLIO_MODULE_PREFIX "") + set(IGTLIO_MODULE_PREFIX vtk) else() set(IGTLIO_VTK_PREFIX VTK::) - set(IGTLIO_MODULE_PREFIX vtk) + set(IGTLIO_MODULE_PREFIX "") endif() include(${OpenIGTLink_USE_FILE}) From 26c8c3ef16cfa6c50b589cb86eb263da5a32698f Mon Sep 17 00:00:00 2001 From: Adam Rankin Date: Tue, 20 Oct 2020 18:19:26 -0400 Subject: [PATCH 08/17] COMP: Fixing mutex unlock capitalization --- Logic/igtlioConnector.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Logic/igtlioConnector.cxx b/Logic/igtlioConnector.cxx index 115649b..a57e317 100644 --- a/Logic/igtlioConnector.cxx +++ b/Logic/igtlioConnector.cxx @@ -285,7 +285,7 @@ void* igtlioConnector::ReceiverThreadFunction(void* ptr) #endif (*vinfo->ActiveFlag) = 0; #if VTK_MAJOR_VERSION < 9 // change to std::mutex with v9.0.0 - vinfo->ActiveFlagLock->UnLock(); + vinfo->ActiveFlagLock->Unlock(); #else vinfo->ActiveFlagLock->unlock(); #endif @@ -424,7 +424,7 @@ void* igtlioConnector::ConnectionAcceptThreadFunction(void* ptr) #endif (*vinfo->ActiveFlag) = 0; #if VTK_MAJOR_VERSION < 9 // change to std::mutex with v9.0.0 - vinfo->ActiveFlagLock->UnLock(); + vinfo->ActiveFlagLock->Unlock(); #else vinfo->ActiveFlagLock->unlock(); #endif From 67e116cf8a299df2d598215801c290758216b72d Mon Sep 17 00:00:00 2001 From: Simon Drouin Date: Mon, 2 Nov 2020 13:40:43 -0500 Subject: [PATCH 09/17] Several fixes to build with VTK 9.0.1 on Mac with GUI enabled and Video enabled. (#85) --- Devices/CMakeLists.txt | 1 + Devices/igtlioVideoDevice.cxx | 3 ++- GUI/CMakeLists.txt | 15 +++++++++++---- GUI/qIGTLIOClientWidget.cxx | 1 + GUI/qIGTLIOConnectorPropertyWidget.h | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Devices/CMakeLists.txt b/Devices/CMakeLists.txt index a31f924..a8d1742 100644 --- a/Devices/CMakeLists.txt +++ b/Devices/CMakeLists.txt @@ -3,6 +3,7 @@ project(igtlioDevices) set(${PROJECT_NAME}_EXPORT_DIRECTIVE "OPENIGTLINKIO_DEVICES_EXPORT") set(VTK_MODULES + ${IGTLIO_MODULE_PREFIX}CommonSystem ${IGTLIO_MODULE_PREFIX}IOImage ${IGTLIO_MODULE_PREFIX}ImagingMath ) diff --git a/Devices/igtlioVideoDevice.cxx b/Devices/igtlioVideoDevice.cxx index 0ee9653..55b2bb3 100644 --- a/Devices/igtlioVideoDevice.cxx +++ b/Devices/igtlioVideoDevice.cxx @@ -16,6 +16,7 @@ #include #include +#include #include "vtkMatrix4x4.h" //--------------------------------------------------------------------------- @@ -166,7 +167,7 @@ igtl::MessageBase::Pointer igtlioVideoDevice::GetIGTLMessage() { if (!Content.image) { - vtkWarningMacro("Video is NULL, message not generated.") + vtkWarningMacro("Video is NULL, message not generated."); return 0; } int imageSizePixels[3] = { 0 }; diff --git a/GUI/CMakeLists.txt b/GUI/CMakeLists.txt index 72c4497..5c0babf 100644 --- a/GUI/CMakeLists.txt +++ b/GUI/CMakeLists.txt @@ -2,13 +2,20 @@ project(igtlioGUI) set(${PROJECT_NAME}_EXPORT_DIRECTIVE "OPENIGTLINKIO_GUI_EXPORT") +set(VTK_MODULES + ${IGTLIO_MODULE_PREFIX}IOImage + ${IGTLIO_MODULE_PREFIX}ImagingMath + ${IGTLIO_MODULE_PREFIX}GUISupportQt +) + find_package(VTK REQUIRED NO_MODULE COMPONENTS - vtkIOImage - vtkImagingMath - vtkGUISupportQt + ${VTK_MODULES} ) -include(${VTK_USE_FILE}) + +if(VTK_VERSION VERSION_LESS 8.9.0) + include(${VTK_USE_FILE}) +endif() set(OpenIGTLinkIO_Qt_Modules Widgets diff --git a/GUI/qIGTLIOClientWidget.cxx b/GUI/qIGTLIOClientWidget.cxx index 0a48931..df968c0 100644 --- a/GUI/qIGTLIOClientWidget.cxx +++ b/GUI/qIGTLIOClientWidget.cxx @@ -5,6 +5,7 @@ #include "qIGTLIOConnectorListWidget.h" #include "qIGTLIODevicesWidget.h" #include "qIGTLIOCommandWidget.h" +#include "igtlioLogic.h" qIGTLIOClientWidget::qIGTLIOClientWidget() { diff --git a/GUI/qIGTLIOConnectorPropertyWidget.h b/GUI/qIGTLIOConnectorPropertyWidget.h index dcfbe71..38a5a3f 100644 --- a/GUI/qIGTLIOConnectorPropertyWidget.h +++ b/GUI/qIGTLIOConnectorPropertyWidget.h @@ -28,7 +28,7 @@ // igtlio includes #include "igtlioGUIExport.h" - +#include "igtlioConnector.h" #include typedef vtkSmartPointer igtlioConnectorPointer; From efc7ccc63dfc324147a65d20fe86ed881793861c Mon Sep 17 00:00:00 2001 From: Adam Rankin Date: Mon, 2 Nov 2020 13:49:38 -0500 Subject: [PATCH 10/17] COMP: remaining fixes for VTK 8.9+ build success --- Devices/igtlioDevice.h | 8 ++++++++ Examples/qIgtlClient/CMakeLists.txt | 10 ++++++---- Logic/igtlioCircularBuffer.h | 12 +++++++++++- Logic/igtlioCircularSectionBuffer.cxx | 1 + Logic/igtlioCircularSectionBuffer.h | 11 +++++++++++ Logic/igtlioCommand.h | 4 ++++ Logic/igtlioConnector.cxx | 3 ++- 7 files changed, 43 insertions(+), 6 deletions(-) diff --git a/Devices/igtlioDevice.h b/Devices/igtlioDevice.h index 97d589e..58992f5 100644 --- a/Devices/igtlioDevice.h +++ b/Devices/igtlioDevice.h @@ -15,15 +15,23 @@ #ifndef IGTLIODEVICE_H #define IGTLIODEVICE_H +// VTK includes #include #include + +// STL includes #include +// local includes #include "igtlioDevicesExport.h" #include "igtlioBaseConverter.h" typedef vtkSmartPointer igtlioDevicePointer; +#ifndef VTK_OVERRIDE +#define VTK_OVERRIDE override +#endif + /// A vtkIGTLIODevice represents one device connected over OpenIGTLink. /// /// The Device has a specific type, e.g. Image, Transform..., and diff --git a/Examples/qIgtlClient/CMakeLists.txt b/Examples/qIgtlClient/CMakeLists.txt index d3a3bd2..a04d54d 100644 --- a/Examples/qIgtlClient/CMakeLists.txt +++ b/Examples/qIgtlClient/CMakeLists.txt @@ -5,11 +5,13 @@ project(igtlioQtClient) # ========================================================= find_package(VTK REQUIRED NO_MODULE COMPONENTS - vtkIOImage - vtkImagingMath - vtkGUISupportQt + ${IGTLIO_MODULE_PREFIX}IOImage + ${IGTLIO_MODULE_PREFIX}ImagingMath + ${IGTLIO_MODULE_PREFIX}GUISupportQt ) -include(${VTK_USE_FILE}) +if(VTK_VERSION VERSION_LESS 8.9.0) + include(${VTK_USE_FILE}) +endif() set(${PROJECT_NAME}_SRCS main.cpp diff --git a/Logic/igtlioCircularBuffer.h b/Logic/igtlioCircularBuffer.h index 68a380b..a0651e8 100644 --- a/Logic/igtlioCircularBuffer.h +++ b/Logic/igtlioCircularBuffer.h @@ -10,19 +10,29 @@ #ifndef IGTLIOCIRCULARBUFFER_H #define IGTLIOCIRCULARBUFFER_H +// STL includes #include + +// VTK includes #include + +// OpenIGTLink includes #include + +// Local includes #include "igtlioLogicExport.h" #define IGTLCB_CIRC_BUFFER_SIZE 3 +#ifndef VTK_OVERRIDE + #define VTK_OVERRIDE override +#endif + class vtkMutexLock; class OPENIGTLINKIO_LOGIC_EXPORT igtlioCircularBuffer : public vtkObject { public: - static igtlioCircularBuffer *New(); vtkTypeMacro(igtlioCircularBuffer, vtkObject); diff --git a/Logic/igtlioCircularSectionBuffer.cxx b/Logic/igtlioCircularSectionBuffer.cxx index a204efe..ec3b487 100644 --- a/Logic/igtlioCircularSectionBuffer.cxx +++ b/Logic/igtlioCircularSectionBuffer.cxx @@ -188,6 +188,7 @@ void igtlioCircularSectionBuffer::EndPull() } +//--------------------------------------------------------------------------- bool igtlioCircularSectionBuffer::IsSectionBufferInProcess() { if (InUseBegin>=0) diff --git a/Logic/igtlioCircularSectionBuffer.h b/Logic/igtlioCircularSectionBuffer.h index 7ccc7dd..1e3ad34 100644 --- a/Logic/igtlioCircularSectionBuffer.h +++ b/Logic/igtlioCircularSectionBuffer.h @@ -10,9 +10,16 @@ #ifndef IGTLIOCIRCULARSECTIONBUFFER_H #define IGTLIOCIRCULARSECTIONBUFFER_H +// STL includes #include + +// VTK includes #include + +// OpenIGTLink includes #include + +// Local includes #include "igtlioLogicExport.h" #define IGTLCB_CIRC_BUFFER_SIZE 3 @@ -20,6 +27,10 @@ class vtkMutexLock; +#ifndef VTK_OVERRIDE +#define VTK_OVERRIDE override +#endif + class OPENIGTLINKIO_LOGIC_EXPORT igtlioCircularSectionBuffer : public vtkObject { public: diff --git a/Logic/igtlioCommand.h b/Logic/igtlioCommand.h index 94a30be..a6b1c1f 100644 --- a/Logic/igtlioCommand.h +++ b/Logic/igtlioCommand.h @@ -32,6 +32,10 @@ Ontario with funds provided by the Ontario Ministry of Health and Long-Term Care typedef vtkSmartPointer igtlioCommandPointer; +#ifndef VTK_OVERRIDE + #define VTK_OVERRIDE override +#endif + enum igtlioCommandStatus { CommandUnknown, diff --git a/Logic/igtlioConnector.cxx b/Logic/igtlioConnector.cxx index a57e317..a5229b7 100644 --- a/Logic/igtlioConnector.cxx +++ b/Logic/igtlioConnector.cxx @@ -28,14 +28,15 @@ Version: $Revision: 1.4 $ #include // VTK includes -#include #include +#include #include #include #include #include #include #include +#include // vtksys includes #include From d040b75ddc780daf3410baba0f83c3ddf04a3892 Mon Sep 17 00:00:00 2001 From: Adam Rankin Date: Mon, 2 Nov 2020 14:29:39 -0500 Subject: [PATCH 11/17] Update README.md --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a5cbd19..e4ff21a 100644 --- a/README.md +++ b/README.md @@ -25,11 +25,10 @@ cmake -G"generator_name" \ -DOpenIGTLink_DIR:PATH=path/to/igtl/build \ -DVTK_DIR:PATH=path/to/vtk/build \ -DCTK_DIR:PATH=path/to/ctk/build \ + -DQt5_DIR:PATH=path/to/Qt/lib/cmake/Qt5 path/to/source ``` -Make sure Qt 4 or 5 is in your path. - If you use a single configuration generator, you can explicitly select the configuration passing `-DCMAKE_BUILD_TYPE:STRING=Release` or `-DCMAKE_BUILD_TYPE:STRING=Debug`. List of available generator are listed [here](https://cmake.org/cmake/help/v3.8/manual/cmake-generators.7.html). @@ -45,7 +44,6 @@ The following is an example of how to build the library with all prerequisites: ```bash # prerequisites: # -# cmake is in path # qmake is in path mkdir ~/dev @@ -54,14 +52,14 @@ cd ~/dev git clone git@github.com:Kitware/VTK.git mkdir -p VTK_build cd VTK_build -cmake ../VTK -DVTK_QT_VERSION:STRING=5 -DModule_vtkGUISupportQt:BOOL=ON +cmake ../VTK -DVTK_QT_VERSION:STRING=5 -DModule_vtkGUISupportQt:BOOL=ON -DQt5_DIR:PATH=/path/to/Qt5/lib/cmake/Qt5 make -j6 cd .. git clone git@github.com:commontk/CTK.git mkdir -p CTK_build cd CTK_build -cmake ../CTK -DCTK_QT_VERSION:STRING=5 -DCTK_LIB_Visualization/VTK/Core:BOOL=ON -DVTK_DIR:PATH=~/dev/VTK_build -DBUILD_TESTING:BOOL=OFF +cmake ../CTK -DCTK_QT_VERSION:STRING=5 -DCTK_LIB_Visualization/VTK/Core:BOOL=ON -DVTK_DIR:PATH=~/dev/VTK_build -DBUILD_TESTING:BOOL=OFF -DQt5_DIR:PATH=/path/to/Qt5/lib/cmake/Qt5 make -j6 cd .. From f84fc17c409f51738e0b29ac20458d007b0341c7 Mon Sep 17 00:00:00 2001 From: Andras Lasso Date: Thu, 19 Nov 2020 21:33:07 -0500 Subject: [PATCH 12/17] BUG: Fixed conversionof POINT message Pack() call was missing. Added to ImageMeta and LabelMeta messages, too. --- Converter/igtlioImageMetaConverter.cxx | 1 + Converter/igtlioLabelMetaConverter.cxx | 1 + Converter/igtlioPointConverter.cxx | 20 ++++++++++++++++++-- Converter/igtlioTransformConverter.cxx | 16 +++++++++++----- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/Converter/igtlioImageMetaConverter.cxx b/Converter/igtlioImageMetaConverter.cxx index 6d674d6..0ced0f5 100644 --- a/Converter/igtlioImageMetaConverter.cxx +++ b/Converter/igtlioImageMetaConverter.cxx @@ -97,5 +97,6 @@ int igtlioImageMetaConverter::toIGTL(const HeaderData& header, const ContentData msg->AddImageMetaElement(imageMetaElement); } + msg->Pack(); return 1; } diff --git a/Converter/igtlioLabelMetaConverter.cxx b/Converter/igtlioLabelMetaConverter.cxx index 7df74ac..8595145 100644 --- a/Converter/igtlioLabelMetaConverter.cxx +++ b/Converter/igtlioLabelMetaConverter.cxx @@ -92,5 +92,6 @@ int igtlioLabelMetaConverter::toIGTL(const HeaderData& header, const ContentData msg->AddLabelMetaElement(labelMetaElement); } + msg->Pack(); return 1; } diff --git a/Converter/igtlioPointConverter.cxx b/Converter/igtlioPointConverter.cxx index 811d1d4..d946537 100644 --- a/Converter/igtlioPointConverter.cxx +++ b/Converter/igtlioPointConverter.cxx @@ -80,17 +80,33 @@ int igtlioPointConverter::toIGTL(const HeaderData& header, const ContentData& so igtl::MessageBase::Pointer basemsg = dynamic_pointer_cast(msg); HeadertoIGTL(header, &basemsg, metaInfo); + if (msg->GetNumberOfPointElement() > source.PointElements.size()) + { + // there is no API to delete a single element, so if we need to delete then we delete all + msg->ClearPointElement(); + } + int pointIndex = 0; for (PointList::const_iterator pointIt = source.PointElements.begin(); pointIt != source.PointElements.end(); ++pointIt) { - igtl::PointElement::Pointer pointElement = igtl::PointElement::New(); + igtl::PointElement::Pointer pointElement; + if (pointIndex < msg->GetNumberOfPointElement()) + { + msg->GetPointElement(pointIndex, pointElement); + } + else + { + pointElement = igtl::PointElement::New(); + msg->AddPointElement(pointElement); + } pointElement->SetName(pointIt->Name.c_str()); pointElement->SetGroupName(pointIt->GroupName.c_str()); pointElement->SetRGBA(pointIt->RGBA[0], pointIt->RGBA[1], pointIt->RGBA[2], pointIt->RGBA[3]); pointElement->SetPosition(pointIt->Position[0], pointIt->Position[1], pointIt->Position[2]); pointElement->SetRadius(pointIt->Radius); pointElement->SetOwner(pointIt->Owner.c_str()); - msg->AddPointElement(pointElement); + pointIndex++; } + msg->Pack(); return 1; } diff --git a/Converter/igtlioTransformConverter.cxx b/Converter/igtlioTransformConverter.cxx index 0f65f10..977d083 100644 --- a/Converter/igtlioTransformConverter.cxx +++ b/Converter/igtlioTransformConverter.cxx @@ -34,7 +34,6 @@ int igtlioTransformConverter::fromIGTL(igtl::MessageBase::Pointer source, // Deserialize the transform data // If CheckCRC==0, CRC check is skipped. int c = transMsg->Unpack(checkCRC); - if (!(c & igtl::MessageHeader::UNPACK_BODY)) // if CRC check fails { // TODO: error handling @@ -43,12 +42,15 @@ int igtlioTransformConverter::fromIGTL(igtl::MessageBase::Pointer source, // get header if (!IGTLtoHeader(dynamic_pointer_cast(transMsg), header, outMetaInfo)) + { return 0; + } // get additional transform header info if (!IGTLHeaderToTransformInfo(dynamic_pointer_cast(transMsg), dest)) + { return 0; - + } igtl::Matrix4x4 matrix; transMsg->GetMatrix(matrix); @@ -122,20 +124,24 @@ int igtlioTransformConverter::IGTLHeaderToTransformInfo(igtl::MessageBase::Point int igtlioTransformConverter::toIGTL(const HeaderData& header, const ContentData& source, igtl::TransformMessage::Pointer* dest, igtl::MessageBase::MetaDataMap metaInfo) { if (dest->IsNull()) + { *dest = igtl::TransformMessage::New(); + } (*dest)->InitPack(); igtl::TransformMessage::Pointer msg = *dest; if (!metaInfo.empty()) - { + { msg->SetHeaderVersion(IGTL_HEADER_VERSION_2); - } + } igtl::MessageBase::Pointer basemsg = dynamic_pointer_cast(msg); HeadertoIGTL(header, &basemsg, metaInfo); TransformMetaDataToIGTL(source, &basemsg); - if (source.transform.Get()==NULL) + if (source.transform.Get() == NULL) + { std::cerr << "Got NULL input transform" << std::endl; + } vtkSmartPointer matrix = source.transform; igtl::Matrix4x4 igtlmatrix; From 7e705acac1b47724727dba4aed6facfe1e071b74 Mon Sep 17 00:00:00 2001 From: Ole Vegard Solberg Date: Mon, 7 Dec 2020 16:47:24 +0100 Subject: [PATCH 13/17] Receive image spacing from image messages (#87) * Receive image spacing from image messages * Receive origin from image messages --- Converter/igtlioImageConverter.cxx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Converter/igtlioImageConverter.cxx b/Converter/igtlioImageConverter.cxx index 522b7d9..89cb993 100644 --- a/Converter/igtlioImageConverter.cxx +++ b/Converter/igtlioImageConverter.cxx @@ -115,6 +115,7 @@ int igtlioImageConverter::IGTLToVTKImageData(igtl::ImageMessage::Pointer imgMsg, // Retrieve the image data int size[3]; // image dimension float spacing[3]; // spacing (mm/pixel) + float origin[3]; // origin (mm) int svsize[3]; // sub-volume size int svoffset[3]; // sub-volume offset int scalarType; // VTK scalar type @@ -125,10 +126,11 @@ int igtlioImageConverter::IGTLToVTKImageData(igtl::ImageMessage::Pointer imgMsg, endian = imgMsg->GetEndian(); imgMsg->GetDimensions(size); imgMsg->GetSpacing(spacing); + imgMsg->GetOrigin(origin); numComponents = imgMsg->GetNumComponents(); imgMsg->GetSubVolume(svsize, svoffset); - // check if the IGTL data fits to the current MRML node + // check if the IGTL data fits to the current MRML node int sizeInNode[3]={0,0,0}; int scalarTypeInNode=VTK_VOID; int numComponentsInNode=0; @@ -139,7 +141,7 @@ int igtlioImageConverter::IGTLToVTKImageData(igtl::ImageMessage::Pointer imgMsg, scalarTypeInNode = imageData->GetScalarType(); numComponentsInNode = imageData->GetNumberOfScalarComponents(); } - + if (imageData.GetPointer()==NULL || sizeInNode[0] != size[0] || sizeInNode[1] != size[1] || sizeInNode[2] != size[2] || scalarType != scalarTypeInNode @@ -149,8 +151,8 @@ int igtlioImageConverter::IGTLToVTKImageData(igtl::ImageMessage::Pointer imgMsg, dest->image = imageData; imageData->SetDimensions(size[0], size[1], size[2]); imageData->SetExtent(0, size[0]-1, 0, size[1]-1, 0, size[2]-1); - imageData->SetOrigin(0.0, 0.0, 0.0); - imageData->SetSpacing(1.0, 1.0, 1.0); + imageData->SetOrigin(origin[0], origin[1], origin[2]); + imageData->SetSpacing(spacing[0], spacing[1], spacing[2]); #if (VTK_MAJOR_VERSION <= 5) imageData->SetNumberOfScalarComponents(numComponents); imageData->SetScalarType(scalarType); From 9a29ed7c6ca12b0f940685b4767f702f89502115 Mon Sep 17 00:00:00 2001 From: Kyle Sunderland Date: Tue, 23 Feb 2021 14:52:29 -0500 Subject: [PATCH 14/17] ENH: Mark received image data scalars as modified Triggers updates for attributes such as scalar range. --- Converter/igtlioImageConverter.cxx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Converter/igtlioImageConverter.cxx b/Converter/igtlioImageConverter.cxx index 89cb993..fd5aebd 100644 --- a/Converter/igtlioImageConverter.cxx +++ b/Converter/igtlioImageConverter.cxx @@ -19,8 +19,10 @@ #include #include +#include #include #include +#include #include namespace // unnamed namespace @@ -286,7 +288,13 @@ int igtlioImageConverter::IGTLToVTKImageData(igtl::ImageMessage::Pointer imgMsg, } } - + + // Mark scalars as modified + // This is required for getting up-to-date scalar range. + if (imageData->GetPointData() && imageData->GetPointData()->GetScalars()) + { + imageData->GetPointData()->GetScalars()->Modified(); + } imageData->Modified(); return 1; From 3cf83784d7969d100b357e8372ef03ede8f16bba Mon Sep 17 00:00:00 2001 From: Adam Rankin Date: Mon, 21 Jun 2021 10:27:35 -0400 Subject: [PATCH 15/17] ENH: Updating functions to new 64 bit igtl API (#89) --- Logic/igtlioConnector.cxx | 22 +++++++++++++--------- Logic/igtlioConnector.h | 4 ++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/Logic/igtlioConnector.cxx b/Logic/igtlioConnector.cxx index a5229b7..4520559 100644 --- a/Logic/igtlioConnector.cxx +++ b/Logic/igtlioConnector.cxx @@ -457,7 +457,8 @@ bool igtlioConnector::ReceiveController(int clientID) vtkDebugMacro("Waiting for header of size: " << headerMsg->GetPackSize()); // This may need to be parallelized so that other socket aren't waiting on timeouts - int r = client.Socket->Receive(headerMsg->GetPackPointer(), headerMsg->GetPackSize()); + bool timeout(false); + int r = client.Socket->Receive(headerMsg->GetPackPointer(), headerMsg->GetPackSize(), timeout); vtkDebugMacro("Received header of size: " << headerMsg->GetPackSize()); @@ -540,7 +541,8 @@ bool igtlioConnector::ReceiveController(int clientID) vtkDebugMacro("Waiting to receive body: size=" << buffer->GetPackBodySize() << ", GetBodySizeToRead=" << buffer->GetBodySizeToRead() << ", GetPackSize=" << buffer->GetPackSize()); - int read = client.Socket->Receive(buffer->GetPackBodyPointer(), buffer->GetPackBodySize()); + bool timeout(false); + int read = client.Socket->Receive(buffer->GetPackBodyPointer(), buffer->GetPackBodySize(), timeout); vtkDebugMacro("Received body: " << read); if (read != buffer->GetPackBodySize()) { @@ -574,7 +576,8 @@ bool igtlioConnector::ReceiveCommandMessage(igtl::MessageHeader::Pointer headerM vtkDebugMacro("Waiting to receive body: size=" << buffer->GetBufferBodySize() << ", GetBodySizeToRead=" << buffer->GetBodySizeToRead() << ", GetPackSize=" << buffer->GetPackSize()); - int read = client.Socket->Receive(buffer->GetBufferBodyPointer(), buffer->GetBufferBodySize()); + bool timeout(false); + int read = client.Socket->Receive(buffer->GetBufferBodyPointer(), buffer->GetBufferBodySize(), timeout); vtkDebugMacro("Received body: " << read); if (read != buffer->GetBufferBodySize()) { @@ -592,7 +595,7 @@ bool igtlioConnector::ReceiveCommandMessage(igtl::MessageHeader::Pointer headerM } //---------------------------------------------------------------------------- -int igtlioConnector::SendData(int size, unsigned char* data, Client& client) +int igtlioConnector::SendData(igtlUint64 size, unsigned char* data, Client& client) { if (client.Socket.IsNull()) { @@ -609,12 +612,12 @@ int igtlioConnector::SendData(int size, unsigned char* data, Client& client) } //---------------------------------------------------------------------------- -int igtlioConnector::Skip(int length, Client& client, int skipFully /* = 1 */) +int igtlioConnector::Skip(igtlUint64 length, Client& client, int skipFully /* = 1 */) { unsigned char dummy[256]; - int block = 256; - int n = 0; - int remain = length; + igtlUint64 block = 256; + igtlUint64 n = 0; + igtlUint64 remain = length; do { @@ -623,7 +626,8 @@ int igtlioConnector::Skip(int length, Client& client, int skipFully /* = 1 */) block = remain; } - n = client.Socket->Receive(dummy, block, skipFully); + bool timeout(false); + n = client.Socket->Receive(dummy, block, timeout, skipFully); remain -= n; } while (remain > 0 || (skipFully && n < block)); diff --git a/Logic/igtlioConnector.h b/Logic/igtlioConnector.h index 7db8190..46a6814 100644 --- a/Logic/igtlioConnector.h +++ b/Logic/igtlioConnector.h @@ -265,8 +265,8 @@ class OPENIGTLINKIO_LOGIC_EXPORT igtlioConnector : public vtkIGTLIOObject // OpenIGTLink Message handlers //---------------------------------------------------------------- bool ReceiveController(int clientID); // called from Thread - int SendData(int size, unsigned char* data, Client& client); - int Skip(int length, Client& client, int skipFully=1); + int SendData(igtlUint64 size, unsigned char* data, Client& client); + int Skip(igtlUint64 length, Client& client, int skipFully=1); //---------------------------------------------------------------- // Clients From 5fefdfba28dc5ee095f8c5888f8b548e0e5bc4b2 Mon Sep 17 00:00:00 2001 From: "C. G" Date: Mon, 18 Oct 2021 15:14:27 +0200 Subject: [PATCH 16/17] Minor fix for project usage as a subproject of another cmake project (#91) Fixes #90 Co-authored-by: Charles Garraud --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index edf0c1b..e010b6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,7 +179,7 @@ install(EXPORT OpenIGTLinkIO FILE "OpenIGTLinkIOTargets.cmake" ) -install(FILES ${CMAKE_BINARY_DIR}/CMakeFiles/install/OpenIGTLinkIOConfig.cmake +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/install/OpenIGTLinkIOConfig.cmake DESTINATION "${OpenIGTLinkIO_PACKAGE_INSTALL}" COMPONENT CMakeFiles ) From bd6f65db20c5f66080ef00204b6393de81b7eafd Mon Sep 17 00:00:00 2001 From: LauraConnolly <15lpc1@queensu.ca> Date: Tue, 23 Nov 2021 13:14:27 -0500 Subject: [PATCH 17/17] Replaced the igtlioNDArrayConverter.cxx code with the up to date copy! --- Converter/igtlioNDArrayConverter.cxx | 53 +++++++++++++++------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/Converter/igtlioNDArrayConverter.cxx b/Converter/igtlioNDArrayConverter.cxx index 2026068..d9508a4 100644 --- a/Converter/igtlioNDArrayConverter.cxx +++ b/Converter/igtlioNDArrayConverter.cxx @@ -2,50 +2,55 @@ #include "igtlNDArrayMessage.h" #include #include +#include +#include +#include int igtlioNDArrayConverter::fromIGTL(igtl::MessageBase::Pointer source, - HeaderData* header, - ContentData* dest, - bool checkCRC, - igtl::MessageBase::MetaDataMap& outMetaInfo) + HeaderData* header, + ContentData* dest, + bool checkCRC, + igtl::MessageBase::MetaDataMap& outMetaInfo) { igtl::NDArrayMessage::Pointer msg; msg = igtl::NDArrayMessage::New(); msg->Copy(source); int c = msg->Unpack(checkCRC); - - - cbcbcpa if ((c & igtl::MessageHeader::UNPACK_BODY == 0)) - { + { return 0; - } + } if (!IGTLtoHeader(dynamic_pointer_cast(msg), header, outMetaInfo)) return 0; - vtkSmartPointer NDArray_msg = dest->NDArray_msg; - NDArray_msg->Allocate(msg->GetPackSize()); - memcpy(NDArray_msg->GetVoidPointer(0), msg->GetPackPointer(), msg->GetBodySizeToRead()); - dest->NDArray_msg = NDArray_msg; + vtkSmartPointer collection = vtkSmartPointer::New(); + + for (int i = 0; i < msg->GetArray()->GetSize()[0]; ++i) { + vtkSmartPointer NDArray_msg = vtkSmartPointer::New(); + NDArray_msg->SetNumberOfTuples(msg->GetArray()->GetSize()[0]); + memcpy(NDArray_msg->GetPointer(0), static_cast(msg->GetArray()->GetRawArray()) + (NDArray_msg->GetDataSize() * NDArray_msg->GetDataTypeSize() * i), NDArray_msg->GetDataSize() * NDArray_msg->GetDataTypeSize()); + collection->AddItem(NDArray_msg); + } + dest->collection = collection; return 1; } int igtlioNDArrayConverter::toIGTL(const HeaderData& header, const ContentData& source, igtl::NDArrayMessage::Pointer* dest, igtl::MessageBase::MetaDataMap metaInfo) { - if (dest->IsNull()) - *dest = igtl::NDArrayMessage::New(); - (*dest)->InitPack(); - igtl::NDArrayMessage::Pointer msg = *dest; + if (dest->IsNull()) + *dest = igtl::NDArrayMessage::New(); + (*dest)->InitPack(); + igtl::NDArrayMessage::Pointer msg = *dest; - if (!metaInfo.empty()) + if (!metaInfo.empty()) { - msg->SetHeaderVersion(IGTL_HEADER_VERSION_2); + msg->SetHeaderVersion(IGTL_HEADER_VERSION_2); } - igtl::MessageBase::Pointer basemsg = dynamic_pointer_cast(msg); - HeadertoIGTL(header, &basemsg, metaInfo); - - msg->Pack(); - return 1; + igtl::MessageBase::Pointer basemsg = dynamic_pointer_cast(msg); + HeadertoIGTL(header, &basemsg, metaInfo); + + msg->Pack(); + return 1; } \ No newline at end of file