CustusX  16.5.0-rc9
An IGT application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
cxOpenIGTLinkProtocol.h
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) 2008-2014, SINTEF Department of Medical Technology
5 All rights reserved.
6 
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
9 
10 1. Redistributions of source code must retain the above copyright notice,
11  this list of conditions and the following disclaimer.
12 
13 2. Redistributions in binary form must reproduce the above copyright notice,
14  this list of conditions and the following disclaimer in the documentation
15  and/or other materials provided with the distribution.
16 
17 3. Neither the name of the copyright holder nor the names of its contributors
18  may be used to endorse or promote products derived from this software
19  without specific prior written permission.
20 
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 =========================================================================*/
32 
33 
34 #ifndef CXOPENIGTLINKPROTOCOL_H
35 #define CXOPENIGTLINKPROTOCOL_H
36 
37 #include "cxProtocol.h"
38 
39 #include <QMutex>
40 #include "igtlMessageHeader.h"
41 #include "igtlPolyDataMessage.h"
42 #include "igtlTransformMessage.h"
43 #include "igtlImageMessage.h"
44 #include "igtlStatusMessage.h"
45 #include "igtlStringMessage.h"
47 #include "cxIGTLinkImageMessage.h"
48 
49 #define CX_OPENIGTLINK_CHANNEL_NAME "OpenIGTLink"
50 
51 namespace cx
52 {
53 
55 {
56  Q_OBJECT
57 public:
59  virtual ~OpenIGTLinkProtocol(){};
60 
61  virtual bool readyToReceiveData();
62 
63  //TODO refactor to use pack system
65  virtual EncodedPackagePtr encode(MeshPtr data);
66 
67  virtual void translate(const igtl::MessageHeader::Pointer &header, const igtl::MessageBase::Pointer &body);
68  virtual void translate(const igtl::TransformMessage::Pointer body);
69  virtual void translate(const igtl::ImageMessage::Pointer body);
70  virtual void translate(const igtl::PolyDataMessage::Pointer body);
71  virtual void translate(const igtl::StatusMessage::Pointer body);
72  virtual void translate(const igtl::StringMessage::Pointer body);
73  virtual void translate(const IGTLinkUSStatusMessage::Pointer body);
74 
75 
76 protected:
77  void writeAcceptingMessage(igtl::MessageBase* body) const;
78  void writeNotSupportedMessage(igtl::MessageBase *body) const;
79  virtual PATIENT_COORDINATE_SYSTEM coordinateSystem() const { return pcsLPS; }
80  virtual bool doCRC() const;
81 
82 protected slots:
83  void processPack();
84 
85 private:
86  igtl::MessageHeader::Pointer mHeader;
87  igtl::MessageBase::Pointer mBody;
88  bool mReadyToReceive;
89 
90  void setReadyToReceive(bool ready);
91 
92  void prepareHeader(const igtl::MessageHeader::Pointer &header) const;
93  void prepareBody(const igtl::MessageBase::Pointer &header, igtl::MessageBase::Pointer &body);
94  template <typename T>
95  void prepareBody(const igtl::MessageHeader::Pointer &header, igtl::MessageBase::Pointer &body);
96  void prepareHeaderPack(igtl::MessageHeader::Pointer &message);
97  void prepareBodyPack(igtl::MessageBase::Pointer &message);
98  bool unpackHeader(const igtl::MessageBase::Pointer &header) const;
99  bool unpackBody(const igtl::MessageBase::Pointer &body);
100  void getReadyToReceiveBody();
101  void getReadyToReceiveHeader();
102  bool isValid(const igtl::MessageBase::Pointer &msg) const;
103  bool isSupportedBodyType(QString type) const;
104 
105 };
106 
107 } //namespace cx
108 
109 #endif // CXOPENIGTLINKPROTOCOL_H
boost::shared_ptr< class Image > ImagePtr
Definition: cxDicomWidget.h:48
boost::shared_ptr< EncodedPackage > EncodedPackagePtr
void image(ImagePtr image)
pcsLPS
Left-Posterior-Superior, used internally by CustusX, also DICOM, ITK.
boost::shared_ptr< class Mesh > MeshPtr