From 8437087b15126cc4f6bdd477c50d4c0c1c56e65e Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Wed, 3 Sep 2014 09:21:49 -0400 Subject: [PATCH 01/11] Start implementing qDataReadingTracker class. --- CMakeLists.txt | 3 +- OpenIGTLinkSimulatorApp.cpp | 144 ++++++++++++++++----- OpenIGTLinkSimulatorApp.h | 7 +- OpenIGTLinkSimulatorWindow.ui | 9 ++ igtlTCPConnectorBase.cxx | 8 +- qDataGeneratorBase.cpp | 21 +++ qDataGeneratorBase.h | 4 +- qDataGeneratorTracking.cpp | 8 +- qDataReadingTracker.cpp | 233 ++++++++++++++++++++++++++++++++++ qDataReadingTracker.h | 60 +++++++++ 10 files changed, 453 insertions(+), 44 deletions(-) create mode 100644 qDataReadingTracker.cpp create mode 100644 qDataReadingTracker.h diff --git a/CMakeLists.txt b/CMakeLists.txt index aeea4c2..4881b53 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,13 +44,14 @@ set(OpenIGTLinkSimulator_SOURCES OpenIGTLinkSimulatorApp.cpp qDataGeneratorBase.cpp qDataGeneratorTracking.cpp + qDataReadingTracker.cpp igtlTCPConnectorBase.cxx igtlTCPConnectorServer.cxx igtlTCPConnectorClient.cxx igtlTCPConnectorServerOIGTL.cxx ) -set(OpenIGTLinkSimulator_HEADERS OpenIGTLinkSimulatorApp.h qDataGeneratorBase.h qDataGeneratorTracking.h) +set(OpenIGTLinkSimulator_HEADERS OpenIGTLinkSimulatorApp.h qDataGeneratorBase.h qDataGeneratorTracking.h qDataReadingTracker.h) set(OpenIGTLinkSimulator_FORMS OpenIGTLinkSimulatorWindow.ui) #set(OpenIGTLinkSimulator_RESOURCES images.qrc) diff --git a/OpenIGTLinkSimulatorApp.cpp b/OpenIGTLinkSimulatorApp.cpp index 9690ca7..8052ca1 100644 --- a/OpenIGTLinkSimulatorApp.cpp +++ b/OpenIGTLinkSimulatorApp.cpp @@ -13,6 +13,7 @@ #include #include +#include #include "OpenIGTLinkSimulatorApp.h" @@ -24,6 +25,7 @@ #include "igtlOSUtil.h" #include "igtlTCPConnectorServerOIGTL.h" #include "qDataGeneratorTracking.h" +#include "qDataReadingTracker.h" const int OpenIGTLinkSimulatorApp::StatusColorTable[][3] = { {100, 100, 100}, // STOP @@ -47,8 +49,13 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) fClientActive = false; // Signals and Slots + connect(pbFilename, SIGNAL( clicked() ), this, SLOT( getPath() )); + connect(rbTrackingRandom, SIGNAL( clicked() ), this, SLOT( disable() )); + connect(rbTrackingFile, SIGNAL( clicked() ), this, SLOT( enable() )); connect(pbQuit, SIGNAL( clicked() ), this, SLOT( quit() )); connect(pbAbout, SIGNAL( clicked() ), this, SLOT( about() )); + /*corrupt*/ // connect(rbTrackingRandom, SIGNAL( clicked() ), this, SLOT( generate() )); +// connect(leFilename, SIGNAL( textChanged()), this, SLOT( generate()); //connect(pbScannerActivate, SIGNAL( clicked() ), this, SLOT( scannerActivateClicked() )); connect(pbClientActivate, SIGNAL( clicked() ), this, SLOT( clientActivateClicked() )); @@ -60,7 +67,7 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) // this, SLOT( imagePortChanged( const QString & ) )); connect(leOpenIGTLinkPort, SIGNAL( textChanged( const QString & ) ), this, SLOT( igtlPortChanged( const QString & ) )); - + // Default values QString qs; //leScannerAddress->setText(DEFAULT_RMP_ADDR); @@ -71,33 +78,87 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus())); timer->start(200); - // Data Generator - this->TrackingDataGenerator = new qDataGeneratorTracking(); - - //// OpenIGTLink Server Socket - oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); - oigtlConnector->SetPort(18944); - - this->TrackingDataGenerator->SetConnector(oigtlConnector); - this->TrackingDataGenerator->Start(); - this->Threader = igtl::MultiThreader::New(); - this->Threader->SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, - oigtlConnector); - + //Data Generator for Random + this->TrackingDataGenerator = new qDataGeneratorTracking(); + + //// OpenIGTLink Server Socket + oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); + oigtlConnector->SetPort(18944); + + this->TrackingDataGenerator->SetConnector(oigtlConnector); + this->TrackingDataGenerator->Start(); + this->Threader = igtl::MultiThreader::New(); + this->Threader->SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector); + // } } + + // Data Generator for File +void OpenIGTLinkSimulatorApp::generate(std::string path){ + // this->TrackingDataGenerator->Stop(); + + // Default values +// QString qs; + //leScannerAddress->setText(DEFAULT_RMP_ADDR); +// leOpenIGTLinkPort->setText(qs.setNum(DEFAULT_OIGTL_PORT)); + + // Time for GUI update (every 200 ms) +// timer = new QTimer(this); +// connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus())); +// timer->start(200); + + //Generating + if(path != " "){ + this->TrackingDataReader = new qDataReadingTracker(); + } + // OpenIGTLink Server Socket + oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); + oigtlConnector->SetPort(18944); - + this->TrackingDataReader->SetConnector(oigtlConnector); + this->TrackingDataReader->Start(); + this->Threader = igtl::MultiThreader::New(); + this->Threader-> SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector); + + } + + + + +void OpenIGTLinkSimulatorApp::disable( ) +{ + // if(a == 1) + pbFilename->setEnabled(false); +} +void OpenIGTLinkSimulatorApp::enable( ) +{ + // if(a == 1) + pbFilename->setEnabled(true); +} + void OpenIGTLinkSimulatorApp::getPath() { - QString path; - + QString path = QFileDialog::getOpenFileName(this, + tr("Open File"), "/Users", + tr("CSV Files (*.csv);;Text Files (*.txt)")); + if(path != " "){ + QFile file(path); + if(!file.open(QIODevice::ReadOnly)) { + QMessageBox::critical(this, tr("Error"), tr("Could not open file")); + return; + } + QTextStream in(&file); + leFilename->setText( path ); + file.close(); + } + std::string pathString = path.toUtf8().constData(); + OpenIGTLinkSimulatorApp::generate(pathString); //path = QFileDialog::getOpenFileName( // this, // "Choose a file to open", // QString::null, // QString::null); // - //lineEdit->setText( path ); + // lineEdit->setText( path ); } @@ -129,28 +190,42 @@ void OpenIGTLinkSimulatorApp::scannerActivateClicked() void OpenIGTLinkSimulatorApp::clientActivateClicked() { - if (fClientActive) + + if (fClientActive) //if Activated and data selected { - fClientActive = false; - if (oigtlConnector.IsNotNull()) - { - oigtlConnector->Deactivate(); - } + fClientActive = false; + if (oigtlConnector.IsNotNull()) + { + oigtlConnector->Deactivate(); + } + rbTrackingFile->setEnabled(true); + rbTrackingRandom->setEnabled(true); + if (rbTrackingFile->isChecked()) pbFilename->setEnabled(true); } - else + + + //else if(!fClientActive && !rbTrackingFile->isChecked() && !rbTrackingRandom->isChecked()) + //QMessageBox::critical(this, tr("Error"), tr("Data source not selected!")); + else if(rbTrackingFile->isChecked() && leFilename->text()=="") + QMessageBox::critical(this, tr("Error"), tr("File not selected!")); + + else //if Deactivated and data selected. { - fClientActive = true; - if (oigtlConnector.IsNotNull()) - { - std::cerr << "Activating OpenIGTLink connector with:" << std::endl; - std::cerr << " Port: " << igtlPort.toInt() << std::endl; - oigtlConnector->SetPort(igtlPort.toInt()); - oigtlConnector->Activate(); - } + fClientActive = true; + if (oigtlConnector.IsNotNull()) + { + std::cerr << "Activating OpenIGTLink connector with:" << std::endl; + std::cerr << " Port: " << igtlPort.toInt() << std::endl; + oigtlConnector->SetPort(igtlPort.toInt()); + oigtlConnector->Activate(); + } + rbTrackingFile->setEnabled(false); + rbTrackingRandom->setEnabled(false); + pbFilename->setEnabled(false); } + } - void OpenIGTLinkSimulatorApp::scannerAddressChanged( const QString & text ) { scannerAddress = text; @@ -215,6 +290,7 @@ void OpenIGTLinkSimulatorApp::updateStatus() pbClientActivate->setText("Deactivate"); } } + else{ pbAbout->setEnabled(false);} //bool editScannerFlag = true; //leScannerAddress->setEnabled(editScannerFlag); //leControlPort->setEnabled(editScannerFlag); diff --git a/OpenIGTLinkSimulatorApp.h b/OpenIGTLinkSimulatorApp.h index ec46f30..1e29c62 100644 --- a/OpenIGTLinkSimulatorApp.h +++ b/OpenIGTLinkSimulatorApp.h @@ -20,6 +20,7 @@ #include "igtlMultiThreader.h" #include "igtlTCPConnectorServerOIGTL.h" #include "qDataGeneratorTracking.h" +#include "qDataReadingTracker.h" #define DEFAULT_OIGTL_PORT 18944 #define DEFAULT_SPICE_PORT 2000 @@ -43,7 +44,10 @@ class OpenIGTLinkSimulatorApp : public QMainWindow, private Ui::OpenIGTLinkSimul public slots: void getPath(); void about(); - + void enable(); + void disable(); + void generate(std::string); + void scannerActivateClicked(); void clientActivateClicked(); @@ -65,6 +69,7 @@ public slots: igtl::TCPConnectorServerOIGTL::Pointer oigtlConnector; qDataGeneratorTracking* TrackingDataGenerator; + qDataReadingTracker* TrackingDataReader; bool fScannerActive; bool fClientActive; diff --git a/OpenIGTLinkSimulatorWindow.ui b/OpenIGTLinkSimulatorWindow.ui index 9726e5b..d9e29c6 100644 --- a/OpenIGTLinkSimulatorWindow.ui +++ b/OpenIGTLinkSimulatorWindow.ui @@ -154,6 +154,9 @@ Ramdom + + rbgDataSource + @@ -161,6 +164,9 @@ From File + + rbgDataSource + @@ -278,4 +284,7 @@ + + + diff --git a/igtlTCPConnectorBase.cxx b/igtlTCPConnectorBase.cxx index 4d83d89..d56ea80 100644 --- a/igtlTCPConnectorBase.cxx +++ b/igtlTCPConnectorBase.cxx @@ -65,6 +65,9 @@ void TCPConnectorBase::MonitorThreadFunction(void * ptr) con->Active = 0; if (!con->Initialize()) { + // while(!con->Initialize()){ + + // } std::cerr << "TCPConnectorBase::MonitorThreadFunction(): Failed to initialize a server socket." << std::endl; return; } @@ -100,9 +103,8 @@ void TCPConnectorBase::MonitorThreadFunction(void * ptr) con->Finalize(); } - -} // End of igtl namespace - + // End of igtl namespace +} diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index c080584..106ccfe 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -71,6 +71,7 @@ void qDataGeneratorBase::ProcessTimer() this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) { igtl::MessageBase::Pointer message; +// if(filename==""){ this->GenerateData(message); if (message.IsNotNull()) { @@ -79,6 +80,26 @@ void qDataGeneratorBase::ProcessTimer() } } +//------------------------------------------------------------------------------ +void qDataGeneratorBase::ProcessTimer(std::string filename) +{ + + if (this->Connector.IsNotNull() && + this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) + { + igtl::MessageBase::Pointer message; + if(filename==""){ + this->GenerateData(message); + } + else{ + this->ReadData(message, filename); + } + if (message.IsNotNull()) + { + this->Connector->PushMessage(message); + } + } +} diff --git a/qDataGeneratorBase.h b/qDataGeneratorBase.h index 5dfcf56..3417335 100644 --- a/qDataGeneratorBase.h +++ b/qDataGeneratorBase.h @@ -50,11 +50,13 @@ class IGTLCommon_EXPORT qDataGeneratorBase : public QObject protected slots: - void ProcessTimer(); + void ProcessTimer(std::string); + void ProcessTimer(); protected: virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * NOTUSED(connector)) {}; virtual void GenerateData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; + virtual void ReadData(igtl::MessageBase::Pointer& NOTUSED(data), std::string) {}; protected: diff --git a/qDataGeneratorTracking.cpp b/qDataGeneratorTracking.cpp index 723aa39..1ee71e5 100644 --- a/qDataGeneratorTracking.cpp +++ b/qDataGeneratorTracking.cpp @@ -170,14 +170,14 @@ void qDataGeneratorTracking::GetRandomTestMatrix(igtl::Matrix4x4& matrix, float float orientation[4]; // random position - position[0] = 50.0 * cos(phi); - position[1] = 50.0 * sin(phi); + position[0] = 50.0 * cos(phi) + 50.0 * sin(phi); + position[1] = 50.0 * sin(phi*phi); position[2] = 50.0 * cos(phi); phi = phi + 0.2; // random orientation orientation[0]=0.0; - orientation[1]=0.6666666666*cos(theta); + orientation[1]=cos(theta); orientation[2]=0.577350269189626; orientation[3]=0.6666666666*sin(theta); theta = theta + 0.1; @@ -189,7 +189,7 @@ void qDataGeneratorTracking::GetRandomTestMatrix(igtl::Matrix4x4& matrix, float matrix[1][3] = position[1]; matrix[2][3] = position[2]; - //igtl::PrintMatrix(matrix); + igtl::PrintMatrix(matrix); } diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp new file mode 100644 index 0000000..24d8a70 --- /dev/null +++ b/qDataReadingTracker.cpp @@ -0,0 +1,233 @@ +/*========================================================================= + + Program: Data Reading Tracking Class for OpenIGTLink Simulator + Language: C++ + + Copyright (c) Brigham and Women's Hospital. All rights reserved. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ +#include +#include +#include +#include +#include +#include +#include +#include "qDataReadingTracker.h" + +//#include "ui_OpenIGTLinkSimulatorWindow.h" + +//----------------------------------------------------------------------------- +qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() +{ + + //------------------------------------------------------------ + // Allocate TrackingData Message Class + // + // NOTE: TrackingDataElement class instances are allocated + // before the loop starts to avoid reallocation + // in each image transfer. + + //setupUI(this); + this->TrackingMsg = igtl::TrackingDataMessage::New(); + this->TrackingMsg->SetDeviceName("Tracker"); + + this->NumberOfChannels = 3; + + this->TrackingElement.resize(this->NumberOfChannels); + this->Phi.resize(this->NumberOfChannels); + this->Theta.resize(this->NumberOfChannels); + + this->fTracking = 0; + + for (int i = 0; i < this->NumberOfChannels; i ++) + { + std::stringstream ss; + ss << "Channel " << i; + this->TrackingElement[i] = igtl::TrackingDataElement::New(); + this->TrackingElement[i]->SetName(ss.str().c_str()); + this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); + this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); + //this->Phi[i] = 0.0; + //this->Theta[i] = 0.0; + } +} + + +//----------------------------------------------------------------------------- +qDataReadingTracker::~qDataReadingTracker() +{ +} + + +//----------------------------------------------------------------------------- +void qDataReadingTracker::RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector) +{ + connector->RegisterMessageHandler("STT_TDATA", this); + connector->RegisterMessageHandler("STP_TDATA", this); +} + + +//---------------------------------------------------------------------------- +void qDataReadingTracker::ReadData(igtl::MessageBase::Pointer& data, std::string filename) +{ + + if (this->fTracking) + { + igtl::Matrix4x4 matrix; + igtl::TrackingDataElement::Pointer ptr; + + for (int i = 0; i < this->NumberOfChannels; i ++) + { + this->TrackingMsg->GetTrackingDataElement(i, ptr); + GetFileMatrix(matrix,filename); + ptr->SetMatrix(matrix); + //this->Phi[i] += 0.1*(float)(i+1); + //this->Theta[i] += 0.05*(float)(i+1); + } + + this->TrackingMsg->Pack(); + data = this->TrackingMsg; + // } + } +} + + +//------------------------------------------------------------ +int qDataReadingTracker::HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header) +{ + + std::cerr << "qDataReadingTracker::HandleReceivedMessage() : " << header->GetDeviceType() << std::endl; + + if (strcmp(header->GetDeviceType(), "STT_TDATA") == 0) + { + igtl::StartTrackingDataMessage::Pointer sttMsg; + sttMsg = igtl::StartTrackingDataMessage::New(); + sttMsg->SetMessageHeader(header); + sttMsg->AllocatePack(); + + if (socket && socket->GetConnected()) + { + int r = socket->Receive(sttMsg->GetPackBodyPointer(), sttMsg->GetPackBodySize()); + if (r == 0) + { + // Connection closed. + return 0; + } + } + else + { + return 0; + } + + int c = sttMsg->Unpack(1); + + if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK + { + int interval = sttMsg->GetResolution(); + if (interval > 100) + this->SetInterval(interval); + this->fTracking = 1; + return 1; + } + } + else if (strcmp(header->GetDeviceType(), "STP_TDATA") == 0) + { + igtl::StopTrackingDataMessage::Pointer stpMsg; + stpMsg = igtl::StopTrackingDataMessage::New(); + stpMsg->SetMessageHeader(header); + stpMsg->AllocatePack(); + if (socket && socket->GetConnected()) + { + int r = socket->Receive(stpMsg->GetPackBodyPointer(), stpMsg->GetPackBodySize()); + if (r == 0) + { + // Connection closed. + return 0; + } + } + else + { + return 0; + } + + int c = stpMsg->Unpack(1); + if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK + { //up to here + this->fTracking = 0; + return 1; + } + } + return 1; + +} + + +//------------------------------------------------------------ +void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string filename) +{ + float temp; + const char * ccpfilename = filename.c_str(); + FILE *myfile = fopen(ccpfilename, "r"); + // std::ifstream myfile ( filename ); + // int value=0; + //std::string line; +// std::istream& getline(); + //std::ifstream line; +// // while(!myfile.eof()){ + for(int i=0;i<=4;i++){ + for(int j=0;j<=4;j++){ + // if(!myfile.eof()){ + //std::getline(myfile, line); +// getline(myfile, line); +// getline(line, value, " "); + std::fscanf(myfile, "%f ", &temp); + // if(temp==" ")continue; + matrix[i][j]=temp; + } + } + igtl::PrintMatrix(matrix); + fclose(myfile); + } +// // } + + + + /* + float position[3]; + float orientation[4]; + + // random position + position[0] = 50.0 * cos(phi); + position[1] = 50.0 * sin(phi); + position[2] = 50.0 * cos(phi); + phi = phi + 0.2; + + // random orientation + orientation[0]=0.0; + orientation[1]=0.6666666666*cos(theta); + orientation[2]=0.577350269189626; + orientation[3]=0.6666666666*sin(theta); + theta = theta + 0.1; + + //igtl::Matrix4x4 matrix; + igtl::QuaternionToMatrix(orientation, matrix); + + matrix[0][3] = position[0]; + matrix[1][3] = position[1]; + matrix[2][3] = position[2]; + + igtl::PrintMatrix(matrix); + // teIncomingData->setText( matrix ); + */ + + + + + + + diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h new file mode 100644 index 0000000..d10ee5e --- /dev/null +++ b/qDataReadingTracker.h @@ -0,0 +1,60 @@ +/*========================================================================= + + Program: Data Reading Tracking Class for OpenIGTLink Simulator + Language: C++ + + Copyright (c) Brigham and Women's Hospital. All rights reserved. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ + +#ifndef __qDataReadingTracking_H +#define __qDataReadingTracking_H + +#include "qDataGeneratorBase.h" +#include "igtlTrackingDataMessage.h" + +class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase +{ + Q_OBJECT + +public: + + qDataReadingTracker(); + virtual ~qDataReadingTracker(); + + virtual const char * GetClassName() { return "qDataReadingTracking"; }; + + +protected: + + virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); + virtual void ReadData(igtl::MessageBase::Pointer& data, std::string); + + virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); + + // Function to Read matrix. + void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); + + +protected: + + igtl::TrackingDataMessage::Pointer TrackingMsg; + std::vector TrackingElement; + + std::vector< float > Phi; + std::vector< float > Theta; + + int NumberOfChannels; + + int fTracking; + +}; + +#endif + + + From 9f8e935a71bf0d237167a101819a8076f52c4045 Mon Sep 17 00:00:00 2001 From: Junichi Tokuda Date: Wed, 3 Sep 2014 11:06:16 -0400 Subject: [PATCH 02/11] Restructure void OpenIGTLinkSimulatorApp::clientActivateClicked(). --- OpenIGTLinkSimulatorApp.cpp | 95 +++++++++++++++++++++---------------- OpenIGTLinkSimulatorApp.h | 14 +++--- qDataReadingTracker.cpp | 6 +++ qDataReadingTracker.h | 7 +++ 4 files changed, 74 insertions(+), 48 deletions(-) diff --git a/OpenIGTLinkSimulatorApp.cpp b/OpenIGTLinkSimulatorApp.cpp index 8052ca1..56d8350 100644 --- a/OpenIGTLinkSimulatorApp.cpp +++ b/OpenIGTLinkSimulatorApp.cpp @@ -77,51 +77,47 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus())); timer->start(200); - - //Data Generator for Random - this->TrackingDataGenerator = new qDataGeneratorTracking(); - - //// OpenIGTLink Server Socket - oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); - oigtlConnector->SetPort(18944); + + //Data Generator for Random + this->TrackingDataGenerator = new qDataGeneratorTracking(); + this->TrackingDataReader = new qDataReadingTracker(); + + //// OpenIGTLink Server Socket + oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); + oigtlConnector->SetPort(18944); - this->TrackingDataGenerator->SetConnector(oigtlConnector); - this->TrackingDataGenerator->Start(); - this->Threader = igtl::MultiThreader::New(); - this->Threader->SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector); + //this->TrackingDataGenerator->SetConnector(oigtlConnector); + //this->TrackingDataGenerator->Start(); + + this->Threader = igtl::MultiThreader::New(); + this->Threader->SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector); // } } // Data Generator for File -void OpenIGTLinkSimulatorApp::generate(std::string path){ - // this->TrackingDataGenerator->Stop(); - - // Default values -// QString qs; - //leScannerAddress->setText(DEFAULT_RMP_ADDR); -// leOpenIGTLinkPort->setText(qs.setNum(DEFAULT_OIGTL_PORT)); - - // Time for GUI update (every 200 ms) -// timer = new QTimer(this); -// connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus())); -// timer->start(200); - - //Generating - if(path != " "){ - this->TrackingDataReader = new qDataReadingTracker(); - } - // OpenIGTLink Server Socket - oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); - oigtlConnector->SetPort(18944); - - this->TrackingDataReader->SetConnector(oigtlConnector); - this->TrackingDataReader->Start(); - this->Threader = igtl::MultiThreader::New(); - this->Threader-> SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector); - - } - - +//void OpenIGTLinkSimulatorApp::generate(std::string path){ +// // this->TrackingDataGenerator->Stop(); +// +// // Default values +//// QString qs; +// //leScannerAddress->setText(DEFAULT_RMP_ADDR); +//// leOpenIGTLinkPort->setText(qs.setNum(DEFAULT_OIGTL_PORT)); +// +// // Time for GUI update (every 200 ms) +//// timer = new QTimer(this); +//// connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus())); +//// timer->start(200); +// +// // OpenIGTLink Server Socket +// //oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); +// oigtlConnector->SetPort(18944); +// +// this->TrackingDataReader->SetConnector(oigtlConnector); +// this->TrackingDataReader->Start(); +// this->Threader = igtl::MultiThreader::New(); +// this->Threader-> SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector); +// +// } void OpenIGTLinkSimulatorApp::disable( ) @@ -150,8 +146,8 @@ void OpenIGTLinkSimulatorApp::getPath() leFilename->setText( path ); file.close(); } - std::string pathString = path.toUtf8().constData(); - OpenIGTLinkSimulatorApp::generate(pathString); + this->PathString = path.toUtf8().constData(); + //OpenIGTLinkSimulatorApp::generate(pathString); //path = QFileDialog::getOpenFileName( // this, // "Choose a file to open", @@ -212,6 +208,7 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() else //if Deactivated and data selected. { fClientActive = true; + if (oigtlConnector.IsNotNull()) { std::cerr << "Activating OpenIGTLink connector with:" << std::endl; @@ -219,9 +216,23 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() oigtlConnector->SetPort(igtlPort.toInt()); oigtlConnector->Activate(); } + rbTrackingFile->setEnabled(false); rbTrackingRandom->setEnabled(false); pbFilename->setEnabled(false); + + if (rbTrackingFile->isChecked()) + { + this->TrackingDataReader->SetConnector(oigtlConnector); + this->TrackingDataReader->SetFileName(this->PathString); + this->TrackingDataReader->Start(); + } + else + { + this->TrackingDataGenerator->SetConnector(oigtlConnector); + this->TrackingDataGenerator->Start(); + } + } } diff --git a/OpenIGTLinkSimulatorApp.h b/OpenIGTLinkSimulatorApp.h index 1e29c62..fa69ada 100644 --- a/OpenIGTLinkSimulatorApp.h +++ b/OpenIGTLinkSimulatorApp.h @@ -44,10 +44,10 @@ class OpenIGTLinkSimulatorApp : public QMainWindow, private Ui::OpenIGTLinkSimul public slots: void getPath(); void about(); - void enable(); - void disable(); - void generate(std::string); - + void enable(); + void disable(); + //void generate(std::string); + void scannerActivateClicked(); void clientActivateClicked(); @@ -69,8 +69,8 @@ public slots: igtl::TCPConnectorServerOIGTL::Pointer oigtlConnector; qDataGeneratorTracking* TrackingDataGenerator; - qDataReadingTracker* TrackingDataReader; - + qDataReadingTracker* TrackingDataReader; + bool fScannerActive; bool fClientActive; @@ -79,6 +79,8 @@ public slots: QString controlPort; QString igtlPort; + std::string PathString; + }; diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index 24d8a70..4e2b589 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -72,6 +72,12 @@ void qDataReadingTracker::RegisterHandlers(igtl::TCPConnectorServerOIGTL * conne } +//---------------------------------------------------------------------------- +void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) +{ + std::cerr << "void GenerateData(igtl::MessageBase::Pointer& data) is called" << std::endl; +} + //---------------------------------------------------------------------------- void qDataReadingTracker::ReadData(igtl::MessageBase::Pointer& data, std::string filename) { diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index d10ee5e..cafb0b9 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -14,6 +14,8 @@ #ifndef __qDataReadingTracking_H #define __qDataReadingTracking_H +#include + #include "qDataGeneratorBase.h" #include "igtlTrackingDataMessage.h" @@ -28,10 +30,13 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase virtual const char * GetClassName() { return "qDataReadingTracking"; }; + void SetFileName(std::string name) { this->FileName = name; }; protected: virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); + virtual void GenerateData(igtl::MessageBase::Pointer& data); + virtual void ReadData(igtl::MessageBase::Pointer& data, std::string); virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); @@ -51,6 +56,8 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase int NumberOfChannels; int fTracking; + + std::string FileName; }; From 1aafa522ebe92182be6ac0cc4c541b0b199cbed2 Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Thu, 4 Sep 2014 09:08:59 -0400 Subject: [PATCH 03/11] Added reading and printing matrix from file coding to qDataReadingTracker.cpp/GenerateData --- qDataGeneratorBase.cpp | 23 ++++++------ qDataGeneratorBase.h | 4 +-- qDataGeneratorTracking.cpp | 6 ++-- qDataReadingTracker.cpp | 73 ++++++++++++++++++++++++++++++++------ qDataReadingTracker.h | 1 + 5 files changed, 80 insertions(+), 27 deletions(-) diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index 106ccfe..becc54d 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -18,7 +18,7 @@ //----------------------------------------------------------------------------- qDataGeneratorBase::qDataGeneratorBase() { - this->TimerInterval = 100; // default is 100 ms + this->TimerInterval = 300; // default is 100 ms this->Timer = NULL; } @@ -72,7 +72,9 @@ void qDataGeneratorBase::ProcessTimer() { igtl::MessageBase::Pointer message; // if(filename==""){ +// int c=0; this->GenerateData(message); + //(*c)++; if (message.IsNotNull()) { this->Connector->PushMessage(message); @@ -88,16 +90,16 @@ void qDataGeneratorBase::ProcessTimer(std::string filename) this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) { igtl::MessageBase::Pointer message; - if(filename==""){ - this->GenerateData(message); - } - else{ - this->ReadData(message, filename); - } - if (message.IsNotNull()) - { + // if(filename==""){ + this->GenerateData(message); + // } + //else{ + // this->ReadData(message, filename); + // } + if (message.IsNotNull()) + { this->Connector->PushMessage(message); - } + } } } @@ -106,4 +108,3 @@ void qDataGeneratorBase::ProcessTimer(std::string filename) - diff --git a/qDataGeneratorBase.h b/qDataGeneratorBase.h index 3417335..37564f2 100644 --- a/qDataGeneratorBase.h +++ b/qDataGeneratorBase.h @@ -50,12 +50,12 @@ class IGTLCommon_EXPORT qDataGeneratorBase : public QObject protected slots: - void ProcessTimer(std::string); + void ProcessTimer(std::string filename); void ProcessTimer(); protected: virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * NOTUSED(connector)) {}; -virtual void GenerateData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; + virtual void GenerateData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; virtual void ReadData(igtl::MessageBase::Pointer& NOTUSED(data), std::string) {}; protected: diff --git a/qDataGeneratorTracking.cpp b/qDataGeneratorTracking.cpp index 1ee71e5..c2c47b5 100644 --- a/qDataGeneratorTracking.cpp +++ b/qDataGeneratorTracking.cpp @@ -170,9 +170,9 @@ void qDataGeneratorTracking::GetRandomTestMatrix(igtl::Matrix4x4& matrix, float float orientation[4]; // random position - position[0] = 50.0 * cos(phi) + 50.0 * sin(phi); - position[1] = 50.0 * sin(phi*phi); - position[2] = 50.0 * cos(phi); + position[0] = 50.0 * cos(phi) + 20.0 * sin(phi); + position[1] = 2.0 * cos(phi*phi); + position[2] = 30.0 * sin(phi); phi = phi + 0.2; // random orientation diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index 4e2b589..1434300 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -19,8 +19,7 @@ #include #include "qDataReadingTracker.h" -//#include "ui_OpenIGTLinkSimulatorWindow.h" - +//#include "ui_OpenIGTLinkSimulatorWindow.h //----------------------------------------------------------------------------- qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() { @@ -71,11 +70,70 @@ void qDataReadingTracker::RegisterHandlers(igtl::TCPConnectorServerOIGTL * conne connector->RegisterMessageHandler("STP_TDATA", this); } - //---------------------------------------------------------------------------- void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) { - std::cerr << "void GenerateData(igtl::MessageBase::Pointer& data) is called" << std::endl; + if(FileName!="") { + // (*c)++; + this->count++; + float temp; + float tempMatrix[4][4]; + float matrix[4][4]; + // igtl::Matrix4x4 matrix; + const char * ccpFileName = FileName.c_str(); + FILE *myfile = std::fopen(ccpFileName, "r"); + //int counter=0; + igtl::TrackingDataElement::Pointer ptr; //! + for(int k = 0; k < this->NumberOfChannels; k ++) + { + /* int counter=0; + this->TrackingMsg->GetTrackingDataElement(k, ptr); + while(counter<=count){ + for(int i=0; i<=3; i++){ + for(int j=0; j<=3; j++){ + std::fscanf(myfile, "%f ", &temp); + } + } + counter++; + } + for(int i=0;i<=3;i++){ + for(int j=0;j<=3;j++){ + std::fscanf(myfile, "%f ", &temp); + matrix[i][j]=temp; + } + } + */ + int counter=0; + while(counter!=count){ + for(int i=0;i<=3;i++){ + for(int j=0;j<=3;j++){ + std::fscanf(myfile, "%f ", &temp); + tempMatrix[i][j]=temp; + } + } + counter++; + } + + std::cout << "=============" << std::endl; + std::cout << matrix[0][0] << ", " << matrix[0][1] << ", " << matrix[0][2] << ", " << matrix[0][3] << std::endl; + std::cout << matrix[1][0] << ", " << matrix[1][1] << ", " << matrix[1][2] << ", " << matrix[1][3] << std::endl; + std::cout << matrix[2][0] << ", " << matrix[2][1] << ", " << matrix[2][2] << ", " << matrix[2][3] << std::endl; + std::cout << matrix[3][0] << ", " << matrix[3][1] << ", " << matrix[3][2] << ", " << matrix[3][3] << std::endl; + std::cout << "counter="<SetMatrix(matrix); + } + fclose(myfile); + this->TrackingMsg->Pack(); + data = this->TrackingMsg; + } + else + { + std::cerr << "Insufficient file name." << std::endl; + } } //---------------------------------------------------------------------------- @@ -230,10 +288,3 @@ void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string fil igtl::PrintMatrix(matrix); // teIncomingData->setText( matrix ); */ - - - - - - - diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index cafb0b9..088c15b 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -58,6 +58,7 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase int fTracking; std::string FileName; + int count; }; From 1022b8fe35f62f3972107f98fec86481946b8659 Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Thu, 4 Sep 2014 10:35:49 -0400 Subject: [PATCH 04/11] test --- qDataGeneratorBase.cpp | 2 +- qDataReadingTracker.cpp | 21 +++++---------------- qDataReadingTracker.h | 6 ++---- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index becc54d..1188ef4 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -18,7 +18,7 @@ //----------------------------------------------------------------------------- qDataGeneratorBase::qDataGeneratorBase() { - this->TimerInterval = 300; // default is 100 ms + this->TimerInterval = 100; // default is 100 ms this->Timer = NULL; } diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index 1434300..d96678e 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -74,10 +74,8 @@ void qDataReadingTracker::RegisterHandlers(igtl::TCPConnectorServerOIGTL * conne void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) { if(FileName!="") { - // (*c)++; this->count++; float temp; - float tempMatrix[4][4]; float matrix[4][4]; // igtl::Matrix4x4 matrix; const char * ccpFileName = FileName.c_str(); @@ -104,13 +102,14 @@ void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) } */ int counter=0; - while(counter!=count){ + while(1){ for(int i=0;i<=3;i++){ for(int j=0;j<=3;j++){ std::fscanf(myfile, "%f ", &temp); - tempMatrix[i][j]=temp; + matrix[i][j]=temp; } } + if(counter == count) break; counter++; } @@ -127,7 +126,7 @@ void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) ptr->SetMatrix(matrix); } fclose(myfile); - this->TrackingMsg->Pack(); + // this->TrackingMsg->Pack(); data = this->TrackingMsg; } else @@ -237,20 +236,10 @@ void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string fil float temp; const char * ccpfilename = filename.c_str(); FILE *myfile = fopen(ccpfilename, "r"); - // std::ifstream myfile ( filename ); - // int value=0; - //std::string line; -// std::istream& getline(); - //std::ifstream line; -// // while(!myfile.eof()){ for(int i=0;i<=4;i++){ for(int j=0;j<=4;j++){ - // if(!myfile.eof()){ - //std::getline(myfile, line); -// getline(myfile, line); -// getline(line, value, " "); + std::fscanf(myfile, "%f ", &temp); - // if(temp==" ")continue; matrix[i][j]=temp; } } diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index 088c15b..a675578 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -43,7 +43,7 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase // Function to Read matrix. void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); - + int count; protected: @@ -57,9 +57,7 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase int fTracking; - std::string FileName; - int count; - + std::string FileName; }; #endif From d41d2315276007f202fe69eb2d0ac71693f2c5ac Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Thu, 4 Sep 2014 15:56:05 -0400 Subject: [PATCH 05/11] Fixed problems in Generate(). --- OpenIGTLinkSimulatorApp.cpp | 16 ++++- igtlTCPConnectorBase.cxx | 1 + igtlTCPConnectorServerOIGTL.cxx | 1 + qDataGeneratorBase.cpp | 11 ++-- qDataGeneratorBase.h | 4 +- qDataReadingTracker.cpp | 109 +++++++++++++++----------------- qDataReadingTracker.h | 6 +- 7 files changed, 76 insertions(+), 72 deletions(-) diff --git a/OpenIGTLinkSimulatorApp.cpp b/OpenIGTLinkSimulatorApp.cpp index 56d8350..6a2722a 100644 --- a/OpenIGTLinkSimulatorApp.cpp +++ b/OpenIGTLinkSimulatorApp.cpp @@ -192,6 +192,8 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() fClientActive = false; if (oigtlConnector.IsNotNull()) { + // std::cerr << "Deactivating OpenIGTLink connector with:" << std::endl; + // std::cerr << " Port: " << igtlPort.toInt() << std::endl; oigtlConnector->Deactivate(); } rbTrackingFile->setEnabled(true); @@ -208,7 +210,7 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() else //if Deactivated and data selected. { fClientActive = true; - + if (oigtlConnector.IsNotNull()) { std::cerr << "Activating OpenIGTLink connector with:" << std::endl; @@ -216,6 +218,18 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() oigtlConnector->SetPort(igtlPort.toInt()); oigtlConnector->Activate(); } + else + { oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); + oigtlConnector->SetPort(18944); + if (oigtlConnector.IsNotNull()) + { + std::cerr << "Activating OpenIGTLink connector with:" << std::endl; + std::cerr << " Port: " << igtlPort.toInt() << std::endl; + oigtlConnector->SetPort(igtlPort.toInt()); + oigtlConnector->Activate(); + } + } + rbTrackingFile->setEnabled(false); rbTrackingRandom->setEnabled(false); diff --git a/igtlTCPConnectorBase.cxx b/igtlTCPConnectorBase.cxx index d56ea80..cd4e2e5 100644 --- a/igtlTCPConnectorBase.cxx +++ b/igtlTCPConnectorBase.cxx @@ -70,6 +70,7 @@ void TCPConnectorBase::MonitorThreadFunction(void * ptr) // } std::cerr << "TCPConnectorBase::MonitorThreadFunction(): Failed to initialize a server socket." << std::endl; return; + // con->Initialize(); } while (con->Active >= 0) diff --git a/igtlTCPConnectorServerOIGTL.cxx b/igtlTCPConnectorServerOIGTL.cxx index 156bc8f..91aebf9 100644 --- a/igtlTCPConnectorServerOIGTL.cxx +++ b/igtlTCPConnectorServerOIGTL.cxx @@ -50,6 +50,7 @@ int TCPConnectorServerOIGTL::PushMessage(igtl::MessageBase * message) { if (this->Socket.IsNull()) { + std::cerr << "Socket is null (PushMessage)." << std::endl; // Do nothing. return 1; } diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index becc54d..45d5c32 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -71,19 +71,16 @@ void qDataGeneratorBase::ProcessTimer() this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) { igtl::MessageBase::Pointer message; -// if(filename==""){ -// int c=0; this->GenerateData(message); - //(*c)++; + if (message.IsNotNull()) { - this->Connector->PushMessage(message); + this->Connector->PushMessage(message); } } } - //------------------------------------------------------------------------------ -void qDataGeneratorBase::ProcessTimer(std::string filename) +/*void qDataGeneratorBase::ProcessTimer(std::string filename) { if (this->Connector.IsNotNull() && @@ -102,7 +99,7 @@ void qDataGeneratorBase::ProcessTimer(std::string filename) } } } - +*/ diff --git a/qDataGeneratorBase.h b/qDataGeneratorBase.h index 37564f2..aaf7eeb 100644 --- a/qDataGeneratorBase.h +++ b/qDataGeneratorBase.h @@ -42,7 +42,7 @@ class IGTLCommon_EXPORT qDataGeneratorBase : public QObject void SetInterval(int ms) { this->TimerInterval = ms; }; int GetInterval() { return this->TimerInterval; } void SetConnector(igtl::TCPConnectorServerOIGTL * connector); - + std::string PathString; virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header) {}; void Start(); @@ -50,7 +50,7 @@ class IGTLCommon_EXPORT qDataGeneratorBase : public QObject protected slots: - void ProcessTimer(std::string filename); + // void ProcessTimer(std::string filename); void ProcessTimer(); protected: diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index 1434300..f538ac8 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -73,27 +73,30 @@ void qDataReadingTracker::RegisterHandlers(igtl::TCPConnectorServerOIGTL * conne //---------------------------------------------------------------------------- void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) { - if(FileName!="") { - // (*c)++; + if(!this->fTracking && FileName!="") + { this->count++; float temp; - float tempMatrix[4][4]; - float matrix[4][4]; - // igtl::Matrix4x4 matrix; + // float matrix[4][4]; + igtl::Matrix4x4 matrix; const char * ccpFileName = FileName.c_str(); FILE *myfile = std::fopen(ccpFileName, "r"); //int counter=0; igtl::TrackingDataElement::Pointer ptr; //! - for(int k = 0; k < this->NumberOfChannels; k ++) - { - /* int counter=0; + + for(int k = 0; k < this->NumberOfChannels; k ++) + { this->TrackingMsg->GetTrackingDataElement(k, ptr); - while(counter<=count){ + int counter=0; + while(counterSetMessageHeader(header); stpMsg->AllocatePack(); - if (socket && socket->GetConnected()) - { - int r = socket->Receive(stpMsg->GetPackBodyPointer(), stpMsg->GetPackBodySize()); - if (r == 0) - { - // Connection closed. - return 0; - } - } - else - { - return 0; - } - - int c = stpMsg->Unpack(1); - if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK - { //up to here + // if (socket && socket->GetConnected()) + //{ + // int r = socket->Receive(stpMsg->GetPackBodyPointer(), stpMsg->GetPackBodySize()); + // if (r == 0) + // { + // // Connection closed. + // return 0; + // } + //} + //else + //{ + // return 0; + //} + // + //int c = stpMsg->Unpack(1); + //if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK + //{ //up to here this->fTracking = 0; return 1; - } + // } } return 1; - } + + //------------------------------------------------------------ void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string filename) { - float temp; + /* float temp; const char * ccpfilename = filename.c_str(); FILE *myfile = fopen(ccpfilename, "r"); - // std::ifstream myfile ( filename ); - // int value=0; - //std::string line; -// std::istream& getline(); - //std::ifstream line; -// // while(!myfile.eof()){ for(int i=0;i<=4;i++){ for(int j=0;j<=4;j++){ - // if(!myfile.eof()){ - //std::getline(myfile, line); -// getline(myfile, line); -// getline(line, value, " "); + std::fscanf(myfile, "%f ", &temp); - // if(temp==" ")continue; matrix[i][j]=temp; } } igtl::PrintMatrix(matrix); fclose(myfile); - } + */ +} // // } diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index 088c15b..beaa70c 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -43,8 +43,7 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase // Function to Read matrix. void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); - - + protected: igtl::TrackingDataMessage::Pointer TrackingMsg; @@ -57,9 +56,8 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase int fTracking; - std::string FileName; + std::string FileName; int count; - }; #endif From ab5b463ca8d0fd7df3ca01c1816ed6fdbee394d7 Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Thu, 4 Sep 2014 18:44:37 -0400 Subject: [PATCH 06/11] Added feature to select # of channels, but still file data not loaded successfully. --- OpenIGTLinkSimulatorApp.cpp | 16 +++++++++---- OpenIGTLinkSimulatorApp.h | 2 +- OpenIGTLinkSimulatorWindow.ui | 11 +++++++-- qDataGeneratorBase.cpp | 2 +- qDataGeneratorTracking.cpp | 34 +++++++++++++++++++------- qDataGeneratorTracking.h | 4 ++-- qDataReadingTracker.cpp | 45 ++++++++++++++++++++++++++++------- qDataReadingTracker.h | 3 ++- 8 files changed, 89 insertions(+), 28 deletions(-) diff --git a/OpenIGTLinkSimulatorApp.cpp b/OpenIGTLinkSimulatorApp.cpp index 6a2722a..9179bd5 100644 --- a/OpenIGTLinkSimulatorApp.cpp +++ b/OpenIGTLinkSimulatorApp.cpp @@ -49,12 +49,13 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) fClientActive = false; // Signals and Slots - connect(pbFilename, SIGNAL( clicked() ), this, SLOT( getPath() )); - connect(rbTrackingRandom, SIGNAL( clicked() ), this, SLOT( disable() )); - connect(rbTrackingFile, SIGNAL( clicked() ), this, SLOT( enable() )); + connect(pbFilename, SIGNAL( clicked() ), this, SLOT( getPath() )); + connect(rbTrackingRandom, SIGNAL( clicked() ), this, SLOT( disable() )); + connect(rbTrackingFile, SIGNAL( clicked() ), this, SLOT( enable() )); connect(pbQuit, SIGNAL( clicked() ), this, SLOT( quit() )); connect(pbAbout, SIGNAL( clicked() ), this, SLOT( about() )); - /*corrupt*/ // connect(rbTrackingRandom, SIGNAL( clicked() ), this, SLOT( generate() )); + //connect(sbTrackingChannels, SIGNAL( valueChanged(int) ), this, SLOT( setValue(int))); + connect(sbTrackingChannels, SIGNAL( valueChanged(int) ), this, SLOT( channel(int) )); // connect(leFilename, SIGNAL( textChanged()), this, SLOT( generate()); //connect(pbScannerActivate, SIGNAL( clicked() ), this, SLOT( scannerActivateClicked() )); connect(pbClientActivate, SIGNAL( clicked() ), this, SLOT( clientActivateClicked() )); @@ -322,6 +323,13 @@ void OpenIGTLinkSimulatorApp::updateStatus() //leImagePort->setEnabled(editClientFlag); } +void OpenIGTLinkSimulatorApp::channel(int i) +{ + std::cerr << "Channel changed to:" << i << std::endl; + this->TrackingDataReader->ChannelChanged(i); + // this->TrackingDataGenerator->ChannelChanged(i); +} + void OpenIGTLinkSimulatorApp::quit() { diff --git a/OpenIGTLinkSimulatorApp.h b/OpenIGTLinkSimulatorApp.h index fa69ada..b4395ee 100644 --- a/OpenIGTLinkSimulatorApp.h +++ b/OpenIGTLinkSimulatorApp.h @@ -46,7 +46,7 @@ public slots: void about(); void enable(); void disable(); - //void generate(std::string); + void channel(int i); void scannerActivateClicked(); void clientActivateClicked(); diff --git a/OpenIGTLinkSimulatorWindow.ui b/OpenIGTLinkSimulatorWindow.ui index d9e29c6..6599e4d 100644 --- a/OpenIGTLinkSimulatorWindow.ui +++ b/OpenIGTLinkSimulatorWindow.ui @@ -152,7 +152,7 @@ - Ramdom + Random rbgDataSource @@ -200,7 +200,14 @@ - + + + 1 + + + 3 + + diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index 45d5c32..d989a51 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -18,7 +18,7 @@ //----------------------------------------------------------------------------- qDataGeneratorBase::qDataGeneratorBase() { - this->TimerInterval = 300; // default is 100 ms + this->TimerInterval = 100; // default is 100 ms this->Timer = NULL; } diff --git a/qDataGeneratorTracking.cpp b/qDataGeneratorTracking.cpp index c2c47b5..1c69406 100644 --- a/qDataGeneratorTracking.cpp +++ b/qDataGeneratorTracking.cpp @@ -40,7 +40,7 @@ qDataGeneratorTracking::qDataGeneratorTracking(): qDataGeneratorBase() this->fTracking = 0; - for (int i = 0; i < this->NumberOfChannels; i ++) + for (int i = 0; i NumberOfChannels; i ++) { std::stringstream ss; ss << "Channel " << i; @@ -191,10 +191,28 @@ void qDataGeneratorTracking::GetRandomTestMatrix(igtl::Matrix4x4& matrix, float igtl::PrintMatrix(matrix); } - - - - - - - +//----------------------------------------------------------------------------- +/* +void qDataGeneratorTracking::ChannelChanged(int i) +{ + this->NumberOfChannels = i; + + this->TrackingElement.resize(this->NumberOfChannels); + this->Phi.resize(this->NumberOfChannels); + this->Theta.resize(this->NumberOfChannels); + + this->fTracking = 0; + + for (int i = 0; i < this->NumberOfChannels; i ++) + { + std::stringstream ss; + ss << "Channel " << i; + this->TrackingElement[i] = igtl::TrackingDataElement::New(); + this->TrackingElement[i]->SetName(ss.str().c_str()); + this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); + this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); + this->Phi[i] = 0.0; + this->Theta[i] = 0.0; + } +} +*/ diff --git a/qDataGeneratorTracking.h b/qDataGeneratorTracking.h index 214a5cb..fbde799 100644 --- a/qDataGeneratorTracking.h +++ b/qDataGeneratorTracking.h @@ -27,12 +27,12 @@ class IGTLCommon_EXPORT qDataGeneratorTracking : public qDataGeneratorBase virtual ~qDataGeneratorTracking(); virtual const char * GetClassName() { return "qDataGeneratorTracking"; }; - + //virtual void ChannelChanged(int i); protected: virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); - virtual void GenerateData(igtl::MessageBase::Pointer& data); + virtual void GenerateData(igtl::MessageBase::Pointer& data); virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index f538ac8..46908cb 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -43,7 +43,7 @@ qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() this->fTracking = 0; - for (int i = 0; i < this->NumberOfChannels; i ++) + for (int i = 0; i NumberOfChannels; i ++) { std::stringstream ss; ss << "Channel " << i; @@ -51,8 +51,8 @@ qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() this->TrackingElement[i]->SetName(ss.str().c_str()); this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); - //this->Phi[i] = 0.0; - //this->Theta[i] = 0.0; + this->Phi[i] = 0.0; + this->Theta[i] = 0.0; } } @@ -83,12 +83,12 @@ void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) FILE *myfile = std::fopen(ccpFileName, "r"); //int counter=0; igtl::TrackingDataElement::Pointer ptr; //! - + // std::cerr << NumberOfChannels << std::endl; for(int k = 0; k < this->NumberOfChannels; k ++) { this->TrackingMsg->GetTrackingDataElement(k, ptr); int counter=0; - while(counterSetMatrix(matrix); // fclose(myfile); - } + } fclose(myfile); - this->TrackingMsg->Pack(); - data = this->TrackingMsg; + this->TrackingMsg->Pack(); + data = this->TrackingMsg; } @@ -281,3 +281,30 @@ void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string fil igtl::PrintMatrix(matrix); // teIncomingData->setText( matrix ); */ + + + +//------------------------------------------------------------ +void qDataReadingTracker::ChannelChanged(int i) +{ + this->NumberOfChannels = i; + + this->TrackingElement.resize(this->NumberOfChannels); + this->Phi.resize(this->NumberOfChannels); + this->Theta.resize(this->NumberOfChannels); + + this->fTracking = 0; + + for (int i = 0; i < this->NumberOfChannels; i ++) + { + std::stringstream ss; + ss << "Channel " << i; + this->TrackingElement[i] = igtl::TrackingDataElement::New(); + this->TrackingElement[i]->SetName(ss.str().c_str()); + this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); + this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); + this->Phi[i] = 0.0; + this->Theta[i] = 0.0; + } + +} diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index beaa70c..4ddca39 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -31,6 +31,7 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase virtual const char * GetClassName() { return "qDataReadingTracking"; }; void SetFileName(std::string name) { this->FileName = name; }; + virtual void ChannelChanged(int i); protected: @@ -40,7 +41,7 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase virtual void ReadData(igtl::MessageBase::Pointer& data, std::string); virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); - + // Function to Read matrix. void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); From 3fe91c02a38a7f4c099a8ccc495477d7c8313193 Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Fri, 5 Sep 2014 14:19:42 -0400 Subject: [PATCH 07/11] added channelChanged(). Both random and file works with 1,3 channels. --- OpenIGTLinkSimulatorApp.cpp | 6 +- igtlTCPConnectorBase.cxx | 4 +- qDataGeneratorBase.cpp | 13 ++- qDataGeneratorBase.h | 2 +- qDataGeneratorTracking.cpp | 75 ++++++++------- qDataGeneratorTracking.h | 2 +- qDataReadingTracker.cpp | 181 +++++++++++++++++++----------------- qDataReadingTracker.h | 11 +-- 8 files changed, 154 insertions(+), 140 deletions(-) diff --git a/OpenIGTLinkSimulatorApp.cpp b/OpenIGTLinkSimulatorApp.cpp index 9179bd5..05bd83b 100644 --- a/OpenIGTLinkSimulatorApp.cpp +++ b/OpenIGTLinkSimulatorApp.cpp @@ -193,8 +193,8 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() fClientActive = false; if (oigtlConnector.IsNotNull()) { - // std::cerr << "Deactivating OpenIGTLink connector with:" << std::endl; - // std::cerr << " Port: " << igtlPort.toInt() << std::endl; + std::cerr << "Deactivating OpenIGTLink connector with:" << std::endl; + std::cerr << " Port: " << igtlPort.toInt() << std::endl; oigtlConnector->Deactivate(); } rbTrackingFile->setEnabled(true); @@ -327,7 +327,7 @@ void OpenIGTLinkSimulatorApp::channel(int i) { std::cerr << "Channel changed to:" << i << std::endl; this->TrackingDataReader->ChannelChanged(i); - // this->TrackingDataGenerator->ChannelChanged(i); + this->TrackingDataGenerator->ChannelChanged(i); } void OpenIGTLinkSimulatorApp::quit() diff --git a/igtlTCPConnectorBase.cxx b/igtlTCPConnectorBase.cxx index cd4e2e5..6373689 100644 --- a/igtlTCPConnectorBase.cxx +++ b/igtlTCPConnectorBase.cxx @@ -63,14 +63,14 @@ void TCPConnectorBase::MonitorThreadFunction(void * ptr) TCPConnectorBase * con = static_cast(info->UserData); con->Active = 0; - if (!con->Initialize()) + while (!con->Initialize()) { // while(!con->Initialize()){ // } std::cerr << "TCPConnectorBase::MonitorThreadFunction(): Failed to initialize a server socket." << std::endl; return; - // con->Initialize(); + con->Initialize(); } while (con->Active >= 0) diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index d989a51..ca0b4f8 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -41,12 +41,12 @@ void qDataGeneratorBase::SetConnector(igtl::TCPConnectorServerOIGTL * connector) //----------------------------------------------------------------------------- void qDataGeneratorBase::Start() { + this->Timer = new QTimer(this); connect(this->Timer, SIGNAL(timeout()), this, SLOT(ProcessTimer())); this->Timer->start(this->TimerInterval); } - //----------------------------------------------------------------------------- void qDataGeneratorBase::Stop() { @@ -71,8 +71,15 @@ void qDataGeneratorBase::ProcessTimer() this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) { igtl::MessageBase::Pointer message; - this->GenerateData(message); - + //Must somehow use if() to decide whether to use GenerateData or ReadData. + //if(i==0) + // { + this->GenerateData(message); + // } + // else + // { + this->ReadData(message); + // } if (message.IsNotNull()) { this->Connector->PushMessage(message); diff --git a/qDataGeneratorBase.h b/qDataGeneratorBase.h index aaf7eeb..521f3ad 100644 --- a/qDataGeneratorBase.h +++ b/qDataGeneratorBase.h @@ -56,7 +56,7 @@ protected slots: protected: virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * NOTUSED(connector)) {}; virtual void GenerateData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; - virtual void ReadData(igtl::MessageBase::Pointer& NOTUSED(data), std::string) {}; + virtual void ReadData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; protected: diff --git a/qDataGeneratorTracking.cpp b/qDataGeneratorTracking.cpp index 1c69406..f25a50a 100644 --- a/qDataGeneratorTracking.cpp +++ b/qDataGeneratorTracking.cpp @@ -74,20 +74,21 @@ void qDataGeneratorTracking::GenerateData(igtl::MessageBase::Pointer& data) if (this->fTracking) { - igtl::Matrix4x4 matrix; - igtl::TrackingDataElement::Pointer ptr; - - for (int i = 0; i < this->NumberOfChannels; i ++) - { - this->TrackingMsg->GetTrackingDataElement(i, ptr); - GetRandomTestMatrix(matrix, this->Phi[i], this->Theta[i]); - ptr->SetMatrix(matrix); - this->Phi[i] += 0.1*(float)(i+1); - this->Theta[i] += 0.05*(float)(i+1); - } - - this->TrackingMsg->Pack(); - data = this->TrackingMsg; + igtl::Matrix4x4 matrix; + igtl::TrackingDataElement::Pointer ptr; + for (int i = 0; i < this->NumberOfChannels; i ++) + { + std::cerr << "Data for Channel:" << i << std::endl; + this->TrackingMsg->GetTrackingDataElement(i, ptr); + GetRandomTestMatrix(matrix, this->Phi[i], this->Theta[i]); + ptr->SetMatrix(matrix); + + this->Phi[i] += 0.1*(float)(i+1); + this->Theta[i] += 0.05*(float)(i+1); + } + + this->TrackingMsg->Pack(); + data = this->TrackingMsg; } } @@ -170,9 +171,9 @@ void qDataGeneratorTracking::GetRandomTestMatrix(igtl::Matrix4x4& matrix, float float orientation[4]; // random position - position[0] = 50.0 * cos(phi) + 20.0 * sin(phi); - position[1] = 2.0 * cos(phi*phi); - position[2] = 30.0 * sin(phi); + position[0] = 50.0 * cos(phi) + 50.0 * sin(phi); + position[1] = 50.0 * sin(phi*phi); + position[2] = 30.0 * cos(phi); phi = phi + 0.2; // random orientation @@ -192,27 +193,29 @@ void qDataGeneratorTracking::GetRandomTestMatrix(igtl::Matrix4x4& matrix, float igtl::PrintMatrix(matrix); } //----------------------------------------------------------------------------- -/* + void qDataGeneratorTracking::ChannelChanged(int i) { - this->NumberOfChannels = i; - - this->TrackingElement.resize(this->NumberOfChannels); - this->Phi.resize(this->NumberOfChannels); - this->Theta.resize(this->NumberOfChannels); - - this->fTracking = 0; - - for (int i = 0; i < this->NumberOfChannels; i ++) + this->TrackingMsg = igtl::TrackingDataMessage::New(); + this->TrackingMsg->SetDeviceName("Tracker"); + this->NumberOfChannels = i; + + this->TrackingElement.resize(this->NumberOfChannels); + this->Phi.resize(this->NumberOfChannels); + this->Theta.resize(this->NumberOfChannels); + + this->fTracking = 0; + + for (int i = 0; i < this->NumberOfChannels; i ++) { - std::stringstream ss; - ss << "Channel " << i; - this->TrackingElement[i] = igtl::TrackingDataElement::New(); - this->TrackingElement[i]->SetName(ss.str().c_str()); - this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); - this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); - this->Phi[i] = 0.0; - this->Theta[i] = 0.0; + std::stringstream ss; + ss << "Channel " << i; + this->TrackingElement[i] = igtl::TrackingDataElement::New(); + this->TrackingElement[i]->SetName(ss.str().c_str()); + this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); + this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); + this->Phi[i] = 0.0; + this->Theta[i] = 0.0; } } -*/ + diff --git a/qDataGeneratorTracking.h b/qDataGeneratorTracking.h index fbde799..fd6356f 100644 --- a/qDataGeneratorTracking.h +++ b/qDataGeneratorTracking.h @@ -27,7 +27,7 @@ class IGTLCommon_EXPORT qDataGeneratorTracking : public qDataGeneratorBase virtual ~qDataGeneratorTracking(); virtual const char * GetClassName() { return "qDataGeneratorTracking"; }; - //virtual void ChannelChanged(int i); + virtual void ChannelChanged(int i); protected: diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index 47da7c4..3a75d76 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -73,40 +73,33 @@ void qDataReadingTracker::RegisterHandlers(igtl::TCPConnectorServerOIGTL * conne //---------------------------------------------------------------------------- void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) { -<<<<<<< HEAD - if(FileName!="") { - this->count++; - float temp; - float matrix[4][4]; - // igtl::Matrix4x4 matrix; -======= - if(!this->fTracking && FileName!="") + /* if(this->fTracking && FileName!="") { this->count++; float temp; - // float matrix[4][4]; igtl::Matrix4x4 matrix; ->>>>>>> my-branch + const char * ccpFileName = FileName.c_str(); FILE *myfile = std::fopen(ccpFileName, "r"); //int counter=0; igtl::TrackingDataElement::Pointer ptr; //! // std::cerr << NumberOfChannels << std::endl; + for(int k = 0; k < this->NumberOfChannels; k ++) - { - this->TrackingMsg->GetTrackingDataElement(k, ptr); - int counter=0; - while(counterTrackingMsg->GetTrackingDataElement(k, ptr); + int counter=0; + while(counterfTracking) + if(this->fTracking && FileName!="") { - igtl::Matrix4x4 matrix; - igtl::TrackingDataElement::Pointer ptr; - - for (int i = 0; i < this->NumberOfChannels; i ++) - { - this->TrackingMsg->GetTrackingDataElement(i, ptr); - GetFileMatrix(matrix,filename); - ptr->SetMatrix(matrix); - //this->Phi[i] += 0.1*(float)(i+1); - //this->Theta[i] += 0.05*(float)(i+1); - } - - this->TrackingMsg->Pack(); - data = this->TrackingMsg; - // } + this->count++; + float temp; + igtl::Matrix4x4 matrix; + + const char * ccpFileName = FileName.c_str(); + FILE *myfile = std::fopen(ccpFileName, "r"); + //int counter=0; + igtl::TrackingDataElement::Pointer ptr; //! + // std::cerr << NumberOfChannels << std::endl; + + for(int k = 0; k < this->NumberOfChannels; k ++) + { + this->TrackingMsg->GetTrackingDataElement(k, ptr); + int counter=0; + while(counterNumberOfChannels = i; - - this->TrackingElement.resize(this->NumberOfChannels); - this->Phi.resize(this->NumberOfChannels); - this->Theta.resize(this->NumberOfChannels); - - this->fTracking = 0; - - for (int i = 0; i < this->NumberOfChannels; i ++) + this->TrackingMsg = igtl::TrackingDataMessage::New(); + this->TrackingMsg->SetDeviceName("Tracker"); + + this->NumberOfChannels = i; + + this->TrackingElement.resize(this->NumberOfChannels); + this->Phi.resize(this->NumberOfChannels); + this->Theta.resize(this->NumberOfChannels); + + this->fTracking = 0; + + for (int i = 0; i < this->NumberOfChannels; i ++) { - std::stringstream ss; - ss << "Channel " << i; - this->TrackingElement[i] = igtl::TrackingDataElement::New(); - this->TrackingElement[i]->SetName(ss.str().c_str()); - this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); - this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); - this->Phi[i] = 0.0; - this->Theta[i] = 0.0; + std::stringstream ss; + ss << "Channel " << i; + this->TrackingElement[i] = igtl::TrackingDataElement::New(); + this->TrackingElement[i]->SetName(ss.str().c_str()); + this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); + this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); + this->Phi[i] = 0.0; + this->Theta[i] = 0.0; } } diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index 2189fc3..e41c999 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -38,18 +38,15 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); virtual void GenerateData(igtl::MessageBase::Pointer& data); - virtual void ReadData(igtl::MessageBase::Pointer& data, std::string); + virtual void ReadData(igtl::MessageBase::Pointer& data); virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); // Function to Read matrix. void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); -<<<<<<< HEAD - int count; + // int count; -======= ->>>>>>> my-branch protected: igtl::TrackingDataMessage::Pointer TrackingMsg; @@ -62,12 +59,8 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase int fTracking; -<<<<<<< HEAD - std::string FileName; -======= std::string FileName; int count; ->>>>>>> my-branch }; #endif From 2bb1f1b8743d2cb8efa133401e7d5609b2a25948 Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Fri, 5 Sep 2014 14:34:34 -0400 Subject: [PATCH 08/11] Fixed indentations. --- OpenIGTLinkSimulatorApp.cpp | 206 ++++++++-------- OpenIGTLinkSimulatorApp.h | 80 +++---- igtlTCPConnectorBase.cxx | 148 ++++++------ igtlTCPConnectorBase.h | 168 ++++++------- igtlTCPConnectorClient.cxx | 122 +++++----- igtlTCPConnectorClient.h | 48 ++-- igtlTCPConnectorServer.cxx | 124 +++++----- igtlTCPConnectorServer.h | 52 ++-- igtlTCPConnectorServerOIGTL.cxx | 406 ++++++++++++++++---------------- igtlTCPConnectorServerOIGTL.h | 172 +++++++------- qDataGeneratorBase.cpp | 94 ++++---- qDataGeneratorBase.h | 54 ++--- qDataGeneratorTracking.cpp | 158 ++++++------- qDataGeneratorTracking.h | 41 ++-- qDataReadingTracker.cpp | 293 +++++++++++------------ qDataReadingTracker.h | 102 ++++---- 16 files changed, 1134 insertions(+), 1134 deletions(-) diff --git a/OpenIGTLinkSimulatorApp.cpp b/OpenIGTLinkSimulatorApp.cpp index 05bd83b..199c26a 100644 --- a/OpenIGTLinkSimulatorApp.cpp +++ b/OpenIGTLinkSimulatorApp.cpp @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #include #include @@ -56,7 +56,7 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) connect(pbAbout, SIGNAL( clicked() ), this, SLOT( about() )); //connect(sbTrackingChannels, SIGNAL( valueChanged(int) ), this, SLOT( setValue(int))); connect(sbTrackingChannels, SIGNAL( valueChanged(int) ), this, SLOT( channel(int) )); -// connect(leFilename, SIGNAL( textChanged()), this, SLOT( generate()); + // connect(leFilename, SIGNAL( textChanged()), this, SLOT( generate()); //connect(pbScannerActivate, SIGNAL( clicked() ), this, SLOT( scannerActivateClicked() )); connect(pbClientActivate, SIGNAL( clicked() ), this, SLOT( clientActivateClicked() )); @@ -95,7 +95,7 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) // } } - // Data Generator for File +// Data Generator for File //void OpenIGTLinkSimulatorApp::generate(std::string path){ // // this->TrackingDataGenerator->Stop(); // @@ -123,39 +123,39 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) void OpenIGTLinkSimulatorApp::disable( ) { - // if(a == 1) - pbFilename->setEnabled(false); + // if(a == 1) + pbFilename->setEnabled(false); } void OpenIGTLinkSimulatorApp::enable( ) { - // if(a == 1) - pbFilename->setEnabled(true); + // if(a == 1) + pbFilename->setEnabled(true); } void OpenIGTLinkSimulatorApp::getPath() { - QString path = QFileDialog::getOpenFileName(this, - tr("Open File"), "/Users", - tr("CSV Files (*.csv);;Text Files (*.txt)")); - if(path != " "){ - QFile file(path); - if(!file.open(QIODevice::ReadOnly)) { - QMessageBox::critical(this, tr("Error"), tr("Could not open file")); - return; - } - QTextStream in(&file); - leFilename->setText( path ); - file.close(); + QString path = QFileDialog::getOpenFileName(this, + tr("Open File"), "/Users", + tr("CSV Files (*.csv);;Text Files (*.txt)")); + if(path != " "){ + QFile file(path); + if(!file.open(QIODevice::ReadOnly)) { + QMessageBox::critical(this, tr("Error"), tr("Could not open file")); + return; } - this->PathString = path.toUtf8().constData(); - //OpenIGTLinkSimulatorApp::generate(pathString); - //path = QFileDialog::getOpenFileName( - // this, - // "Choose a file to open", - // QString::null, - // QString::null); - // - // lineEdit->setText( path ); + QTextStream in(&file); + leFilename->setText( path ); + file.close(); + } + this->PathString = path.toUtf8().constData(); + //OpenIGTLinkSimulatorApp::generate(pathString); + //path = QFileDialog::getOpenFileName( + // this, + // "Choose a file to open", + // QString::null, + // QString::null); + // + // lineEdit->setText( path ); } @@ -174,13 +174,13 @@ void OpenIGTLinkSimulatorApp::scannerActivateClicked() { if (fScannerActive) { - //pbScannerActivate->setText("Activate"); - //fScannerActive = false; + //pbScannerActivate->setText("Activate"); + //fScannerActive = false; } else { - //pbScannerActivate->setText("Deactivate"); - //fScannerActive = true; + //pbScannerActivate->setText("Deactivate"); + //fScannerActive = true; } } @@ -188,65 +188,65 @@ void OpenIGTLinkSimulatorApp::scannerActivateClicked() void OpenIGTLinkSimulatorApp::clientActivateClicked() { - if (fClientActive) //if Activated and data selected + if (fClientActive) //if Activated and data selected { - fClientActive = false; - if (oigtlConnector.IsNotNull()) + fClientActive = false; + if (oigtlConnector.IsNotNull()) { - std::cerr << "Deactivating OpenIGTLink connector with:" << std::endl; - std::cerr << " Port: " << igtlPort.toInt() << std::endl; - oigtlConnector->Deactivate(); + std::cerr << "Deactivating OpenIGTLink connector with:" << std::endl; + std::cerr << " Port: " << igtlPort.toInt() << std::endl; + oigtlConnector->Deactivate(); } - rbTrackingFile->setEnabled(true); - rbTrackingRandom->setEnabled(true); - if (rbTrackingFile->isChecked()) pbFilename->setEnabled(true); + rbTrackingFile->setEnabled(true); + rbTrackingRandom->setEnabled(true); + if (rbTrackingFile->isChecked()) pbFilename->setEnabled(true); } - //else if(!fClientActive && !rbTrackingFile->isChecked() && !rbTrackingRandom->isChecked()) - //QMessageBox::critical(this, tr("Error"), tr("Data source not selected!")); - else if(rbTrackingFile->isChecked() && leFilename->text()=="") - QMessageBox::critical(this, tr("Error"), tr("File not selected!")); + //else if(!fClientActive && !rbTrackingFile->isChecked() && !rbTrackingRandom->isChecked()) + //QMessageBox::critical(this, tr("Error"), tr("Data source not selected!")); + else if(rbTrackingFile->isChecked() && leFilename->text()=="") + QMessageBox::critical(this, tr("Error"), tr("File not selected!")); - else //if Deactivated and data selected. + else //if Deactivated and data selected. { - fClientActive = true; + fClientActive = true; - if (oigtlConnector.IsNotNull()) + if (oigtlConnector.IsNotNull()) { - std::cerr << "Activating OpenIGTLink connector with:" << std::endl; - std::cerr << " Port: " << igtlPort.toInt() << std::endl; - oigtlConnector->SetPort(igtlPort.toInt()); - oigtlConnector->Activate(); + std::cerr << "Activating OpenIGTLink connector with:" << std::endl; + std::cerr << " Port: " << igtlPort.toInt() << std::endl; + oigtlConnector->SetPort(igtlPort.toInt()); + oigtlConnector->Activate(); } - else - { oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); - oigtlConnector->SetPort(18944); - if (oigtlConnector.IsNotNull()) - { - std::cerr << "Activating OpenIGTLink connector with:" << std::endl; - std::cerr << " Port: " << igtlPort.toInt() << std::endl; - oigtlConnector->SetPort(igtlPort.toInt()); - oigtlConnector->Activate(); - } - } + else + { oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); + oigtlConnector->SetPort(18944); + if (oigtlConnector.IsNotNull()) + { + std::cerr << "Activating OpenIGTLink connector with:" << std::endl; + std::cerr << " Port: " << igtlPort.toInt() << std::endl; + oigtlConnector->SetPort(igtlPort.toInt()); + oigtlConnector->Activate(); + } + } - rbTrackingFile->setEnabled(false); - rbTrackingRandom->setEnabled(false); - pbFilename->setEnabled(false); - - if (rbTrackingFile->isChecked()) - { - this->TrackingDataReader->SetConnector(oigtlConnector); - this->TrackingDataReader->SetFileName(this->PathString); - this->TrackingDataReader->Start(); - } - else - { - this->TrackingDataGenerator->SetConnector(oigtlConnector); - this->TrackingDataGenerator->Start(); - } + rbTrackingFile->setEnabled(false); + rbTrackingRandom->setEnabled(false); + pbFilename->setEnabled(false); + + if (rbTrackingFile->isChecked()) + { + this->TrackingDataReader->SetConnector(oigtlConnector); + this->TrackingDataReader->SetFileName(this->PathString); + this->TrackingDataReader->Start(); + } + else + { + this->TrackingDataGenerator->SetConnector(oigtlConnector); + this->TrackingDataGenerator->Start(); + } } @@ -276,12 +276,12 @@ void OpenIGTLinkSimulatorApp::changeStatusTextColor(QLineEdit* le, int status) { if (status < igtl::TCPConnectorBase::STATUS_NUM && status >= 0) { - QPalette p = le->palette(); - p.setColor( le->backgroundRole(), - QColor(StatusColorTable[status][0], - StatusColorTable[status][1], - StatusColorTable[status][2]) ); - le->setPalette(p); + QPalette p = le->palette(); + p.setColor( le->backgroundRole(), + QColor(StatusColorTable[status][0], + StatusColorTable[status][1], + StatusColorTable[status][2]) ); + le->setPalette(p); } } @@ -289,12 +289,12 @@ void OpenIGTLinkSimulatorApp::changeDataIOTextColor(QLineEdit* le, int status) { if (status < 3 && status >= 0) { - QPalette p = le->palette(); - p.setColor( le->backgroundRole(), - QColor(DataIOColorTable[status][0], - DataIOColorTable[status][1], - DataIOColorTable[status][2]) ); - le->setPalette(p); + QPalette p = le->palette(); + p.setColor( le->backgroundRole(), + QColor(DataIOColorTable[status][0], + DataIOColorTable[status][1], + DataIOColorTable[status][2]) ); + le->setPalette(p); } } @@ -303,18 +303,18 @@ void OpenIGTLinkSimulatorApp::updateStatus() bool editClientFlag = true; if (oigtlConnector.IsNotNull()) { - leStatusClient->setText(oigtlConnector->GetStatusString()); - changeStatusTextColor(leStatusClient, oigtlConnector->GetStatus()); - leOpenIGTLinkPort->setEnabled(oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP); - editClientFlag &= oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP; - if (oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP) - { - pbClientActivate->setText("Activate"); - } - else - { - pbClientActivate->setText("Deactivate"); - } + leStatusClient->setText(oigtlConnector->GetStatusString()); + changeStatusTextColor(leStatusClient, oigtlConnector->GetStatus()); + leOpenIGTLinkPort->setEnabled(oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP); + editClientFlag &= oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP; + if (oigtlConnector->GetStatus() == igtl::TCPConnectorBase::STATUS_STOP) + { + pbClientActivate->setText("Activate"); + } + else + { + pbClientActivate->setText("Deactivate"); + } } else{ pbAbout->setEnabled(false);} //bool editScannerFlag = true; @@ -335,7 +335,7 @@ void OpenIGTLinkSimulatorApp::quit() if (oigtlConnector.IsNotNull()) { - oigtlConnector->CloseThread(); + oigtlConnector->CloseThread(); } timer->stop(); diff --git a/OpenIGTLinkSimulatorApp.h b/OpenIGTLinkSimulatorApp.h index b4395ee..03d2f20 100644 --- a/OpenIGTLinkSimulatorApp.h +++ b/OpenIGTLinkSimulatorApp.h @@ -1,15 +1,15 @@ /*========================================================================= - + Program: OpenIGTLink Simulator Language: C++ - + Copyright (c) Brigham and Women's Hospital. All rights reserved. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ + + =========================================================================*/ #ifndef OpenIGTLinkSimulatorApp_h #define OpenIGTLinkSimulatorApp_h @@ -28,58 +28,58 @@ #define DEFAULT_RMP_ADDR "192.168.2.1" - + class OpenIGTLinkSimulatorApp : public QMainWindow, private Ui::OpenIGTLinkSimulatorWindow { Q_OBJECT - -public: + + public: static const int StatusColorTable[][3]; static const int DataIOColorTable[][3]; - -public: + + public: OpenIGTLinkSimulatorApp(QWidget *parent = 0); - -public slots: - void getPath(); - void about(); - void enable(); - void disable(); - void channel(int i); - void scannerActivateClicked(); - void clientActivateClicked(); + public slots: + void getPath(); + void about(); + void enable(); + void disable(); + void channel(int i); + + void scannerActivateClicked(); + void clientActivateClicked(); - void scannerAddressChanged( const QString & text ); - void imagePortChanged( const QString & text ); - void controlPortChanged( const QString & text ); - void igtlPortChanged( const QString & text ); + void scannerAddressChanged( const QString & text ); + void imagePortChanged( const QString & text ); + void controlPortChanged( const QString & text ); + void igtlPortChanged( const QString & text ); - void updateStatus(); - void quit(); + void updateStatus(); + void quit(); -private: + private: - void changeStatusTextColor(QLineEdit* le, int status); - void changeDataIOTextColor(QLineEdit* le, int status); + void changeStatusTextColor(QLineEdit* le, int status); + void changeDataIOTextColor(QLineEdit* le, int status); - QTimer *timer; - igtl::MultiThreader::Pointer Threader; - igtl::TCPConnectorServerOIGTL::Pointer oigtlConnector; + QTimer *timer; + igtl::MultiThreader::Pointer Threader; + igtl::TCPConnectorServerOIGTL::Pointer oigtlConnector; - qDataGeneratorTracking* TrackingDataGenerator; - qDataReadingTracker* TrackingDataReader; + qDataGeneratorTracking* TrackingDataGenerator; + qDataReadingTracker* TrackingDataReader; - bool fScannerActive; - bool fClientActive; + bool fScannerActive; + bool fClientActive; - QString scannerAddress; - QString imagePort; - QString controlPort; - QString igtlPort; + QString scannerAddress; + QString imagePort; + QString controlPort; + QString igtlPort; - std::string PathString; + std::string PathString; }; diff --git a/igtlTCPConnectorBase.cxx b/igtlTCPConnectorBase.cxx index 6373689..374a2d0 100644 --- a/igtlTCPConnectorBase.cxx +++ b/igtlTCPConnectorBase.cxx @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #include @@ -19,92 +19,92 @@ namespace igtl { -const char* TCPConnectorBase::StatusString[] = { - "OFF", - "WAITING", - "CONNECTED", - "ERROR" -}; + const char* TCPConnectorBase::StatusString[] = { + "OFF", + "WAITING", + "CONNECTED", + "ERROR" + }; -//----------------------------------------------------------------------------- -TCPConnectorBase::TCPConnectorBase() -{ - this->Hostname = "localhost"; - this->Port = 0; - this->Active = 0; - this->Status = STATUS_STOP; - - this->ConfigurationUpdated = true; - this->DataReceivedFlag = false; - this->DataSentFlag = false; -} + //----------------------------------------------------------------------------- + TCPConnectorBase::TCPConnectorBase() + { + this->Hostname = "localhost"; + this->Port = 0; + this->Active = 0; + this->Status = STATUS_STOP; -//----------------------------------------------------------------------------- -TCPConnectorBase::~TCPConnectorBase() -{ -} + this->ConfigurationUpdated = true; + this->DataReceivedFlag = false; + this->DataSentFlag = false; + } + //----------------------------------------------------------------------------- + TCPConnectorBase::~TCPConnectorBase() + { + } -//----------------------------------------------------------------------------- -void TCPConnectorBase::PrintSelf(std::ostream& os) const -{ - this->Superclass::PrintSelf(os); -} + //----------------------------------------------------------------------------- + void TCPConnectorBase::PrintSelf(std::ostream& os) const + { + this->Superclass::PrintSelf(os); + } -//----------------------------------------------------------------------------- -void TCPConnectorBase::MonitorThreadFunction(void * ptr) -{ - igtl::MultiThreader::ThreadInfo* info = - static_cast(ptr); - TCPConnectorBase * con = static_cast(info->UserData); + //----------------------------------------------------------------------------- + void TCPConnectorBase::MonitorThreadFunction(void * ptr) + { + igtl::MultiThreader::ThreadInfo* info = + static_cast(ptr); - con->Active = 0; - while (!con->Initialize()) - { - // while(!con->Initialize()){ - - // } - std::cerr << "TCPConnectorBase::MonitorThreadFunction(): Failed to initialize a server socket." << std::endl; - return; - con->Initialize(); - } - - while (con->Active >= 0) - { - if (con->ConfigurationUpdated) - { - con->ConfigurationUpdated = false; - } - con->Status = STATUS_STOP; - while (con->Active) + TCPConnectorBase * con = static_cast(info->UserData); + + con->Active = 0; + while (!con->Initialize()) { - con->Status = STATUS_WAITING; - if(con->WaitForConnection()) - { - con->Status = STATUS_CONNECTED; - while (con->Status == STATUS_CONNECTED) - { - if (con->ReceiveMessage() == 0) - { - // Disconnected - con->CloseConnection(); - con->Status = STATUS_WAITING; - break; - } - con->SetDataReceivedFlag(); - } - } + // while(!con->Initialize()){ + + // } + std::cerr << "TCPConnectorBase::MonitorThreadFunction(): Failed to initialize a server socket." << std::endl; + return; + con->Initialize(); } - igtl::Sleep(500); - } - con->Finalize(); -} - // End of igtl namespace + while (con->Active >= 0) + { + if (con->ConfigurationUpdated) + { + con->ConfigurationUpdated = false; + } + con->Status = STATUS_STOP; + while (con->Active) + { + con->Status = STATUS_WAITING; + if(con->WaitForConnection()) + { + con->Status = STATUS_CONNECTED; + while (con->Status == STATUS_CONNECTED) + { + if (con->ReceiveMessage() == 0) + { + // Disconnected + con->CloseConnection(); + con->Status = STATUS_WAITING; + break; + } + con->SetDataReceivedFlag(); + } + } + } + igtl::Sleep(500); + } + + con->Finalize(); + } + // End of igtl namespace } diff --git a/igtlTCPConnectorBase.h b/igtlTCPConnectorBase.h index 6cadf11..6568741 100644 --- a/igtlTCPConnectorBase.h +++ b/igtlTCPConnectorBase.h @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #ifndef __TCPConnectorBase_H #define __TCPConnectorBase_H @@ -52,105 +52,105 @@ namespace igtl #define NOTUSED(x) -class IGTLCommon_EXPORT TCPConnectorBase : public Object -{ -public: + class IGTLCommon_EXPORT TCPConnectorBase : public Object + { + public: - enum { - STATUS_STOP = 0, - STATUS_WAITING, - STATUS_CONNECTED, - STATUS_ERROR, - STATUS_NUM - }; + enum { + STATUS_STOP = 0, + STATUS_WAITING, + STATUS_CONNECTED, + STATUS_ERROR, + STATUS_NUM + }; - static const char* StatusString[]; + static const char* StatusString[]; - typedef TCPConnectorBase Self; - typedef Object Superclass; - typedef SmartPointer Pointer; - typedef SmartPointer ConstPointer; + typedef TCPConnectorBase Self; + typedef Object Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; - igtlTypeMacro(igtl::TCPConnectorBase, igtl::Object) - igtlNewMacro(igtl::TCPConnectorBase); + igtlTypeMacro(igtl::TCPConnectorBase, igtl::Object) + igtlNewMacro(igtl::TCPConnectorBase); -public: + public: - virtual const char * GetClassName() { return "Base"; }; + virtual const char * GetClassName() { return "Base"; }; - void SetHostname(const char * str) {this->Hostname = str; this->ConfigurationUpdated = true; }; - const char * GetHostname() { return this->Hostname.c_str(); }; - void SetPort(int p) { this->Port = p; this->ConfigurationUpdated = true; }; - int GetPort() { return this->Port; }; + void SetHostname(const char * str) {this->Hostname = str; this->ConfigurationUpdated = true; }; + const char * GetHostname() { return this->Hostname.c_str(); }; + void SetPort(int p) { this->Port = p; this->ConfigurationUpdated = true; }; + int GetPort() { return this->Port; }; - virtual int PushMessage(igtl::MessageBase * NOTUSED(message)) { return 0; }; + virtual int PushMessage(igtl::MessageBase * NOTUSED(message)) { return 0; }; - int SetOutputConnector(igtl::TCPConnectorBase * con) - { - this->OutputConnector = con; - } + int SetOutputConnector(igtl::TCPConnectorBase * con) + { + this->OutputConnector = con; + } - inline int GetStatus() { return this->Status; }; - inline const char* GetStatusString() { return this->StatusString[this->Status]; }; - - inline void Activate() { this->Active = 1; }; - inline void Deactivate() { this->Active = 0; }; - inline void CloseThread() { this->Active = -1; }; - - static void MonitorThreadFunction(void * ptr); - - // Description: - // DataReceivedFlag and DataSentFlag are used to check if there are any received/ - // sent messages through the connector. Those flags are turned ON when the connector - // receives/sents messages, and turned OFF when they are checked by using CheckDataReceived()/ - // CheckDataSent() functions. Those flags are used for data receive/sent indicators in a GUI. - - inline void SetDataReceivedFlag() { this->DataReceivedFlag = true; } - inline void SetDataSentFlag() { this->DataSentFlag = true; } - inline bool CheckDataReceived() - { - bool r = this->DataReceivedFlag; - this->DataReceivedFlag = false; - return r; - } - inline bool CheckDataSent() - { - bool r = this->DataSentFlag; - this->DataSentFlag = false; - return r; - } - - -protected: - - TCPConnectorBase(); - ~TCPConnectorBase(); - - void PrintSelf(std::ostream& os) const; - - // Description: - // Initialization() is called just after starting the - virtual int Initialize() { return 0; }; - virtual int WaitForConnection() { return 0; }; - virtual int ReceiveMessage() { return 0; }; - virtual int CloseConnection() { return 0; }; - virtual int Finalize() { return 0; }; + inline int GetStatus() { return this->Status; }; + inline const char* GetStatusString() { return this->StatusString[this->Status]; }; + + inline void Activate() { this->Active = 1; }; + inline void Deactivate() { this->Active = 0; }; + inline void CloseThread() { this->Active = -1; }; + + static void MonitorThreadFunction(void * ptr); + + // Description: + // DataReceivedFlag and DataSentFlag are used to check if there are any received/ + // sent messages through the connector. Those flags are turned ON when the connector + // receives/sents messages, and turned OFF when they are checked by using CheckDataReceived()/ + // CheckDataSent() functions. Those flags are used for data receive/sent indicators in a GUI. + + inline void SetDataReceivedFlag() { this->DataReceivedFlag = true; } + inline void SetDataSentFlag() { this->DataSentFlag = true; } + inline bool CheckDataReceived() + { + bool r = this->DataReceivedFlag; + this->DataReceivedFlag = false; + return r; + } + inline bool CheckDataSent() + { + bool r = this->DataSentFlag; + this->DataSentFlag = false; + return r; + } + + + protected: + + TCPConnectorBase(); + ~TCPConnectorBase(); + + void PrintSelf(std::ostream& os) const; + + // Description: + // Initialization() is called just after starting the + virtual int Initialize() { return 0; }; + virtual int WaitForConnection() { return 0; }; + virtual int ReceiveMessage() { return 0; }; + virtual int CloseConnection() { return 0; }; + virtual int Finalize() { return 0; }; -protected: + protected: - int Active; // 0: Deactive; 1: Active; -1: exiting - int Status; - std::string Hostname; - int Port; + int Active; // 0: Deactive; 1: Active; -1: exiting + int Status; + std::string Hostname; + int Port; - bool ConfigurationUpdated; + bool ConfigurationUpdated; - bool DataReceivedFlag; - bool DataSentFlag; + bool DataReceivedFlag; + bool DataSentFlag; - TCPConnectorBase::Pointer OutputConnector; + TCPConnectorBase::Pointer OutputConnector; -}; + }; } diff --git a/igtlTCPConnectorClient.cxx b/igtlTCPConnectorClient.cxx index d3490e3..b1feaa8 100644 --- a/igtlTCPConnectorClient.cxx +++ b/igtlTCPConnectorClient.cxx @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #include "igtlSocket.h" @@ -21,79 +21,79 @@ namespace igtl { -//----------------------------------------------------------------------------- -TCPConnectorClient::TCPConnectorClient() -{ -} - - -//----------------------------------------------------------------------------- -TCPConnectorClient::~TCPConnectorClient() -{ -} + //----------------------------------------------------------------------------- + TCPConnectorClient::TCPConnectorClient() + { + } -//----------------------------------------------------------------------------- -void TCPConnectorClient::PrintSelf(std::ostream& os) const -{ - this->Superclass::PrintSelf(os); -} - + //----------------------------------------------------------------------------- + TCPConnectorClient::~TCPConnectorClient() + { + } -//----------------------------------------------------------------------------- -int TCPConnectorClient::Initialize() -{ - return 1; -} + //----------------------------------------------------------------------------- + void TCPConnectorClient::PrintSelf(std::ostream& os) const + { + this->Superclass::PrintSelf(os); + } -//----------------------------------------------------------------------------- -int TCPConnectorClient::WaitForConnection() -{ - //std::cerr << "TCPConnectorClient::WaitForConnection(): Connecting to server" << std::endl; - this->Socket = NULL; - this->Socket = igtl::ClientSocket::New(); - this->DebugOff(); - if (this->Hostname.length() == 0) - { - return 0; - } - //this->Socket->SetConnectTimeout(1000); - int r = this->Socket->ConnectToServer(this->Hostname.c_str(), this->Port); - this->Socket->SetReceiveTimeout(0); - if (r == 0) // if connected to server - { + //----------------------------------------------------------------------------- + int TCPConnectorClient::Initialize() + { return 1; - } - //igtl::Sleep(1000); - return 0; -} + } + + + //----------------------------------------------------------------------------- + int TCPConnectorClient::WaitForConnection() + { + //std::cerr << "TCPConnectorClient::WaitForConnection(): Connecting to server" << std::endl; + + this->Socket = NULL; + this->Socket = igtl::ClientSocket::New(); + this->DebugOff(); + if (this->Hostname.length() == 0) + { + return 0; + } + //this->Socket->SetConnectTimeout(1000); + int r = this->Socket->ConnectToServer(this->Hostname.c_str(), this->Port); + this->Socket->SetReceiveTimeout(0); + if (r == 0) // if connected to server + { + return 1; + } + //igtl::Sleep(1000); + return 0; + } -//----------------------------------------------------------------------------- -int TCPConnectorClient::ReceiveMessage() -{ - return 0; -} + //----------------------------------------------------------------------------- + int TCPConnectorClient::ReceiveMessage() + { + return 0; + } -//----------------------------------------------------------------------------- -int TCPConnectorClient::CloseConnection() -{ - if (this->Socket.IsNotNull()) - { - this->Socket->CloseSocket(); - } + //----------------------------------------------------------------------------- + int TCPConnectorClient::CloseConnection() + { + if (this->Socket.IsNotNull()) + { + this->Socket->CloseSocket(); + } - return 0; -} + return 0; + } -//----------------------------------------------------------------------------- -int TCPConnectorClient::Finalize() -{ - return 0; -} + //----------------------------------------------------------------------------- + int TCPConnectorClient::Finalize() + { + return 0; + } } // End of igtl namespace diff --git a/igtlTCPConnectorClient.h b/igtlTCPConnectorClient.h index a0dc7af..7ddd3f4 100644 --- a/igtlTCPConnectorClient.h +++ b/igtlTCPConnectorClient.h @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #ifndef __TCPConnectorClient_H #define __TCPConnectorClient_H @@ -23,39 +23,39 @@ namespace igtl { -class IGTLCommon_EXPORT TCPConnectorClient : public TCPConnectorBase -{ -public: + class IGTLCommon_EXPORT TCPConnectorClient : public TCPConnectorBase + { + public: - typedef TCPConnectorClient Self; - typedef Object Superclass; - typedef SmartPointer Pointer; - typedef SmartPointer ConstPointer; + typedef TCPConnectorClient Self; + typedef Object Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; - igtlTypeMacro(igtl::TCPConnectorClient, igtl::TCPConnectorBase) - igtlNewMacro(igtl::TCPConnectorClient); + igtlTypeMacro(igtl::TCPConnectorClient, igtl::TCPConnectorBase) + igtlNewMacro(igtl::TCPConnectorClient); -public: + public: - virtual const char * GetClassName() { return "Client"; }; + virtual const char * GetClassName() { return "Client"; }; -protected: - TCPConnectorClient(); - ~TCPConnectorClient(); + protected: + TCPConnectorClient(); + ~TCPConnectorClient(); - void PrintSelf(std::ostream& os) const; + void PrintSelf(std::ostream& os) const; - virtual int Initialize(); - virtual int WaitForConnection(); - virtual int ReceiveMessage(); - virtual int CloseConnection(); - virtual int Finalize(); + virtual int Initialize(); + virtual int WaitForConnection(); + virtual int ReceiveMessage(); + virtual int CloseConnection(); + virtual int Finalize(); -protected: + protected: - igtl::ClientSocket::Pointer Socket; + igtl::ClientSocket::Pointer Socket; -}; + }; } diff --git a/igtlTCPConnectorServer.cxx b/igtlTCPConnectorServer.cxx index 90d4431..b2341b7 100644 --- a/igtlTCPConnectorServer.cxx +++ b/igtlTCPConnectorServer.cxx @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #include "igtlSocket.h" @@ -20,78 +20,78 @@ namespace igtl { -//----------------------------------------------------------------------------- -TCPConnectorServer::TCPConnectorServer() -{ - this->ServerSocket = igtl::ServerSocket::New(); - this->ServerSocket->DebugOff(); -} - -//----------------------------------------------------------------------------- -TCPConnectorServer::~TCPConnectorServer() -{ -} + //----------------------------------------------------------------------------- + TCPConnectorServer::TCPConnectorServer() + { + this->ServerSocket = igtl::ServerSocket::New(); + this->ServerSocket->DebugOff(); + } + + //----------------------------------------------------------------------------- + TCPConnectorServer::~TCPConnectorServer() + { + } + + + //----------------------------------------------------------------------------- + void TCPConnectorServer::PrintSelf(std::ostream& os) const + { + this->Superclass::PrintSelf(os); + } + + + //----------------------------------------------------------------------------- + int TCPConnectorServer::Initialize() + { + if (this->ServerSocket->CreateServer(this->Port)) + { + return 0; + } + return 1; + } -//----------------------------------------------------------------------------- -void TCPConnectorServer::PrintSelf(std::ostream& os) const -{ - this->Superclass::PrintSelf(os); -} + //----------------------------------------------------------------------------- + int TCPConnectorServer::WaitForConnection() + { + this->Socket = NULL; + if (this->ServerSocket.IsNotNull()) + { + this->Socket = this->ServerSocket->WaitForConnection(1000); + } + if (this->Socket.IsNotNull() && this->Socket->GetConnected()) // if client connected + { + this->Socket->DebugOff(); + return 1; + } -//----------------------------------------------------------------------------- -int TCPConnectorServer::Initialize() -{ - if (this->ServerSocket->CreateServer(this->Port)) - { return 0; - } - return 1; -} + } -//----------------------------------------------------------------------------- -int TCPConnectorServer::WaitForConnection() -{ - this->Socket = NULL; - if (this->ServerSocket.IsNotNull()) - { - this->Socket = this->ServerSocket->WaitForConnection(1000); - } - - if (this->Socket.IsNotNull() && this->Socket->GetConnected()) // if client connected - { - this->Socket->DebugOff(); - return 1; - } - return 0; + //----------------------------------------------------------------------------- + int TCPConnectorServer::CloseConnection() + { + if (this->Socket.IsNotNull()) + { + this->Socket->CloseSocket(); + } -} - - -//----------------------------------------------------------------------------- -int TCPConnectorServer::CloseConnection() -{ - if (this->Socket.IsNotNull()) - { - this->Socket->CloseSocket(); - } - - return 0; -} + return 0; + } -//----------------------------------------------------------------------------- -int TCPConnectorServer::Finalize() -{ - if (this->ServerSocket.IsNotNull()) - { - this->ServerSocket->CloseSocket(); - } + //----------------------------------------------------------------------------- + int TCPConnectorServer::Finalize() + { + if (this->ServerSocket.IsNotNull()) + { + this->ServerSocket->CloseSocket(); + } - return 0; -} + return 0; + } } // End of igtl namespace diff --git a/igtlTCPConnectorServer.h b/igtlTCPConnectorServer.h index 5f186e3..2f5e3f0 100644 --- a/igtlTCPConnectorServer.h +++ b/igtlTCPConnectorServer.h @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #ifndef __TCPConnectorServer_H @@ -24,42 +24,42 @@ namespace igtl { -class IGTLCommon_EXPORT TCPConnectorServer : public TCPConnectorBase -{ -public: + class IGTLCommon_EXPORT TCPConnectorServer : public TCPConnectorBase + { + public: - typedef TCPConnectorServer Self; - typedef Object Superclass; - typedef SmartPointer Pointer; - typedef SmartPointer ConstPointer; + typedef TCPConnectorServer Self; + typedef Object Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; - igtlTypeMacro(igtl::TCPConnectorServer, igtl::TCPConnectorBase) - igtlNewMacro(igtl::TCPConnectorServer); + igtlTypeMacro(igtl::TCPConnectorServer, igtl::TCPConnectorBase) + igtlNewMacro(igtl::TCPConnectorServer); -public: + public: - virtual const char * GetClassName() { return "Server"; }; + virtual const char * GetClassName() { return "Server"; }; - igtl::Socket::Pointer& GetSocket() { return this->Socket; }; + igtl::Socket::Pointer& GetSocket() { return this->Socket; }; -protected: - TCPConnectorServer(); - ~TCPConnectorServer(); + protected: + TCPConnectorServer(); + ~TCPConnectorServer(); - void PrintSelf(std::ostream& os) const; + void PrintSelf(std::ostream& os) const; - virtual int Initialize(); - virtual int WaitForConnection(); - virtual int ReceiveMessage() { return 0; }; - virtual int CloseConnection(); - virtual int Finalize(); + virtual int Initialize(); + virtual int WaitForConnection(); + virtual int ReceiveMessage() { return 0; }; + virtual int CloseConnection(); + virtual int Finalize(); -protected: - igtl::ServerSocket::Pointer ServerSocket; - igtl::Socket::Pointer Socket; + protected: + igtl::ServerSocket::Pointer ServerSocket; + igtl::Socket::Pointer Socket; -}; + }; } diff --git a/igtlTCPConnectorServerOIGTL.cxx b/igtlTCPConnectorServerOIGTL.cxx index 91aebf9..62a6202 100644 --- a/igtlTCPConnectorServerOIGTL.cxx +++ b/igtlTCPConnectorServerOIGTL.cxx @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #include "igtlSocket.h" @@ -24,265 +24,265 @@ namespace igtl { -//----------------------------------------------------------------------------- -TCPConnectorServerOIGTL::TCPConnectorServerOIGTL() -{ -} + //----------------------------------------------------------------------------- + TCPConnectorServerOIGTL::TCPConnectorServerOIGTL() + { + } -//----------------------------------------------------------------------------- -TCPConnectorServerOIGTL::~TCPConnectorServerOIGTL() -{ -} + //----------------------------------------------------------------------------- + TCPConnectorServerOIGTL::~TCPConnectorServerOIGTL() + { + } -//----------------------------------------------------------------------------- -void TCPConnectorServerOIGTL::PrintSelf(std::ostream& os) const -{ - this->Superclass::PrintSelf(os); -} + //----------------------------------------------------------------------------- + void TCPConnectorServerOIGTL::PrintSelf(std::ostream& os) const + { + this->Superclass::PrintSelf(os); + } -//----------------------------------------------------------------------------- -int TCPConnectorServerOIGTL::PushMessage(igtl::MessageBase * message) -{ - if (this->Status == STATUS_CONNECTED) - { - if (this->Socket.IsNull()) + //----------------------------------------------------------------------------- + int TCPConnectorServerOIGTL::PushMessage(igtl::MessageBase * message) + { + if (this->Status == STATUS_CONNECTED) { - std::cerr << "Socket is null (PushMessage)." << std::endl; - // Do nothing. - return 1; + if (this->Socket.IsNull()) + { + std::cerr << "Socket is null (PushMessage)." << std::endl; + // Do nothing. + return 1; + } + int r = this->Socket->Send(message->GetPackPointer(), message->GetPackSize()); + if (r) + { + this->SetDataSentFlag(); + return 1; + } + else + { + //std::cerr << "TCPConnectorServerOIGTL::PushMessage() : Connection Lost." << std::endl; + return 0; + } } - int r = this->Socket->Send(message->GetPackPointer(), message->GetPackSize()); - if (r) - { - this->SetDataSentFlag(); - return 1; - } - else - { - //std::cerr << "TCPConnectorServerOIGTL::PushMessage() : Connection Lost." << std::endl; - return 0; - } - } - // TODO: Does ReceiveMessage() in MonitorThreadFunction() returns 0 in this case? - return 0; -} + // TODO: Does ReceiveMessage() in MonitorThreadFunction() returns 0 in this case? + return 0; + } -//----------------------------------------------------------------------------- -int TCPConnectorServerOIGTL::Initialize() -{ - if (TCPConnectorServer::Initialize()) - { - this->HeaderMsg = igtl::MessageHeader::New(); - return 1; - } + //----------------------------------------------------------------------------- + int TCPConnectorServerOIGTL::Initialize() + { + if (TCPConnectorServer::Initialize()) + { + this->HeaderMsg = igtl::MessageHeader::New(); + return 1; + } - this->HeaderMsg = NULL; - return 0; + this->HeaderMsg = NULL; + return 0; -} + } -//----------------------------------------------------------------------------- -int TCPConnectorServerOIGTL::ReceiveMessage() -{ + //----------------------------------------------------------------------------- + int TCPConnectorServerOIGTL::ReceiveMessage() + { - // std::cerr << "TCPConnectorServerOIGTL::ReceiveMessage() : Waiting for messages." << std::endl; + // std::cerr << "TCPConnectorServerOIGTL::ReceiveMessage() : Waiting for messages." << std::endl; - // Initialize receive buffer - //this->HeaderMsg->InitPack(); + // Initialize receive buffer + //this->HeaderMsg->InitPack(); - igtl::MessageHeader::Pointer header; - header = igtl::MessageHeader::New(); - header->InitPack(); + igtl::MessageHeader::Pointer header; + header = igtl::MessageHeader::New(); + header->InitPack(); - if (this->Socket.IsNotNull() && this->Socket->GetConnected()) - { - int r = this->Socket->Receive(header->GetPackPointer(), - header->GetPackSize()); - if (r != header->GetPackSize()) + if (this->Socket.IsNotNull() && this->Socket->GetConnected()) { - if (r == 0) - { - // Connection closed - return 0; - } - // Wrong message but continue to communicate - //std::cerr << "TCPConnectorServerOIGTL::ReceiveMessage() : Illegal message." << std::endl; - return 1; + int r = this->Socket->Receive(header->GetPackPointer(), + header->GetPackSize()); + if (r != header->GetPackSize()) + { + if (r == 0) + { + // Connection closed + return 0; + } + // Wrong message but continue to communicate + //std::cerr << "TCPConnectorServerOIGTL::ReceiveMessage() : Illegal message." << std::endl; + return 1; + } + } + else + { + return 0; } - } - else - { - return 0; - } - // Deserialize the header - header->Unpack(); + // Deserialize the header + header->Unpack(); - // Check data type and receive data body - MessageHandlerTypeMapType::iterator iter; - iter = this->MessageHandlerTypeMap.find(header->GetDeviceType()); + // Check data type and receive data body + MessageHandlerTypeMapType::iterator iter; + iter = this->MessageHandlerTypeMap.find(header->GetDeviceType()); - qDataGeneratorBase* handler = NULL; + qDataGeneratorBase* handler = NULL; - if (iter != this->MessageHandlerTypeMap.end()) - { - MessageHandlerNameMapType& nameMap = iter->second; - MessageHandlerNameMapType::iterator niter; - std::string key = std::string("+") + header->GetDeviceName(); - niter = nameMap.find(key); - if (niter != nameMap.end()) + if (iter != this->MessageHandlerTypeMap.end()) { - handler = niter->second; + MessageHandlerNameMapType& nameMap = iter->second; + MessageHandlerNameMapType::iterator niter; + std::string key = std::string("+") + header->GetDeviceName(); + niter = nameMap.find(key); + if (niter != nameMap.end()) + { + handler = niter->second; + } + else // No handler for this specific message name + { + niter = nameMap.find("*"); + if (niter != nameMap.end()) // There is a wild card handler + { + handler = niter->second; + } + } } - else // No handler for this specific message name + + if (handler) { - niter = nameMap.find("*"); - if (niter != nameMap.end()) // There is a wild card handler - { - handler = niter->second; - } + handler->HandleReceivedMessage(this->Socket, header); } - } - - if (handler) - { - handler->HandleReceivedMessage(this->Socket, header); - } - else // No handler is available for this type of message. - { - if (this->Socket.IsNotNull() && this->Socket->GetConnected()) + else // No handler is available for this type of message. { - this->Socket->Skip(header->GetBodySizeToRead(), 0); + if (this->Socket.IsNotNull() && this->Socket->GetConnected()) + { + this->Socket->Skip(header->GetBodySizeToRead(), 0); + } } - } - return 1; + return 1; -} + } -//----------------------------------------------------------------------------- -int TCPConnectorServerOIGTL::Finalize() -{ - if (TCPConnectorServer::Finalize()) - { - return 1; - } - return 0; -} + //----------------------------------------------------------------------------- + int TCPConnectorServerOIGTL::Finalize() + { + if (TCPConnectorServer::Finalize()) + { + return 1; + } + return 0; + } -//----------------------------------------------------------------------------- -void TCPConnectorServerOIGTL::RegisterMessageHandler(const char* type, qDataGeneratorBase* handler) -{ + //----------------------------------------------------------------------------- + void TCPConnectorServerOIGTL::RegisterMessageHandler(const char* type, qDataGeneratorBase* handler) + { - MessageHandlerTypeMapType::iterator iter; + MessageHandlerTypeMapType::iterator iter; - iter = this->MessageHandlerTypeMap.find(type); - - if (iter == this->MessageHandlerTypeMap.end()) // the type has not been registered yet. - { - MessageHandlerNameMapType nameMap; - nameMap["*"] = handler; - this->MessageHandlerTypeMap[type] = nameMap; - } - else - { - MessageHandlerNameMapType& nameMap = iter->second; - nameMap.clear(); - nameMap["*"] = handler; - } - -} - - -//----------------------------------------------------------------------------- -void TCPConnectorServerOIGTL::RegisterMessageHandler(const char* type, const char* name, qDataGeneratorBase* handler) -{ + iter = this->MessageHandlerTypeMap.find(type); + + if (iter == this->MessageHandlerTypeMap.end()) // the type has not been registered yet. + { + MessageHandlerNameMapType nameMap; + nameMap["*"] = handler; + this->MessageHandlerTypeMap[type] = nameMap; + } + else + { + MessageHandlerNameMapType& nameMap = iter->second; + nameMap.clear(); + nameMap["*"] = handler; + } + + } + + + //----------------------------------------------------------------------------- + void TCPConnectorServerOIGTL::RegisterMessageHandler(const char* type, const char* name, qDataGeneratorBase* handler) + { - MessageHandlerTypeMapType::iterator iter; + MessageHandlerTypeMapType::iterator iter; - iter = this->MessageHandlerTypeMap.find(type); - - std::string nkey = std::string("+") + name; - if (iter == this->MessageHandlerTypeMap.end()) // the type has not been registered yet. - { - MessageHandlerNameMapType nameMap; - nameMap[nkey] = handler; - this->MessageHandlerTypeMap[type] = nameMap; - } - else - { - MessageHandlerNameMapType& nameMap = iter->second; - nameMap[nkey] = handler; - } -} - - -//----------------------------------------------------------------------------- -void TCPConnectorServerOIGTL::UnRegisterMessageHandler(const char* type) -{ + iter = this->MessageHandlerTypeMap.find(type); + + std::string nkey = std::string("+") + name; + if (iter == this->MessageHandlerTypeMap.end()) // the type has not been registered yet. + { + MessageHandlerNameMapType nameMap; + nameMap[nkey] = handler; + this->MessageHandlerTypeMap[type] = nameMap; + } + else + { + MessageHandlerNameMapType& nameMap = iter->second; + nameMap[nkey] = handler; + } + } + - MessageHandlerTypeMapType::iterator iter; + //----------------------------------------------------------------------------- + void TCPConnectorServerOIGTL::UnRegisterMessageHandler(const char* type) + { + + MessageHandlerTypeMapType::iterator iter; - iter = this->MessageHandlerTypeMap.find(type); + iter = this->MessageHandlerTypeMap.find(type); - if (iter != this->MessageHandlerTypeMap.end()) // the type is found in the map - { - this->MessageHandlerTypeMap.erase(iter); - } -} + if (iter != this->MessageHandlerTypeMap.end()) // the type is found in the map + { + this->MessageHandlerTypeMap.erase(iter); + } + } -//----------------------------------------------------------------------------- -int TCPConnectorServerOIGTL::ReceiveTransform(igtl::MessageHeader * header) -{ + //----------------------------------------------------------------------------- + int TCPConnectorServerOIGTL::ReceiveTransform(igtl::MessageHeader * header) + { - //std::cerr << "TCPConnectorServerOIGTL::ReceiveTransform() : Receiving TRANSFORM data type." << std::endl; + //std::cerr << "TCPConnectorServerOIGTL::ReceiveTransform() : Receiving TRANSFORM data type." << std::endl; - // Create a message buffer to receive transform data - igtl::TransformMessage::Pointer transMsg; - transMsg = igtl::TransformMessage::New(); - transMsg->SetMessageHeader(header); - transMsg->AllocatePack(); + // Create a message buffer to receive transform data + igtl::TransformMessage::Pointer transMsg; + transMsg = igtl::TransformMessage::New(); + transMsg->SetMessageHeader(header); + transMsg->AllocatePack(); - // Receive transform data from the socket - if (this->Socket.IsNotNull() && this->Socket->GetConnected()) - { - int r = this->Socket->Receive(transMsg->GetPackBodyPointer(), transMsg->GetPackBodySize()); - if (r == 0) + // Receive transform data from the socket + if (this->Socket.IsNotNull() && this->Socket->GetConnected()) { - // Connection closed. - return 0; + int r = this->Socket->Receive(transMsg->GetPackBodyPointer(), transMsg->GetPackBodySize()); + if (r == 0) + { + // Connection closed. + return 0; + } + } + else + { + return 0; } - } - else - { - return 0; - } - // Deserialize the transform data - // If you want to skip CRC check, call Unpack() without argument. - int c = transMsg->Unpack(1); + // Deserialize the transform data + // If you want to skip CRC check, call Unpack() without argument. + int c = transMsg->Unpack(1); - if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK - { - if (this->OutputConnector.IsNotNull()) + if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK { - this->OutputConnector->PushMessage(transMsg); + if (this->OutputConnector.IsNotNull()) + { + this->OutputConnector->PushMessage(transMsg); + } + return 1; } - return 1; - } - return 1; -} + return 1; + } } // End of igtl namespace diff --git a/igtlTCPConnectorServerOIGTL.h b/igtlTCPConnectorServerOIGTL.h index dda8b3e..eceec27 100644 --- a/igtlTCPConnectorServerOIGTL.h +++ b/igtlTCPConnectorServerOIGTL.h @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #ifndef __TCPConnectorServerOIGTL_H @@ -29,100 +29,100 @@ class qDataGeneratorBase; namespace igtl { -class IGTLCommon_EXPORT TCPConnectorServerOIGTL : public TCPConnectorServer -{ -public: + class IGTLCommon_EXPORT TCPConnectorServerOIGTL : public TCPConnectorServer + { + public: - typedef TCPConnectorServerOIGTL Self; - typedef Object Superclass; - typedef SmartPointer Pointer; - typedef SmartPointer ConstPointer; - - igtlTypeMacro(igtl::TCPConnectorServerOIGTL, igtl::TCPConnectorServer) - igtlNewMacro(igtl::TCPConnectorServerOIGTL); - -public: - - virtual const char * GetClassName() { return "OpenIGTLink"; }; - int SetMessageHandler(); - virtual int PushMessage(igtl::MessageBase * message); - - // Functions to register message handlers. RegisterMessageHandler(type, handler) registers - // a handler for any messages with the specified type, while RegisterMessageHandler(type, name, handler) - // registers handler for messages with the specified type and name. If the functions are called - // multiple times, RegisterMessageHandler(type, name, handler) will 'overwrite' - // the registered information. For example, if those functions are called as: - // - // RegisterMessageHandler("type1", handler1); - // RegisterMessageHandler("type1", "name1", handler2); - // RegisterMessageHandler("type1", "name2", handler3); - // - // the ConnectorServerOIGTL class will use handler2 and hander3 for "type1" messages with - // message names of "name1" and "name2" respectively, and use handler1 for other "type1" - // messages. This handler information is always "overwritten". For example, if the function is called as: - // - // RegisterMessageHandler("type1", "name1", handler2); - // RegisterMessageHandler("type1", "name1", handler3); - // - // "type1" messages with a name "name1" will be handled by handler3. Another example is, if the - // function is called as: - // - // RegisterMessageHandler("type1", "name1", handler2); - // RegisterMessageHandler("type1", "name2", handler3); - // RegisterMessageHandler("type1", handler1); - // - // the last call will overwrite the others, meaning that any type1 message will be handled by handler1. + typedef TCPConnectorServerOIGTL Self; + typedef Object Superclass; + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + igtlTypeMacro(igtl::TCPConnectorServerOIGTL, igtl::TCPConnectorServer) + igtlNewMacro(igtl::TCPConnectorServerOIGTL); + + public: + + virtual const char * GetClassName() { return "OpenIGTLink"; }; + int SetMessageHandler(); + virtual int PushMessage(igtl::MessageBase * message); + + // Functions to register message handlers. RegisterMessageHandler(type, handler) registers + // a handler for any messages with the specified type, while RegisterMessageHandler(type, name, handler) + // registers handler for messages with the specified type and name. If the functions are called + // multiple times, RegisterMessageHandler(type, name, handler) will 'overwrite' + // the registered information. For example, if those functions are called as: + // + // RegisterMessageHandler("type1", handler1); + // RegisterMessageHandler("type1", "name1", handler2); + // RegisterMessageHandler("type1", "name2", handler3); + // + // the ConnectorServerOIGTL class will use handler2 and hander3 for "type1" messages with + // message names of "name1" and "name2" respectively, and use handler1 for other "type1" + // messages. This handler information is always "overwritten". For example, if the function is called as: + // + // RegisterMessageHandler("type1", "name1", handler2); + // RegisterMessageHandler("type1", "name1", handler3); + // + // "type1" messages with a name "name1" will be handled by handler3. Another example is, if the + // function is called as: + // + // RegisterMessageHandler("type1", "name1", handler2); + // RegisterMessageHandler("type1", "name2", handler3); + // RegisterMessageHandler("type1", handler1); + // + // the last call will overwrite the others, meaning that any type1 message will be handled by handler1. - void RegisterMessageHandler(const char* type, qDataGeneratorBase* handler); - void RegisterMessageHandler(const char* type, const char* name, qDataGeneratorBase* handler); - void UnRegisterMessageHandler(const char* type); + void RegisterMessageHandler(const char* type, qDataGeneratorBase* handler); + void RegisterMessageHandler(const char* type, const char* name, qDataGeneratorBase* handler); + void UnRegisterMessageHandler(const char* type); -protected: + protected: - TCPConnectorServerOIGTL(); - ~TCPConnectorServerOIGTL(); + TCPConnectorServerOIGTL(); + ~TCPConnectorServerOIGTL(); - void PrintSelf(std::ostream& os) const; + void PrintSelf(std::ostream& os) const; - virtual int Initialize(); - virtual int ReceiveMessage(); - virtual int Finalize(); + virtual int Initialize(); + virtual int ReceiveMessage(); + virtual int Finalize(); - int ReceiveTransform(igtl::MessageHeader * header); + int ReceiveTransform(igtl::MessageHeader * header); -private: + private: - igtl::MessageHeader::Pointer HeaderMsg; - - // Templates to record message handlers - // The ConnectorServerOIGTL class manages message handlers (generators) based on - // message type string and message name string. The following pseudo code shows a process - // to identify the message handler after receiving a message, given message type TYPE - // and message name NAME - // - // MessageHandlerNameMapType map = MessageHandlerTypeMap[TYPE] - // if (map == Null) - // Skip() - // - // key = '+' + NAME - // qDataGeneratorBase handler = map[key] - // - // if (handler == Null) - // handler = map['*'] - // - // To differenciate the wild card "*" from message name "*", keys for MessageHandlerNameMapType - // is generated by adding '+' at the top of message name string. Therefore, - // - // - key for the wild card: "*" - // - key for string "*": "+*" - - - typedef std::map< std::string, qDataGeneratorBase* > MessageHandlerNameMapType; - typedef std::map< std::string, MessageHandlerNameMapType > MessageHandlerTypeMapType; - - MessageHandlerTypeMapType MessageHandlerTypeMap; - -}; + igtl::MessageHeader::Pointer HeaderMsg; + + // Templates to record message handlers + // The ConnectorServerOIGTL class manages message handlers (generators) based on + // message type string and message name string. The following pseudo code shows a process + // to identify the message handler after receiving a message, given message type TYPE + // and message name NAME + // + // MessageHandlerNameMapType map = MessageHandlerTypeMap[TYPE] + // if (map == Null) + // Skip() + // + // key = '+' + NAME + // qDataGeneratorBase handler = map[key] + // + // if (handler == Null) + // handler = map['*'] + // + // To differenciate the wild card "*" from message name "*", keys for MessageHandlerNameMapType + // is generated by adding '+' at the top of message name string. Therefore, + // + // - key for the wild card: "*" + // - key for string "*": "+*" + + + typedef std::map< std::string, qDataGeneratorBase* > MessageHandlerNameMapType; + typedef std::map< std::string, MessageHandlerNameMapType > MessageHandlerTypeMapType; + + MessageHandlerTypeMapType MessageHandlerTypeMap; + + }; } diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index ca0b4f8..bc9c2fd 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -1,15 +1,15 @@ /*========================================================================= - + Program: Data Generator Base Class for OpenIGTLink Simulator Language: C++ - + Copyright (c) Brigham and Women's Hospital. All rights reserved. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ + + =========================================================================*/ #include #include "qDataGeneratorBase.h" @@ -31,10 +31,10 @@ qDataGeneratorBase::~qDataGeneratorBase() //----------------------------------------------------------------------------- void qDataGeneratorBase::SetConnector(igtl::TCPConnectorServerOIGTL * connector) { - + this->Connector = connector; this->RegisterHandlers(connector); - + } @@ -52,13 +52,13 @@ void qDataGeneratorBase::Stop() { if (this->Timer != NULL) { - if (this->Timer->isActive() == true) - { - this->Timer->stop(); - } - - delete this->Timer; - this->Timer = NULL; + if (this->Timer->isActive() == true) + { + this->Timer->stop(); + } + + delete this->Timer; + this->Timer = NULL; } } @@ -66,46 +66,46 @@ void qDataGeneratorBase::Stop() //----------------------------------------------------------------------------- void qDataGeneratorBase::ProcessTimer() { - + if (this->Connector.IsNotNull() && this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) { - igtl::MessageBase::Pointer message; - //Must somehow use if() to decide whether to use GenerateData or ReadData. - //if(i==0) - // { - this->GenerateData(message); - // } - // else - // { - this->ReadData(message); - // } - if (message.IsNotNull()) - { - this->Connector->PushMessage(message); - } + igtl::MessageBase::Pointer message; + //Must somehow use if() to decide whether to use GenerateData or ReadData. + //if(i==0) + // { + this->GenerateData(message); + // } + // else + // { + this->ReadData(message); + // } + if (message.IsNotNull()) + { + this->Connector->PushMessage(message); + } } } //------------------------------------------------------------------------------ /*void qDataGeneratorBase::ProcessTimer(std::string filename) -{ - - if (this->Connector.IsNotNull() && - this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) - { - igtl::MessageBase::Pointer message; - // if(filename==""){ - this->GenerateData(message); - // } - //else{ - // this->ReadData(message, filename); - // } - if (message.IsNotNull()) - { - this->Connector->PushMessage(message); - } - } -} + { + + if (this->Connector.IsNotNull() && + this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) + { + igtl::MessageBase::Pointer message; + // if(filename==""){ + this->GenerateData(message); + // } + //else{ + // this->ReadData(message, filename); + // } + if (message.IsNotNull()) + { + this->Connector->PushMessage(message); + } + } + } */ diff --git a/qDataGeneratorBase.h b/qDataGeneratorBase.h index 521f3ad..6bd83ca 100644 --- a/qDataGeneratorBase.h +++ b/qDataGeneratorBase.h @@ -1,15 +1,15 @@ /*========================================================================= - + Program: Data Generator Base Class for OpenIGTLink Simulator Language: C++ - + Copyright (c) Brigham and Women's Hospital. All rights reserved. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ + + =========================================================================*/ #ifndef __qDataGeneratorBase_H #define __qDataGeneratorBase_H @@ -28,42 +28,42 @@ class IGTLCommon_EXPORT qDataGeneratorBase : public QObject { - + Q_OBJECT - -public: - + + public: + qDataGeneratorBase(); virtual ~qDataGeneratorBase(); - + virtual const char * GetClassName() { return "qDataGeneratorBase"; }; - + void SetInterval(int ms) { this->TimerInterval = ms; }; int GetInterval() { return this->TimerInterval; } void SetConnector(igtl::TCPConnectorServerOIGTL * connector); std::string PathString; virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header) {}; - + void Start(); void Stop(); - -protected slots: - - // void ProcessTimer(std::string filename); + + protected slots: + + // void ProcessTimer(std::string filename); void ProcessTimer(); - -protected: -virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * NOTUSED(connector)) {}; - virtual void GenerateData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; + + protected: + virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * NOTUSED(connector)) {}; + virtual void GenerateData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; virtual void ReadData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; - -protected: - - QTimer* Timer; - int TimerInterval; - igtl::TCPConnectorServerOIGTL::Pointer Connector; - + + protected: + + QTimer* Timer; + int TimerInterval; + igtl::TCPConnectorServerOIGTL::Pointer Connector; + }; diff --git a/qDataGeneratorTracking.cpp b/qDataGeneratorTracking.cpp index f25a50a..a9c8f5b 100644 --- a/qDataGeneratorTracking.cpp +++ b/qDataGeneratorTracking.cpp @@ -1,15 +1,15 @@ /*========================================================================= - + Program: Data Generator Tracking Class for OpenIGTLink Simulator Language: C++ - + Copyright (c) Brigham and Women's Hospital. All rights reserved. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ + + =========================================================================*/ #include @@ -21,35 +21,35 @@ //----------------------------------------------------------------------------- qDataGeneratorTracking::qDataGeneratorTracking(): qDataGeneratorBase() { - + //------------------------------------------------------------ // Allocate TrackingData Message Class // // NOTE: TrackingDataElement class instances are allocated // before the loop starts to avoid reallocation // in each image transfer. - + this->TrackingMsg = igtl::TrackingDataMessage::New(); this->TrackingMsg->SetDeviceName("Tracker"); - + this->NumberOfChannels = 3; this->TrackingElement.resize(this->NumberOfChannels); this->Phi.resize(this->NumberOfChannels); this->Theta.resize(this->NumberOfChannels); - + this->fTracking = 0; - + for (int i = 0; i NumberOfChannels; i ++) { - std::stringstream ss; - ss << "Channel " << i; - this->TrackingElement[i] = igtl::TrackingDataElement::New(); - this->TrackingElement[i]->SetName(ss.str().c_str()); - this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); - this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); - this->Phi[i] = 0.0; - this->Theta[i] = 0.0; + std::stringstream ss; + ss << "Channel " << i; + this->TrackingElement[i] = igtl::TrackingDataElement::New(); + this->TrackingElement[i]->SetName(ss.str().c_str()); + this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); + this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); + this->Phi[i] = 0.0; + this->Theta[i] = 0.0; } } @@ -71,7 +71,7 @@ void qDataGeneratorTracking::RegisterHandlers(igtl::TCPConnectorServerOIGTL * co //----------------------------------------------------------------------------- void qDataGeneratorTracking::GenerateData(igtl::MessageBase::Pointer& data) { - + if (this->fTracking) { igtl::Matrix4x4 matrix; @@ -96,96 +96,96 @@ void qDataGeneratorTracking::GenerateData(igtl::MessageBase::Pointer& data) //------------------------------------------------------------ int qDataGeneratorTracking::HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header) { - + std::cerr << "qDataGeneratorTracking::HandleReceivedMessage() : " << header->GetDeviceType() << std::endl; if (strcmp(header->GetDeviceType(), "STT_TDATA") == 0) { - igtl::StartTrackingDataMessage::Pointer sttMsg; - sttMsg = igtl::StartTrackingDataMessage::New(); - sttMsg->SetMessageHeader(header); - sttMsg->AllocatePack(); - - if (socket && socket->GetConnected()) - { - int r = socket->Receive(sttMsg->GetPackBodyPointer(), sttMsg->GetPackBodySize()); - if (r == 0) - { - // Connection closed. - return 0; - } - } - else - { - return 0; - } - - int c = sttMsg->Unpack(1); - - if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK - { - int interval = sttMsg->GetResolution(); - if (interval > 100) - this->SetInterval(interval); - this->fTracking = 1; - return 1; - } + igtl::StartTrackingDataMessage::Pointer sttMsg; + sttMsg = igtl::StartTrackingDataMessage::New(); + sttMsg->SetMessageHeader(header); + sttMsg->AllocatePack(); + + if (socket && socket->GetConnected()) + { + int r = socket->Receive(sttMsg->GetPackBodyPointer(), sttMsg->GetPackBodySize()); + if (r == 0) + { + // Connection closed. + return 0; + } + } + else + { + return 0; + } + + int c = sttMsg->Unpack(1); + + if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK + { + int interval = sttMsg->GetResolution(); + if (interval > 100) + this->SetInterval(interval); + this->fTracking = 1; + return 1; + } } else if (strcmp(header->GetDeviceType(), "STP_TDATA") == 0) { - igtl::StopTrackingDataMessage::Pointer stpMsg; - stpMsg = igtl::StopTrackingDataMessage::New(); - stpMsg->SetMessageHeader(header); - stpMsg->AllocatePack(); - //if (socket && socket->GetConnected()) - // { - // //int r = socket->Receive(stpMsg->GetPackBodyPointer(), stpMsg->GetPackBodySize()); - // //if (r == 0) - // // { - // // // Connection closed. - // // return 0; - // // } - // } - //else - // { - // return 0; - // } - // - //int c = stpMsg->Unpack(1); - //if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK - // { - this->fTracking = 0; - return 1; - //} + igtl::StopTrackingDataMessage::Pointer stpMsg; + stpMsg = igtl::StopTrackingDataMessage::New(); + stpMsg->SetMessageHeader(header); + stpMsg->AllocatePack(); + //if (socket && socket->GetConnected()) + // { + // //int r = socket->Receive(stpMsg->GetPackBodyPointer(), stpMsg->GetPackBodySize()); + // //if (r == 0) + // // { + // // // Connection closed. + // // return 0; + // // } + // } + //else + // { + // return 0; + // } + // + //int c = stpMsg->Unpack(1); + //if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK + // { + this->fTracking = 0; + return 1; + //} } return 1; - + } //------------------------------------------------------------ void qDataGeneratorTracking::GetRandomTestMatrix(igtl::Matrix4x4& matrix, float phi, float theta) { - + float position[3]; float orientation[4]; - + // random position position[0] = 50.0 * cos(phi) + 50.0 * sin(phi); position[1] = 50.0 * sin(phi*phi); position[2] = 30.0 * cos(phi); phi = phi + 0.2; - + // random orientation orientation[0]=0.0; orientation[1]=cos(theta); orientation[2]=0.577350269189626; orientation[3]=0.6666666666*sin(theta); theta = theta + 0.1; - + //igtl::Matrix4x4 matrix; igtl::QuaternionToMatrix(orientation, matrix); - + matrix[0][3] = position[0]; matrix[1][3] = position[1]; matrix[2][3] = position[2]; diff --git a/qDataGeneratorTracking.h b/qDataGeneratorTracking.h index fd6356f..d1fbefa 100644 --- a/qDataGeneratorTracking.h +++ b/qDataGeneratorTracking.h @@ -1,19 +1,18 @@ /*========================================================================= - + Program: Data Generator Tracking Class for OpenIGTLink Simulator Language: C++ - + Copyright (c) Brigham and Women's Hospital. All rights reserved. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ + + =========================================================================*/ #ifndef __qDataGeneratorTracking_H #define __qDataGeneratorTracking_H - #include "qDataGeneratorBase.h" #include "igtlTrackingDataMessage.h" @@ -21,37 +20,37 @@ class IGTLCommon_EXPORT qDataGeneratorTracking : public qDataGeneratorBase { Q_OBJECT -public: - + public: + qDataGeneratorTracking(); virtual ~qDataGeneratorTracking(); - + virtual const char * GetClassName() { return "qDataGeneratorTracking"; }; virtual void ChannelChanged(int i); -protected: - + protected: + virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); - virtual void GenerateData(igtl::MessageBase::Pointer& data); - + virtual void GenerateData(igtl::MessageBase::Pointer& data); + virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); // Function to generate random matrix. void GetRandomTestMatrix(igtl::Matrix4x4& matrix, float phi, float theta); - - -protected: - + + + protected: + igtl::TrackingDataMessage::Pointer TrackingMsg; std::vector TrackingElement; - + std::vector< float > Phi; std::vector< float > Theta; - + int NumberOfChannels; - + int fTracking; - + }; #endif diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index 3a75d76..a7e4bcf 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -1,15 +1,15 @@ /*========================================================================= + + Program: Data Reading Tracking Class for OpenIGTLink Simulator + Language: C++ + + Copyright (c) Brigham and Women's Hospital. All rights reserved. - Program: Data Reading Tracking Class for OpenIGTLink Simulator - Language: C++ - - Copyright (c) Brigham and Women's Hospital. All rights reserved. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - - =========================================================================*/ + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ #include #include #include @@ -23,15 +23,15 @@ //----------------------------------------------------------------------------- qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() { - - //------------------------------------------------------------ - // Allocate TrackingData Message Class - // - // NOTE: TrackingDataElement class instances are allocated - // before the loop starts to avoid reallocation - // in each image transfer. - - //setupUI(this); + + //------------------------------------------------------------ + // Allocate TrackingData Message Class + // + // NOTE: TrackingDataElement class instances are allocated + // before the loop starts to avoid reallocation + // in each image transfer. + + //setupUI(this); this->TrackingMsg = igtl::TrackingDataMessage::New(); this->TrackingMsg->SetDeviceName("Tracker"); @@ -44,7 +44,7 @@ qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() this->fTracking = 0; for (int i = 0; i NumberOfChannels; i ++) - { + { std::stringstream ss; ss << "Channel " << i; this->TrackingElement[i] = igtl::TrackingDataElement::New(); @@ -53,7 +53,7 @@ qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); this->Phi[i] = 0.0; this->Theta[i] = 0.0; - } + } } @@ -66,97 +66,98 @@ qDataReadingTracker::~qDataReadingTracker() //----------------------------------------------------------------------------- void qDataReadingTracker::RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector) { - connector->RegisterMessageHandler("STT_TDATA", this); - connector->RegisterMessageHandler("STP_TDATA", this); + connector->RegisterMessageHandler("STT_TDATA", this); + connector->RegisterMessageHandler("STP_TDATA", this); } //---------------------------------------------------------------------------- void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) { /* if(this->fTracking && FileName!="") - { + { this->count++; float temp; igtl::Matrix4x4 matrix; - + const char * ccpFileName = FileName.c_str(); FILE *myfile = std::fopen(ccpFileName, "r"); //int counter=0; igtl::TrackingDataElement::Pointer ptr; //! // std::cerr << NumberOfChannels << std::endl; - + for(int k = 0; k < this->NumberOfChannels; k ++) - { + { this->TrackingMsg->GetTrackingDataElement(k, ptr); int counter=0; while(counterTrackingMsg->Pack(); //! + data = this->TrackingMsg; + + // fclose(myfile); + //this->TrackingMsg->Pack(); + //data = this->TrackingMsg; + } + else + { + // std::cerr << "Insufficient file name." << std::endl; + } */ } //---------------------------------------------------------------------------- - void qDataReadingTracker::ReadData(igtl::MessageBase::Pointer& data) +void qDataReadingTracker::ReadData(igtl::MessageBase::Pointer& data) { - if(this->fTracking && FileName!="") + if(this->fTracking && FileName!="") { - this->count++; - float temp; - igtl::Matrix4x4 matrix; - - const char * ccpFileName = FileName.c_str(); - FILE *myfile = std::fopen(ccpFileName, "r"); - //int counter=0; - igtl::TrackingDataElement::Pointer ptr; //! - // std::cerr << NumberOfChannels << std::endl; - - for(int k = 0; k < this->NumberOfChannels; k ++) - { - this->TrackingMsg->GetTrackingDataElement(k, ptr); - int counter=0; - while(countercount++; + float temp; + igtl::Matrix4x4 matrix; + + const char * ccpFileName = FileName.c_str(); + FILE *myfile = std::fopen(ccpFileName, "r"); + //int counter=0; + igtl::TrackingDataElement::Pointer ptr; //! + // std::cerr << NumberOfChannels << std::endl; + + for(int k = 0; k < this->NumberOfChannels; k ++) + { + this->TrackingMsg->GetTrackingDataElement(k, ptr); + int counter=0; + while(counterGetDeviceType() << std::endl; - - if (strcmp(header->GetDeviceType(), "STT_TDATA") == 0) + + std::cerr << "qDataReadingTracker::HandleReceivedMessage() : " << header->GetDeviceType() << std::endl; + + if (strcmp(header->GetDeviceType(), "STT_TDATA") == 0) { - igtl::StartTrackingDataMessage::Pointer sttMsg; - sttMsg = igtl::StartTrackingDataMessage::New(); - sttMsg->SetMessageHeader(header); - sttMsg->AllocatePack(); - - if (socket && socket->GetConnected()) + igtl::StartTrackingDataMessage::Pointer sttMsg; + sttMsg = igtl::StartTrackingDataMessage::New(); + sttMsg->SetMessageHeader(header); + sttMsg->AllocatePack(); + + if (socket && socket->GetConnected()) { - int r = socket->Receive(sttMsg->GetPackBodyPointer(), sttMsg->GetPackBodySize()); - if (r == 0) + int r = socket->Receive(sttMsg->GetPackBodyPointer(), sttMsg->GetPackBodySize()); + if (r == 0) { - // Connection closed. - return 0; + // Connection closed. + return 0; } } - else + else { - return 0; + return 0; } - - int c = sttMsg->Unpack(1); - - if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK + + int c = sttMsg->Unpack(1); + + if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK { - int interval = sttMsg->GetResolution(); - if (interval > 100) - this->SetInterval(interval); - this->fTracking = 1; - return 1; + int interval = sttMsg->GetResolution(); + if (interval > 100) + this->SetInterval(interval); + this->fTracking = 1; + return 1; } } - else if (strcmp(header->GetDeviceType(), "STP_TDATA") == 0) + else if (strcmp(header->GetDeviceType(), "STP_TDATA") == 0) { - igtl::StopTrackingDataMessage::Pointer stpMsg; - stpMsg = igtl::StopTrackingDataMessage::New(); - stpMsg->SetMessageHeader(header); - stpMsg->AllocatePack(); - // if (socket && socket->GetConnected()) - //{ - // int r = socket->Receive(stpMsg->GetPackBodyPointer(), stpMsg->GetPackBodySize()); - // if (r == 0) - // { - // // Connection closed. - // return 0; - // } - //} - //else - //{ - // return 0; - //} - // - //int c = stpMsg->Unpack(1); - //if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK - //{ //up to here - this->fTracking = 0; - return 1; - // } + igtl::StopTrackingDataMessage::Pointer stpMsg; + stpMsg = igtl::StopTrackingDataMessage::New(); + stpMsg->SetMessageHeader(header); + stpMsg->AllocatePack(); + // if (socket && socket->GetConnected()) + //{ + // int r = socket->Receive(stpMsg->GetPackBodyPointer(), stpMsg->GetPackBodySize()); + // if (r == 0) + // { + // // Connection closed. + // return 0; + // } + //} + //else + //{ + // return 0; + //} + // + //int c = stpMsg->Unpack(1); + //if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK + //{ //up to here + this->fTracking = 0; + return 1; + // } } - return 1; + return 1; } - + //------------------------------------------------------------ void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string filename) { - float temp; - const char * ccpfilename = filename.c_str(); - FILE *myfile = fopen(ccpfilename, "r"); - for(int i=0;i<=4;i++){ - for(int j=0;j<=4;j++){ - - std::fscanf(myfile, "%f ", &temp); - matrix[i][j]=temp; - } - } - igtl::PrintMatrix(matrix); - fclose(myfile); + float temp; + const char * ccpfilename = filename.c_str(); + FILE *myfile = fopen(ccpfilename, "r"); + for(int i=0;i<=4;i++){ + for(int j=0;j<=4;j++){ + + std::fscanf(myfile, "%f ", &temp); + matrix[i][j]=temp; + } + } + igtl::PrintMatrix(matrix); + fclose(myfile); } // // } diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index e41c999..8388189 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -1,15 +1,15 @@ /*========================================================================= - - Program: Data Reading Tracking Class for OpenIGTLink Simulator - Language: C++ - - Copyright (c) Brigham and Women's Hospital. All rights reserved. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - - =========================================================================*/ + + Program: Data Reading Tracking Class for OpenIGTLink Simulator + Language: C++ + + Copyright (c) Brigham and Women's Hospital. All rights reserved. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + + =========================================================================*/ #ifndef __qDataReadingTracking_H #define __qDataReadingTracking_H @@ -21,46 +21,46 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase { - Q_OBJECT - -public: - - qDataReadingTracker(); - virtual ~qDataReadingTracker(); - - virtual const char * GetClassName() { return "qDataReadingTracking"; }; - - void SetFileName(std::string name) { this->FileName = name; }; - virtual void ChannelChanged(int i); - -protected: - - virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); - virtual void GenerateData(igtl::MessageBase::Pointer& data); - - virtual void ReadData(igtl::MessageBase::Pointer& data); - - virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); - - // Function to Read matrix. - void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); - // int count; - - -protected: - - igtl::TrackingDataMessage::Pointer TrackingMsg; - std::vector TrackingElement; - - std::vector< float > Phi; - std::vector< float > Theta; - - int NumberOfChannels; - - int fTracking; - - std::string FileName; - int count; + Q_OBJECT + + public: + + qDataReadingTracker(); + virtual ~qDataReadingTracker(); + + virtual const char * GetClassName() { return "qDataReadingTracking"; }; + + void SetFileName(std::string name) { this->FileName = name; }; + virtual void ChannelChanged(int i); + + protected: + + virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); + virtual void GenerateData(igtl::MessageBase::Pointer& data); + + virtual void ReadData(igtl::MessageBase::Pointer& data); + + virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); + + // Function to Read matrix. + void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); + // int count; + + + protected: + + igtl::TrackingDataMessage::Pointer TrackingMsg; + std::vector TrackingElement; + + std::vector< float > Phi; + std::vector< float > Theta; + + int NumberOfChannels; + + int fTracking; + + std::string FileName; + int count; }; #endif From 6ba9d6c82844ba53c3c5fc65841b34e18a3b7531 Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Fri, 5 Sep 2014 16:10:43 -0400 Subject: [PATCH 09/11] Minor changes to neaten code. --- OpenIGTLinkSimulatorApp.cpp | 117 +++++++------------ OpenIGTLinkSimulatorApp.h | 11 +- igtlTCPConnectorBase.cxx | 10 +- qDataGeneratorBase.cpp | 39 +------ qDataGeneratorBase.h | 2 +- qDataGeneratorTracking.cpp | 10 +- qDataGeneratorTracking.h | 4 +- qDataReadingTracker.cpp | 222 ++++++++++-------------------------- qDataReadingTracker.h | 11 +- 9 files changed, 128 insertions(+), 298 deletions(-) diff --git a/OpenIGTLinkSimulatorApp.cpp b/OpenIGTLinkSimulatorApp.cpp index 199c26a..091d678 100644 --- a/OpenIGTLinkSimulatorApp.cpp +++ b/OpenIGTLinkSimulatorApp.cpp @@ -1,10 +1,10 @@ /*========================================================================= - + Program: OpenIGTLink Simulator Language: C++ - + Copyright (c) Brigham and Women's Hospital. All rights reserved. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. @@ -17,7 +17,6 @@ #include "OpenIGTLinkSimulatorApp.h" - #include "igtlOSUtil.h" #include "igtlImageMessage.h" #include "igtlServerSocket.h" @@ -35,7 +34,7 @@ const int OpenIGTLinkSimulatorApp::StatusColorTable[][3] = { }; const int OpenIGTLinkSimulatorApp::DataIOColorTable[][3] = { - {50, 50, 50}, // None + {50, 50, 50}, // None {100, 200, 100}, // Received {200, 100, 100} // ERROR }; @@ -54,9 +53,7 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) connect(rbTrackingFile, SIGNAL( clicked() ), this, SLOT( enable() )); connect(pbQuit, SIGNAL( clicked() ), this, SLOT( quit() )); connect(pbAbout, SIGNAL( clicked() ), this, SLOT( about() )); - //connect(sbTrackingChannels, SIGNAL( valueChanged(int) ), this, SLOT( setValue(int))); connect(sbTrackingChannels, SIGNAL( valueChanged(int) ), this, SLOT( channel(int) )); - // connect(leFilename, SIGNAL( textChanged()), this, SLOT( generate()); //connect(pbScannerActivate, SIGNAL( clicked() ), this, SLOT( scannerActivateClicked() )); connect(pbClientActivate, SIGNAL( clicked() ), this, SLOT( clientActivateClicked() )); @@ -86,81 +83,46 @@ OpenIGTLinkSimulatorApp::OpenIGTLinkSimulatorApp(QWidget *NOTUSED(parent)) //// OpenIGTLink Server Socket oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); oigtlConnector->SetPort(18944); - - //this->TrackingDataGenerator->SetConnector(oigtlConnector); - //this->TrackingDataGenerator->Start(); - this->Threader = igtl::MultiThreader::New(); this->Threader->SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector); - // } } -// Data Generator for File -//void OpenIGTLinkSimulatorApp::generate(std::string path){ -// // this->TrackingDataGenerator->Stop(); -// -// // Default values -//// QString qs; -// //leScannerAddress->setText(DEFAULT_RMP_ADDR); -//// leOpenIGTLinkPort->setText(qs.setNum(DEFAULT_OIGTL_PORT)); -// -// // Time for GUI update (every 200 ms) -//// timer = new QTimer(this); -//// connect(timer, SIGNAL(timeout()), this, SLOT(updateStatus())); -//// timer->start(200); -// -// // OpenIGTLink Server Socket -// //oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); -// oigtlConnector->SetPort(18944); -// -// this->TrackingDataReader->SetConnector(oigtlConnector); -// this->TrackingDataReader->Start(); -// this->Threader = igtl::MultiThreader::New(); -// this->Threader-> SpawnThread((igtl::ThreadFunctionType) &igtl::TCPConnectorServerOIGTL::MonitorThreadFunction, oigtlConnector); -// -// } - - void OpenIGTLinkSimulatorApp::disable( ) { - // if(a == 1) pbFilename->setEnabled(false); } + void OpenIGTLinkSimulatorApp::enable( ) { - // if(a == 1) pbFilename->setEnabled(true); } void OpenIGTLinkSimulatorApp::getPath() { + QString path = QFileDialog::getOpenFileName(this, tr("Open File"), "/Users", tr("CSV Files (*.csv);;Text Files (*.txt)")); - if(path != " "){ - QFile file(path); - if(!file.open(QIODevice::ReadOnly)) { - QMessageBox::critical(this, tr("Error"), tr("Could not open file")); - return; + if(path != " ") + { + QFile file(path); + if(!file.open(QIODevice::ReadOnly)) + { + QMessageBox::critical(this, tr("Error"), tr("Could not open file")); + return; + } + QTextStream in(&file); + leFilename->setText( path ); + file.close(); } - QTextStream in(&file); - leFilename->setText( path ); - file.close(); - } this->PathString = path.toUtf8().constData(); - //OpenIGTLinkSimulatorApp::generate(pathString); - //path = QFileDialog::getOpenFileName( - // this, - // "Choose a file to open", - // QString::null, - // QString::null); - // - // lineEdit->setText( path ); + } void OpenIGTLinkSimulatorApp::about() { + QMessageBox::about(this, "About OpenIGTLinkSimulator", "OpenIGTLink Simulator\n\n" @@ -168,10 +130,13 @@ void OpenIGTLinkSimulatorApp::about() "Brigham and Women's Hospital.\n\n" "Copyright (C) 2011-2014\n" ); + } + void OpenIGTLinkSimulatorApp::scannerActivateClicked() { + if (fScannerActive) { //pbScannerActivate->setText("Activate"); @@ -182,13 +147,14 @@ void OpenIGTLinkSimulatorApp::scannerActivateClicked() //pbScannerActivate->setText("Deactivate"); //fScannerActive = true; } + } void OpenIGTLinkSimulatorApp::clientActivateClicked() { - if (fClientActive) //if Activated and data selected + if (fClientActive) { fClientActive = false; if (oigtlConnector.IsNotNull()) @@ -197,21 +163,22 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() std::cerr << " Port: " << igtlPort.toInt() << std::endl; oigtlConnector->Deactivate(); } + rbTrackingFile->setEnabled(true); rbTrackingRandom->setEnabled(true); - if (rbTrackingFile->isChecked()) pbFilename->setEnabled(true); + if (rbTrackingFile->isChecked()) + pbFilename->setEnabled(true); } - - - //else if(!fClientActive && !rbTrackingFile->isChecked() && !rbTrackingRandom->isChecked()) - //QMessageBox::critical(this, tr("Error"), tr("Data source not selected!")); + + else if(!fClientActive && !rbTrackingFile->isChecked() && !rbTrackingRandom->isChecked()) + QMessageBox::critical(this, tr("Error"), tr("Data source not selected!")); else if(rbTrackingFile->isChecked() && leFilename->text()=="") QMessageBox::critical(this, tr("Error"), tr("File not selected!")); - - else //if Deactivated and data selected. + + else { fClientActive = true; - + if (oigtlConnector.IsNotNull()) { std::cerr << "Activating OpenIGTLink connector with:" << std::endl; @@ -220,7 +187,8 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() oigtlConnector->Activate(); } else - { oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); + { + oigtlConnector = igtl::TCPConnectorServerOIGTL::New(); oigtlConnector->SetPort(18944); if (oigtlConnector.IsNotNull()) { @@ -230,12 +198,11 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() oigtlConnector->Activate(); } } - - + rbTrackingFile->setEnabled(false); rbTrackingRandom->setEnabled(false); pbFilename->setEnabled(false); - + if (rbTrackingFile->isChecked()) { this->TrackingDataReader->SetConnector(oigtlConnector); @@ -247,9 +214,9 @@ void OpenIGTLinkSimulatorApp::clientActivateClicked() this->TrackingDataGenerator->SetConnector(oigtlConnector); this->TrackingDataGenerator->Start(); } - + } - + } void OpenIGTLinkSimulatorApp::scannerAddressChanged( const QString & text ) @@ -321,6 +288,7 @@ void OpenIGTLinkSimulatorApp::updateStatus() //leScannerAddress->setEnabled(editScannerFlag); //leControlPort->setEnabled(editScannerFlag); //leImagePort->setEnabled(editClientFlag); + } void OpenIGTLinkSimulatorApp::channel(int i) @@ -337,9 +305,8 @@ void OpenIGTLinkSimulatorApp::quit() { oigtlConnector->CloseThread(); } - + timer->stop(); close(); -} - +} diff --git a/OpenIGTLinkSimulatorApp.h b/OpenIGTLinkSimulatorApp.h index 03d2f20..4829742 100644 --- a/OpenIGTLinkSimulatorApp.h +++ b/OpenIGTLinkSimulatorApp.h @@ -40,7 +40,6 @@ class OpenIGTLinkSimulatorApp : public QMainWindow, private Ui::OpenIGTLinkSimul public: OpenIGTLinkSimulatorApp(QWidget *parent = 0); - public slots: void getPath(); void about(); @@ -50,17 +49,17 @@ class OpenIGTLinkSimulatorApp : public QMainWindow, private Ui::OpenIGTLinkSimul void scannerActivateClicked(); void clientActivateClicked(); - + void scannerAddressChanged( const QString & text ); void imagePortChanged( const QString & text ); void controlPortChanged( const QString & text ); void igtlPortChanged( const QString & text ); - + void updateStatus(); void quit(); private: - + void changeStatusTextColor(QLineEdit* le, int status); void changeDataIOTextColor(QLineEdit* le, int status); @@ -83,7 +82,7 @@ class OpenIGTLinkSimulatorApp : public QMainWindow, private Ui::OpenIGTLinkSimul }; - - + + #endif diff --git a/igtlTCPConnectorBase.cxx b/igtlTCPConnectorBase.cxx index 374a2d0..c14ffd6 100644 --- a/igtlTCPConnectorBase.cxx +++ b/igtlTCPConnectorBase.cxx @@ -63,16 +63,12 @@ namespace igtl TCPConnectorBase * con = static_cast(info->UserData); con->Active = 0; - while (!con->Initialize()) + if (!con->Initialize()) { - // while(!con->Initialize()){ - - // } std::cerr << "TCPConnectorBase::MonitorThreadFunction(): Failed to initialize a server socket." << std::endl; return; - con->Initialize(); } - + while (con->Active >= 0) { if (con->ConfigurationUpdated) @@ -101,7 +97,7 @@ namespace igtl } igtl::Sleep(500); } - + con->Finalize(); } // End of igtl namespace diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index bc9c2fd..5cd3095 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -31,10 +31,8 @@ qDataGeneratorBase::~qDataGeneratorBase() //----------------------------------------------------------------------------- void qDataGeneratorBase::SetConnector(igtl::TCPConnectorServerOIGTL * connector) { - this->Connector = connector; this->RegisterHandlers(connector); - } @@ -45,11 +43,13 @@ void qDataGeneratorBase::Start() this->Timer = new QTimer(this); connect(this->Timer, SIGNAL(timeout()), this, SLOT(ProcessTimer())); this->Timer->start(this->TimerInterval); + } //----------------------------------------------------------------------------- void qDataGeneratorBase::Stop() { + if (this->Timer != NULL) { if (this->Timer->isActive() == true) @@ -60,6 +60,7 @@ void qDataGeneratorBase::Stop() delete this->Timer; this->Timer = NULL; } + } @@ -71,44 +72,12 @@ void qDataGeneratorBase::ProcessTimer() this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) { igtl::MessageBase::Pointer message; - //Must somehow use if() to decide whether to use GenerateData or ReadData. - //if(i==0) - // { this->GenerateData(message); - // } - // else - // { this->ReadData(message); - // } if (message.IsNotNull()) { this->Connector->PushMessage(message); } } -} -//------------------------------------------------------------------------------ -/*void qDataGeneratorBase::ProcessTimer(std::string filename) - { - if (this->Connector.IsNotNull() && - this->Connector->GetStatus() == igtl::TCPConnectorBase::STATUS_CONNECTED) - { - igtl::MessageBase::Pointer message; - // if(filename==""){ - this->GenerateData(message); - // } - //else{ - // this->ReadData(message, filename); - // } - if (message.IsNotNull()) - { - this->Connector->PushMessage(message); - } - } - } -*/ - - - - - +} diff --git a/qDataGeneratorBase.h b/qDataGeneratorBase.h index 6bd83ca..69f75db 100644 --- a/qDataGeneratorBase.h +++ b/qDataGeneratorBase.h @@ -50,10 +50,10 @@ class IGTLCommon_EXPORT qDataGeneratorBase : public QObject protected slots: - // void ProcessTimer(std::string filename); void ProcessTimer(); protected: + virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * NOTUSED(connector)) {}; virtual void GenerateData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; virtual void ReadData(igtl::MessageBase::Pointer& NOTUSED(data)) {}; diff --git a/qDataGeneratorTracking.cpp b/qDataGeneratorTracking.cpp index a9c8f5b..4b263f1 100644 --- a/qDataGeneratorTracking.cpp +++ b/qDataGeneratorTracking.cpp @@ -51,6 +51,7 @@ qDataGeneratorTracking::qDataGeneratorTracking(): qDataGeneratorBase() this->Phi[i] = 0.0; this->Theta[i] = 0.0; } + } @@ -171,14 +172,14 @@ void qDataGeneratorTracking::GetRandomTestMatrix(igtl::Matrix4x4& matrix, float float orientation[4]; // random position - position[0] = 50.0 * cos(phi) + 50.0 * sin(phi); - position[1] = 50.0 * sin(phi*phi); - position[2] = 30.0 * cos(phi); + position[0] = 50.0 * cos(phi); + position[1] = 50.0 * sin(phi); + position[2] = 50.0 * cos(phi); phi = phi + 0.2; // random orientation orientation[0]=0.0; - orientation[1]=cos(theta); + orientation[1]=0.6666666666*cos(theta); orientation[2]=0.577350269189626; orientation[3]=0.6666666666*sin(theta); theta = theta + 0.1; @@ -217,5 +218,6 @@ void qDataGeneratorTracking::ChannelChanged(int i) this->Phi[i] = 0.0; this->Theta[i] = 0.0; } + } diff --git a/qDataGeneratorTracking.h b/qDataGeneratorTracking.h index d1fbefa..f33b963 100644 --- a/qDataGeneratorTracking.h +++ b/qDataGeneratorTracking.h @@ -23,8 +23,7 @@ class IGTLCommon_EXPORT qDataGeneratorTracking : public qDataGeneratorBase public: qDataGeneratorTracking(); - virtual ~qDataGeneratorTracking(); - + virtual ~qDataGeneratorTracking(); virtual const char * GetClassName() { return "qDataGeneratorTracking"; }; virtual void ChannelChanged(int i); @@ -32,7 +31,6 @@ class IGTLCommon_EXPORT qDataGeneratorTracking : public qDataGeneratorBase virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); virtual void GenerateData(igtl::MessageBase::Pointer& data); - virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); // Function to generate random matrix. diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index a7e4bcf..9e0b72c 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -4,26 +4,19 @@ Language: C++ Copyright (c) Brigham and Women's Hospital. All rights reserved. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ -#include -#include #include -#include -#include -#include -#include #include "qDataReadingTracker.h" -//#include "ui_OpenIGTLinkSimulatorWindow.h + //----------------------------------------------------------------------------- qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() -{ - +{ //------------------------------------------------------------ // Allocate TrackingData Message Class // @@ -31,29 +24,29 @@ qDataReadingTracker::qDataReadingTracker(): qDataGeneratorBase() // before the loop starts to avoid reallocation // in each image transfer. - //setupUI(this); - this->TrackingMsg = igtl::TrackingDataMessage::New(); - this->TrackingMsg->SetDeviceName("Tracker"); - - this->NumberOfChannels = 3; - - this->TrackingElement.resize(this->NumberOfChannels); - this->Phi.resize(this->NumberOfChannels); - this->Theta.resize(this->NumberOfChannels); + this->TrackingMsg = igtl::TrackingDataMessage::New(); + this->TrackingMsg->SetDeviceName("Tracker"); + + this->NumberOfChannels = 3; + + this->TrackingElement.resize(this->NumberOfChannels); + this->Phi.resize(this->NumberOfChannels); + this->Theta.resize(this->NumberOfChannels); - this->fTracking = 0; + this->fTracking = 0; - for (int i = 0; i NumberOfChannels; i ++) - { - std::stringstream ss; - ss << "Channel " << i; - this->TrackingElement[i] = igtl::TrackingDataElement::New(); - this->TrackingElement[i]->SetName(ss.str().c_str()); - this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); - this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); - this->Phi[i] = 0.0; - this->Theta[i] = 0.0; - } + for (int i = 0; i NumberOfChannels; i ++) + { + std::stringstream ss; + ss << "Channel " << i; + this->TrackingElement[i] = igtl::TrackingDataElement::New(); + this->TrackingElement[i]->SetName(ss.str().c_str()); + this->TrackingElement[i]->SetType(igtl::TrackingDataElement::TYPE_TRACKER); + this->TrackingMsg->AddTrackingDataElement(this->TrackingElement[i]); + this->Phi[i] = 0.0; + this->Theta[i] = 0.0; + } + } @@ -70,118 +63,59 @@ void qDataReadingTracker::RegisterHandlers(igtl::TCPConnectorServerOIGTL * conne connector->RegisterMessageHandler("STP_TDATA", this); } -//---------------------------------------------------------------------------- -void qDataReadingTracker::GenerateData(igtl::MessageBase::Pointer& data) -{ - /* if(this->fTracking && FileName!="") - { - this->count++; - float temp; - igtl::Matrix4x4 matrix; - - const char * ccpFileName = FileName.c_str(); - FILE *myfile = std::fopen(ccpFileName, "r"); - //int counter=0; - igtl::TrackingDataElement::Pointer ptr; //! - // std::cerr << NumberOfChannels << std::endl; - - for(int k = 0; k < this->NumberOfChannels; k ++) - { - this->TrackingMsg->GetTrackingDataElement(k, ptr); - int counter=0; - while(counterfTracking && FileName!="") { - this->count++; float temp; igtl::Matrix4x4 matrix; - + this->count++; + const char * ccpFileName = FileName.c_str(); FILE *myfile = std::fopen(ccpFileName, "r"); - //int counter=0; - igtl::TrackingDataElement::Pointer ptr; //! - // std::cerr << NumberOfChannels << std::endl; + + igtl::TrackingDataElement::Pointer ptr; for(int k = 0; k < this->NumberOfChannels; k ++) { this->TrackingMsg->GetTrackingDataElement(k, ptr); int counter=0; - while(counterSetMatrix(matrix); } fclose(myfile); - this->TrackingMsg->Pack(); //! + this->TrackingMsg->Pack(); data = this->TrackingMsg; - - // fclose(myfile); - //this->TrackingMsg->Pack(); - //data = this->TrackingMsg; } else { - // std::cerr << "Insufficient file name." << std::endl; } + } @@ -251,60 +185,30 @@ int qDataReadingTracker::HandleReceivedMessage(igtl::Socket *socket, igtl::Messa // } } return 1; -} - +} //------------------------------------------------------------ -void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string filename) +/*void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string filename) { float temp; const char * ccpfilename = filename.c_str(); FILE *myfile = fopen(ccpfilename, "r"); - for(int i=0;i<=4;i++){ - for(int j=0;j<=4;j++){ - - std::fscanf(myfile, "%f ", &temp); - matrix[i][j]=temp; + + for(int i=0;i<=4;i++) + { + for(int j=0;j<=4;j++) + { + std::fscanf(myfile, "%f ", &temp); + matrix[i][j]=temp; + } } - } igtl::PrintMatrix(matrix); - fclose(myfile); - -} -// // } - - - - /* - float position[3]; - float orientation[4]; - - // random position - position[0] = 50.0 * cos(phi); - position[1] = 50.0 * sin(phi); - position[2] = 50.0 * cos(phi); - phi = phi + 0.2; - - // random orientation - orientation[0]=0.0; - orientation[1]=0.6666666666*cos(theta); - orientation[2]=0.577350269189626; - orientation[3]=0.6666666666*sin(theta); - theta = theta + 0.1; - - //igtl::Matrix4x4 matrix; - igtl::QuaternionToMatrix(orientation, matrix); - - matrix[0][3] = position[0]; - matrix[1][3] = position[1]; - matrix[2][3] = position[2]; - - igtl::PrintMatrix(matrix); - // teIncomingData->setText( matrix ); - */ + fclose(myfile); +} +*/ //------------------------------------------------------------ @@ -332,5 +236,5 @@ void qDataReadingTracker::ChannelChanged(int i) this->Phi[i] = 0.0; this->Theta[i] = 0.0; } - + } diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index 8388189..f1b3aaa 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -27,24 +27,19 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase qDataReadingTracker(); virtual ~qDataReadingTracker(); - virtual const char * GetClassName() { return "qDataReadingTracking"; }; - - void SetFileName(std::string name) { this->FileName = name; }; + + void SetFileName(std::string name) { this->FileName = name; }; virtual void ChannelChanged(int i); protected: virtual void RegisterHandlers(igtl::TCPConnectorServerOIGTL * connector); - virtual void GenerateData(igtl::MessageBase::Pointer& data); - virtual void ReadData(igtl::MessageBase::Pointer& data); - virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); // Function to Read matrix. - void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); - // int count; + // void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); protected: From 9f6ac4683e169a6ae26b63c9f32111dfb215a5ec Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Fri, 5 Sep 2014 17:10:32 -0400 Subject: [PATCH 10/11] Test to see if any unintended changes have been made. framerate=200. --- igtlTCPConnectorServerOIGTL.cxx | 90 ++++++++++++++++----------------- igtlTCPConnectorServerOIGTL.h | 27 +++++----- main.cpp | 2 +- qDataGeneratorBase.cpp | 2 +- qDataGeneratorTracking.cpp | 1 - qDataReadingTracker.cpp | 22 -------- qDataReadingTracker.h | 4 -- 7 files changed, 60 insertions(+), 88 deletions(-) diff --git a/igtlTCPConnectorServerOIGTL.cxx b/igtlTCPConnectorServerOIGTL.cxx index 62a6202..ccfa2e0 100644 --- a/igtlTCPConnectorServerOIGTL.cxx +++ b/igtlTCPConnectorServerOIGTL.cxx @@ -1,14 +1,14 @@ /*========================================================================= - + Program: OpenIGTLink Connector Class for OpenIGTLink Simulator Language: C++ - + Copyright (c) Brigham and Women's Hospital. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. - + =========================================================================*/ @@ -66,12 +66,12 @@ namespace igtl return 0; } } - + // TODO: Does ReceiveMessage() in MonitorThreadFunction() returns 0 in this case? return 0; } - - + + //----------------------------------------------------------------------------- int TCPConnectorServerOIGTL::Initialize() { @@ -80,25 +80,25 @@ namespace igtl this->HeaderMsg = igtl::MessageHeader::New(); return 1; } - + this->HeaderMsg = NULL; return 0; } - + //----------------------------------------------------------------------------- int TCPConnectorServerOIGTL::ReceiveMessage() { // std::cerr << "TCPConnectorServerOIGTL::ReceiveMessage() : Waiting for messages." << std::endl; - + // Initialize receive buffer //this->HeaderMsg->InitPack(); - + igtl::MessageHeader::Pointer header; header = igtl::MessageHeader::New(); header->InitPack(); - + if (this->Socket.IsNotNull() && this->Socket->GetConnected()) { int r = this->Socket->Receive(header->GetPackPointer(), @@ -119,16 +119,16 @@ namespace igtl { return 0; } - + // Deserialize the header header->Unpack(); - + // Check data type and receive data body MessageHandlerTypeMapType::iterator iter; iter = this->MessageHandlerTypeMap.find(header->GetDeviceType()); - + qDataGeneratorBase* handler = NULL; - + if (iter != this->MessageHandlerTypeMap.end()) { MessageHandlerNameMapType& nameMap = iter->second; @@ -148,12 +148,12 @@ namespace igtl } } } - + if (handler) { handler->HandleReceivedMessage(this->Socket, header); } - + else // No handler is available for this type of message. { if (this->Socket.IsNotNull() && this->Socket->GetConnected()) @@ -162,11 +162,11 @@ namespace igtl } } - + return 1; - + } - + //----------------------------------------------------------------------------- int TCPConnectorServerOIGTL::Finalize() @@ -177,16 +177,16 @@ namespace igtl } return 0; } - - + + //----------------------------------------------------------------------------- void TCPConnectorServerOIGTL::RegisterMessageHandler(const char* type, qDataGeneratorBase* handler) { - + MessageHandlerTypeMapType::iterator iter; - + iter = this->MessageHandlerTypeMap.find(type); - + if (iter == this->MessageHandlerTypeMap.end()) // the type has not been registered yet. { MessageHandlerNameMapType nameMap; @@ -199,18 +199,18 @@ namespace igtl nameMap.clear(); nameMap["*"] = handler; } - + } - - + + //----------------------------------------------------------------------------- void TCPConnectorServerOIGTL::RegisterMessageHandler(const char* type, const char* name, qDataGeneratorBase* handler) { - + MessageHandlerTypeMapType::iterator iter; - + iter = this->MessageHandlerTypeMap.find(type); - + std::string nkey = std::string("+") + name; if (iter == this->MessageHandlerTypeMap.end()) // the type has not been registered yet. { @@ -224,35 +224,35 @@ namespace igtl nameMap[nkey] = handler; } } - - + + //----------------------------------------------------------------------------- void TCPConnectorServerOIGTL::UnRegisterMessageHandler(const char* type) { MessageHandlerTypeMapType::iterator iter; - + iter = this->MessageHandlerTypeMap.find(type); - + if (iter != this->MessageHandlerTypeMap.end()) // the type is found in the map { this->MessageHandlerTypeMap.erase(iter); } } - - + + //----------------------------------------------------------------------------- int TCPConnectorServerOIGTL::ReceiveTransform(igtl::MessageHeader * header) { - + //std::cerr << "TCPConnectorServerOIGTL::ReceiveTransform() : Receiving TRANSFORM data type." << std::endl; - + // Create a message buffer to receive transform data igtl::TransformMessage::Pointer transMsg; transMsg = igtl::TransformMessage::New(); transMsg->SetMessageHeader(header); transMsg->AllocatePack(); - + // Receive transform data from the socket if (this->Socket.IsNotNull() && this->Socket->GetConnected()) { @@ -267,11 +267,11 @@ namespace igtl { return 0; } - + // Deserialize the transform data // If you want to skip CRC check, call Unpack() without argument. int c = transMsg->Unpack(1); - + if (c & igtl::MessageHeader::UNPACK_BODY) // if CRC check is OK { if (this->OutputConnector.IsNotNull()) @@ -280,11 +280,11 @@ namespace igtl } return 1; } - + return 1; } - - + + } // End of igtl namespace diff --git a/igtlTCPConnectorServerOIGTL.h b/igtlTCPConnectorServerOIGTL.h index eceec27..5fb246a 100644 --- a/igtlTCPConnectorServerOIGTL.h +++ b/igtlTCPConnectorServerOIGTL.h @@ -1,10 +1,10 @@ /*========================================================================= - + Program: OpenIGTLink Connector Class for OpenIGTLink Simulator Language: C++ Copyright (c) Brigham and Women's Hospital. All rights reserved. - + This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. @@ -22,7 +22,6 @@ #include "igtlTCPConnectorServer.h" - class qDataGeneratorBase; @@ -42,11 +41,11 @@ namespace igtl igtlNewMacro(igtl::TCPConnectorServerOIGTL); public: - + virtual const char * GetClassName() { return "OpenIGTLink"; }; int SetMessageHandler(); virtual int PushMessage(igtl::MessageBase * message); - + // Functions to register message handlers. RegisterMessageHandler(type, handler) registers // a handler for any messages with the specified type, while RegisterMessageHandler(type, name, handler) // registers handler for messages with the specified type and name. If the functions are called @@ -76,24 +75,24 @@ namespace igtl void RegisterMessageHandler(const char* type, qDataGeneratorBase* handler); void RegisterMessageHandler(const char* type, const char* name, qDataGeneratorBase* handler); void UnRegisterMessageHandler(const char* type); - + protected: - + TCPConnectorServerOIGTL(); ~TCPConnectorServerOIGTL(); - + void PrintSelf(std::ostream& os) const; virtual int Initialize(); virtual int ReceiveMessage(); virtual int Finalize(); - + int ReceiveTransform(igtl::MessageHeader * header); private: - + igtl::MessageHeader::Pointer HeaderMsg; - + // Templates to record message handlers // The ConnectorServerOIGTL class manages message handlers (generators) based on // message type string and message name string. The following pseudo code shows a process @@ -115,15 +114,15 @@ namespace igtl // // - key for the wild card: "*" // - key for string "*": "+*" - - + + typedef std::map< std::string, qDataGeneratorBase* > MessageHandlerNameMapType; typedef std::map< std::string, MessageHandlerNameMapType > MessageHandlerTypeMapType; MessageHandlerTypeMapType MessageHandlerTypeMap; }; - + } #endif //__THREAD_H diff --git a/main.cpp b/main.cpp index 50bf12d..73c4122 100644 --- a/main.cpp +++ b/main.cpp @@ -9,7 +9,7 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. -=========================================================================*/ + =========================================================================*/ #include diff --git a/qDataGeneratorBase.cpp b/qDataGeneratorBase.cpp index 5cd3095..8da85a5 100644 --- a/qDataGeneratorBase.cpp +++ b/qDataGeneratorBase.cpp @@ -18,7 +18,7 @@ //----------------------------------------------------------------------------- qDataGeneratorBase::qDataGeneratorBase() { - this->TimerInterval = 100; // default is 100 ms + this->TimerInterval = 200; // default is 100 ms this->Timer = NULL; } diff --git a/qDataGeneratorTracking.cpp b/qDataGeneratorTracking.cpp index 4b263f1..8582a33 100644 --- a/qDataGeneratorTracking.cpp +++ b/qDataGeneratorTracking.cpp @@ -79,7 +79,6 @@ void qDataGeneratorTracking::GenerateData(igtl::MessageBase::Pointer& data) igtl::TrackingDataElement::Pointer ptr; for (int i = 0; i < this->NumberOfChannels; i ++) { - std::cerr << "Data for Channel:" << i << std::endl; this->TrackingMsg->GetTrackingDataElement(i, ptr); GetRandomTestMatrix(matrix, this->Phi[i], this->Theta[i]); ptr->SetMatrix(matrix); diff --git a/qDataReadingTracker.cpp b/qDataReadingTracker.cpp index 9e0b72c..35e34c5 100644 --- a/qDataReadingTracker.cpp +++ b/qDataReadingTracker.cpp @@ -189,28 +189,6 @@ int qDataReadingTracker::HandleReceivedMessage(igtl::Socket *socket, igtl::Messa } -//------------------------------------------------------------ -/*void qDataReadingTracker::GetFileMatrix(igtl::Matrix4x4& matrix, std::string filename) -{ - float temp; - const char * ccpfilename = filename.c_str(); - FILE *myfile = fopen(ccpfilename, "r"); - - for(int i=0;i<=4;i++) - { - for(int j=0;j<=4;j++) - { - std::fscanf(myfile, "%f ", &temp); - matrix[i][j]=temp; - } - } - igtl::PrintMatrix(matrix); - fclose(myfile); - -} -*/ - - //------------------------------------------------------------ void qDataReadingTracker::ChannelChanged(int i) { diff --git a/qDataReadingTracker.h b/qDataReadingTracker.h index f1b3aaa..563b03d 100644 --- a/qDataReadingTracker.h +++ b/qDataReadingTracker.h @@ -38,10 +38,6 @@ class IGTLCommon_EXPORT qDataReadingTracker : public qDataGeneratorBase virtual void ReadData(igtl::MessageBase::Pointer& data); virtual int HandleReceivedMessage(igtl::Socket *socket, igtl::MessageHeader * header); - // Function to Read matrix. - // void GetFileMatrix(igtl::Matrix4x4& matrix, std::string); - - protected: igtl::TrackingDataMessage::Pointer TrackingMsg; From 55680d7c3a1a51117f567d770e843d9bca5c922d Mon Sep 17 00:00:00 2001 From: "H. Mizuno" Date: Mon, 8 Sep 2014 15:00:07 -0400 Subject: [PATCH 11/11] con will be initialized if not to avoid server socket not being made. igtlTCPConnectorBase.cxx --- igtlTCPConnectorBase.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/igtlTCPConnectorBase.cxx b/igtlTCPConnectorBase.cxx index c14ffd6..f2992a8 100644 --- a/igtlTCPConnectorBase.cxx +++ b/igtlTCPConnectorBase.cxx @@ -65,7 +65,8 @@ namespace igtl con->Active = 0; if (!con->Initialize()) { - std::cerr << "TCPConnectorBase::MonitorThreadFunction(): Failed to initialize a server socket." << std::endl; + std::cerr << "TCPConnectorBase::MonitorThreadFunction(): Failed to initialize a server socket." << std::endl; + con->Initialize(); return; }