Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  
igtlImageMessage2.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: The OpenIGTLink Library
4 Language: C++
5 Web page: http://openigtlink.org/
6
7 Copyright (c) Insight Software Consortium. All rights reserved.
8
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the above copyright notices for more information.
12
13=========================================================================*/
14
15#ifndef __igtlImageMessage2_h
16#define __igtlImageMessage2_h
17
18#include "igtlObject.h"
19//#include "igtlMacros.h"
20#include "igtlMacro.h"
21#include "igtlMath.h"
22#include "igtlMessageBase.h"
23
24
25#define FRAGMENTED_PACK
26
27
28namespace igtl
29{
30
31
39{
40public:
45
48
49
50protected:
51 GetImageMessage2() : MessageBase() { this->m_DefaultBodyType = "GET_IMAGE"; };
53protected:
54 virtual int GetBodyPackSize() { return 0; };
55 virtual int PackBody() { AllocatePack(); return 1; };
56 virtual int UnpackBody() { return 1; };
57};
58
59
81{
82public:
87
90
91public:
92
94 enum {
95 COORDINATE_RAS=1,
96 COORDINATE_LPS=2
97 };
98
100 enum {
101 ENDIAN_BIG=1,
102 ENDIAN_LITTLE=2
103 };
104
106 enum {
107 DTYPE_SCALAR = 1,
108 DTYPE_VECTOR = 3
109 };
110
112 enum {
113 TYPE_INT8 = 2,
114 TYPE_UINT8 = 3,
115 TYPE_INT16 = 4,
116 TYPE_UINT16 = 5,
117 TYPE_INT32 = 6,
118 TYPE_UINT32 = 7,
119 TYPE_FLOAT32 = 10,
120 TYPE_FLOAT64 = 11
121 };
122
123
124public:
125
129 void SetDimensions(int s[3]);
130
134 void SetDimensions(int i, int j, int k);
135
137 void GetDimensions(int s[3]);
138
140 void GetDimensions(int &i, int &j, int &k);
141
146 int SetSubVolume(int dim[3], int off[3]);
147
153 int SetSubVolume(int dimi, int dimj, int dimk, int offi, int offj, int offk);
154
156 void GetSubVolume(int dim[3], int off[3]);
157
160 void GetSubVolume(int &dimi, int &dimj, int &dimk, int &offi, int &offj, int &offk);
161
163 void SetSpacing(float s[3]);
164
166 void SetSpacing(float si, float sj, float sk);
167
169 void GetSpacing(float s[3]);
170
172 void GetSpacing(float &si, float &sj, float &sk);
173
176 void SetOrigin(float p[3]);
177
180 void SetOrigin(float px, float py, float pz);
181
184 void GetOrigin(float p[3]);
185
188 void GetOrigin(float &px, float &py, float &pz);
189
192 void SetNormals(float o[3][3]);
193
195 void SetNormals(float t[3], float s[3], float n[3]);
196
199 void GetNormals(float o[3][3]);
200
202 void GetNormals(float t[3], float s[3], float n[3]);
203
205 void SetNumComponents(int num);
206
209
211 void SetMatrix(Matrix4x4& mat);
212
214 void GetMatrix(Matrix4x4& mat);
215
217 void SetScalarType(int t) { scalarType = t; };
218
220 void SetScalarTypeToInt8() { scalarType = TYPE_INT8; };
221
223 void SetScalarTypeToUint8() { scalarType = TYPE_UINT8; };
224
226 void SetScalarTypeToInt16() { scalarType = TYPE_INT16; };
227
229 void SetScalarTypeToUint16() { scalarType = TYPE_UINT16; };
230
232 void SetScalarTypeToInt32() { scalarType = TYPE_INT32; };
233
235 void SetScalarTypeToUint32() { scalarType = TYPE_UINT32; };
236
238 int GetScalarType() { return scalarType; };
239
242 int GetScalarSize() { return ScalarSizeTable[scalarType]; };
243
245 int GetScalarSize(int type) { return ScalarSizeTable[type]; };
246
248 void SetEndian(int e) { endian = e; };
249
251 int GetEndian() { return endian; };
252
255 // TODO: Should returned value be 64-bit integer?
257 {
258 return dimensions[0]*dimensions[1]*dimensions[2]*GetScalarSize()*numComponents;
259 };
260
262 int GetCoordinateSystem() { return coordinate;};
263
265 void SetCoordinateSystem(int c) {coordinate = c;};
266
271 {
272 return subDimensions[0]*subDimensions[1]*subDimensions[2]*GetScalarSize()*numComponents;
273 };
274
275
280 virtual void AllocateScalars();
281
283 virtual void* GetScalarPointer();
284
285#ifdef FRAGMENTED_PACK
287 virtual void SetScalarPointer(void * p);
288
291
294 int GetNumberOfPackFragments() { return 3; /* header, image header and image body */ }
295
298
301#endif // FRAGMENTED_PACK
302
303
304protected:
307
308protected:
309
310 virtual int GetBodyPackSize();
311
312#ifdef FRAGMENTED_PACK
313public:
316 virtual int Pack();
317public:
318#endif //FRAGMENTED_PACK
319
320 virtual int PackBody();
321 virtual int UnpackBody();
322
323#ifdef FRAGMENTED_PACK
326 virtual void AllocatePack(int bodySize);
327#endif //FRAGMENTED_PACK
328
330 int dimensions[3];
331
333 float spacing[3];
334
336 int subDimensions[3];
337
340 int subOffset[3];
341
345
348
351
354
357
359 unsigned char* m_ImageHeader;
360
362 unsigned char* m_Image;
363
364#ifdef FRAGMENTED_PACK
366 unsigned char* m_SinglePack;
367
374
377
380
381#endif
382
384 int ScalarSizeTable[12];
385};
386
387
388} // namespace igtl
389
390#endif // _igtlImageMessage2_h
391
392
igtlNewMacro(igtl::GetImageMessage2)
SmartPointer< const Self > ConstPointer
SmartPointer< Self > Pointer
virtual int PackBody()
Packs (serialize) the body. Must be implemented in a child class.
virtual int GetBodyPackSize()
Gets the size of the serialized body.
igtlTypeMacro(igtl::GetImageMessage2, igtl::MessageBase)
virtual int UnpackBody()
Unpacks (deserialize) the body. Must be implemented in a child class.
unsigned char * m_SinglePack
A pointer to the serialized data (for backward compatibility with the conventional packing)
int m_SelfAllocatedImageHeader
A flag for the fragmented image pack (allocated by this class).
void SetScalarTypeToInt16()
Sets the image scalar type to 16-bit integer.
void SetScalarTypeToInt32()
Sets the image scalar type to 32-bit integer.
void GetSubVolume(int dim[3], int off[3])
Gets sub-volume dimensions and offset using arrays of the dimensions and the offset.
void SetEndian(int e)
Sets the Endianess of the image scalars. (default is ENDIAN_BIG)
int scalarType
A variable for the scalar type of the voxels.
int GetCoordinateSystem()
Returns coordinate system (COORDINATE_RAS or COORDINATE_LPS)
void SetNormals(float t[3], float s[3], float n[3])
Sets the orientation of the image by the normal vectors for the i, j and k indeces.
int m_SelfAllocatedImage
A flag for the fragmented image pack (allocated by this class).
int GetNumComponents()
Gets the number of components for each voxel.
int GetEndian()
Gets the Endianess of the image scalars.
void GetMatrix(Matrix4x4 &mat)
Gets the origin/orientation matrix.
virtual int Pack()
void SetScalarTypeToUint32()
Sets the image scalar type to unsigned 32-bit integer.
virtual void * GetScalarPointer()
Gets a pointer to the scalar data.
void GetNormals(float o[3][3])
void GetNormals(float t[3], float s[3], float n[3])
Gets the orientation of the image using the normal vectors for the i, j and k indeces.
void SetScalarTypeToInt8()
Sets the image scalar type to 8-bit integer.
void SetNumComponents(int num)
Sets the number of components for each voxel.
void SetSpacing(float s[3])
Sets spacings by an array of spacing values in i, j and k directions.
virtual void AllocateScalars()
void SetScalarTypeToUint16()
Sets the image scalar type to unsigned 16-bit integer.
void GetSpacing(float s[3])
Gets spacings using an array of spacing values in i, j and k directions.
unsigned char * m_Image
A pointer to the serialized image data.
void SetSpacing(float si, float sj, float sk)
Sets spacings by spacing values in i, j and k directions.
SmartPointer< const Self > ConstPointer
int GetPackFragmentSize(int id)
Gets the size of the specified fragment. (for fragmented pack support)
void GetOrigin(float &px, float &py, float &pz)
SmartPointer< Self > Pointer
virtual void SetScalarPointer(void *p)
Sets the pointer to the scalar data (for fragmented pack support).
void SetOrigin(float p[3])
void SetScalarType(int t)
Sets the image scalar type.
virtual int PackBody()
Packs (serialize) the body. Must be implemented in a child class.
unsigned char * m_ImageHeader
A pointer to the serialized image header.
void GetSubVolume(int &dimi, int &dimj, int &dimk, int &offi, int &offj, int &offk)
int SetSubVolume(int dim[3], int off[3])
virtual void AllocatePack(int bodySize)
void SetScalarTypeToUint8()
Sets the image scalar type to unsigned 8-bit integer.
int GetScalarSize(int type)
Gets the size of the specified scalar type. (e.g. 1 byte for 8-bit integer)
int coordinate
A variable for the scalar type of the voxels.
int SetSubVolume(int dimi, int dimj, int dimk, int offi, int offj, int offk)
void GetDimensions(int &i, int &j, int &k)
Gets image dimensions as the numbers of pixels in i, j and k directions.
void SetNormals(float o[3][3])
virtual int GetBodyPackSize()
Gets the size of the serialized body.
void SetMatrix(Matrix4x4 &mat)
Sets the origin/orientation matrix.
void * GetPackFragmentPointer(int id)
Gets a pointer to the specified fragment of the packed data. (for fragmented pack support)
int numComponents
A variable for the number of components.
virtual int UnpackBody()
Unpacks (deserialize) the body. Must be implemented in a child class.
void GetDimensions(int s[3])
Gets image dimensions as an array of the numbers of pixels in i, j and k directions.
int GetScalarType()
Gets the image scalar type.
void GetSpacing(float &si, float &sj, float &sk)
Gets spacings using spacing values in i, j and k directions.
int endian
A variable for the Endian of the scalar values in the image.
void * GetPackPointer()
Gets a pointer to the scalar data (for fragmented pack support).
void SetDimensions(int s[3])
void GetOrigin(float p[3])
void SetOrigin(float px, float py, float pz)
void SetCoordinateSystem(int c)
Sets coordinate system (COORDINATE_RAS or COORDINATE_LPS)
void SetDimensions(int i, int j, int k)
Implements transparent reference counting.
#define igtlTypeMacro(thisClass, superclass)
Definition igtlMacro.h:486
#define igtlNewMacro(x)
Definition igtlMacro.h:431
#define IGTLCommon_EXPORT
The "igtl" namespace contains all OpenIGTLink classes. There are several nested namespaces within the...
float Matrix4x4[4][4]
Definition igtlMath.h:23

Generated for OpenIGTLink by Doxygen 1.9.8 written by Dimitri van Heesch, © 1997-2012