MeVisLab Toolbox Reference
mlITKSupportMacrosP.h
Go to the documentation of this file.
1
/*************************************************************************************
2
**
3
** Copyright 2007, MeVis Medical Solutions AG
4
**
5
** The user may use this file in accordance with the license agreement provided with
6
** the Software or, alternatively, in accordance with the terms contained in a
7
** written agreement between the user and MeVis Medical Solutions AG.
8
**
9
** For further information use the contact form at https://www.mevislab.de/contact
10
**
11
**************************************************************************************/
12
13
#pragma once
14
16
#include "
mlInitSystemITKSupport.h
"
17
19
#include "
mlModuleIncludes.h
"
20
22
#include <itkImage.h>
23
24
//---------------------------------------------------------------------------
27
//---------------------------------------------------------------------------
28
#define _ML_INSTANTIATE_2D_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, CLASS_NAME, DIM) \
29
{ \
30
switch (DIM){ \
31
case 2: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 2, CLASS_NAME); break; \
32
default: \
33
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_2D_CODE).", "DIM=", DIM); \
34
} \
35
}
36
37
//---------------------------------------------------------------------------
40
//---------------------------------------------------------------------------
41
#define _ML_INSTANTIATE_3D_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, CLASS_NAME, DIM) \
42
{ \
43
switch (DIM){ \
44
case 3: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 3, CLASS_NAME); break; \
45
default: \
46
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_3D_CODE).", "DIM=", DIM); \
47
} \
48
}
49
50
//---------------------------------------------------------------------------
53
//---------------------------------------------------------------------------
54
#define _ML_INSTANTIATE_2D3D_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, CLASS_NAME, DIM) \
55
{ \
56
switch (DIM){ \
57
case 2: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 2, CLASS_NAME); break; \
58
case 3: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 3, CLASS_NAME); break; \
59
default: \
60
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_3D_CODE).", "DIM=", DIM); \
61
} \
62
}
63
64
//---------------------------------------------------------------------------
67
//---------------------------------------------------------------------------
68
#define _ML_INSTANTIATE_6D_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, CLASS_NAME, DIM) \
69
{ \
70
switch (DIM){ \
71
/* case 1: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 1, CLASS_NAME); break;*/
\
72
case 2: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 2, CLASS_NAME); break; \
73
case 3: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 3, CLASS_NAME); break; \
74
/* case 4: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 4, CLASS_NAME); break; */
\
75
/* case 5: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 5, CLASS_NAME); break; */
\
76
case 6: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 6, CLASS_NAME); break; \
77
default: \
78
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_6D_CODE).", "DIM=", DIM); \
79
} \
80
}
81
82
//---------------------------------------------------------------------------
85
//---------------------------------------------------------------------------
86
#define _ML_INSTANTIATE_6D_SAME_DIM_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, \
87
CLASS_NAME, DIM) \
88
{ \
89
switch (DIM) { \
90
/* case 1: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 1, CLASS_NAME); break;*/
\
91
case 2: \
92
if constexpr (MLINDATATYPE::Size == 2) { \
93
USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 2, CLASS_NAME); \
94
} else \
95
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DATA_TYPE, "Voxel type dimension must match image dimension"); \
96
break; \
97
case 3: \
98
if constexpr (MLINDATATYPE::Size == 3) { \
99
USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 3, CLASS_NAME); \
100
} else \
101
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DATA_TYPE, "Voxel type dimension must match image dimension"); \
102
break; \
103
/* case 4: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 4, CLASS_NAME); break; */
\
104
/* case 5: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 5, CLASS_NAME); break; */
\
105
case 6: \
106
if constexpr (MLINDATATYPE::Size == 6) { \
107
USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 6, CLASS_NAME); \
108
} else \
109
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DATA_TYPE, "Voxel type dimension must match image dimension"); \
110
break; \
111
default: \
112
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_6D_SAME_DIM_CODE).", "DIM=", DIM); \
113
} \
114
}
115
116
//------------------------------------------------------------------------------------
118
//------------------------------------------------------------------------------------
119
#define _ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, DIM_INST)\
120
switch(DATATYPE_ENUM){ \
121
case MLint8Type: DIM_INST(MLint8 , MLint8 , MLint8 , MLint8 , USER_CODE, CLASS_NAME, DIM); break; \
122
case MLuint8Type: DIM_INST(MLuint8 , MLuint8 , MLuint8 , MLuint8 , USER_CODE, CLASS_NAME, DIM); break; \
123
case MLint16Type: DIM_INST(MLint16 , MLint16 , MLint16 , MLint16 , USER_CODE, CLASS_NAME, DIM); break; \
124
case MLuint16Type: DIM_INST(MLuint16 , MLuint16 , MLuint16 , MLuint16 , USER_CODE, CLASS_NAME, DIM); break; \
125
case MLint32Type: DIM_INST(MLint32 , MLint32 , MLint32 , MLint32 , USER_CODE, CLASS_NAME, DIM); break; \
126
case MLuint32Type: DIM_INST(MLuint32 , MLuint32 , MLuint32 , MLuint32 , USER_CODE, CLASS_NAME, DIM); break; \
127
case MLfloatType: DIM_INST(MLfloat , MLfloat , MLfloat , MLfloat , USER_CODE, CLASS_NAME, DIM); break; \
128
case MLdoubleType: DIM_INST(MLdouble , MLdouble , MLdouble , MLdouble , USER_CODE, CLASS_NAME, DIM); break; \
129
/* case MLldoubleType: DIM_INST(MLldouble , MLldouble , MLldouble , MLldouble, USER_CODE, CLASS_NAME, DIM); break; */
\
130
/* case MLint64Type: DIM_INST(MLint64 , MLint64 , MLint64 , MLint64 , USER_CODE, CLASS_NAME, DIM); break; */
\
131
/* case MLuint64Type: DIM_INST(MLuint64 , MLuint64 , MLuint64 , MLuint64 , USER_CODE, CLASS_NAME, DIM); break; */
\
132
default: { \
133
ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DATA_TYPE, \
134
"Type case not executed(_ML_IMPLEMENT_ALL_ITK_CASES).", \
135
"DATATYPE_ENUM=", DATATYPE_ENUM, \
136
"DIM=", DIM); \
137
break; \
138
} \
139
} \
140
141
//------------------------------------------------------------------------------------
143
//------------------------------------------------------------------------------------
144
#define ML_IMPLEMENT_ALL_ITK_2D_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM)\
145
_ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_2D_CODE)
146
147
//------------------------------------------------------------------------------------
149
//------------------------------------------------------------------------------------
150
#define ML_IMPLEMENT_ALL_ITK_3D_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM)\
151
_ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_3D_CODE)
152
153
//------------------------------------------------------------------------------------
155
//------------------------------------------------------------------------------------
156
#define ML_IMPLEMENT_ALL_ITK_2D3D_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM)\
157
_ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_2D3D_CODE)
158
159
//------------------------------------------------------------------------------------
161
//------------------------------------------------------------------------------------
162
#define ML_IMPLEMENT_ALL_ITK_6D_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM)\
163
_ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_6D_CODE)
164
165
//------------------------------------------------------------------------------------
167
//------------------------------------------------------------------------------------
168
#define ML_IMPLEMENT_ALL_ITK_6D_SAME_DIM_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM) \
169
_ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_6D_SAME_DIM_CODE)
170
171
172
//---------------------------------------------------------------------------
174
//---------------------------------------------------------------------------
175
#define _TEMPLATE_INPUTS0 OutImageType
176
#define _TEMPLATE_INPUTS1 InImageType,OutImageType
177
#define _TEMPLATE_INPUTS2 InImageType,InImageType,OutImageType
178
#define _TEMPLATE_INPUTS3 InImageType,InImageType,InImageType,OutImageType
179
#define _TEMPLATE_INPUTS4 InImageType,InImageType,InImageType,InImageType,OutImageType
180
#define _TEMPLATE_INPUTS5 InImageType,InImageType,InImageType,InImageType,InImageType,OutImageType
182
183
184
//---------------------------------------------------------------------------
188
//---------------------------------------------------------------------------
189
#define _WRAPPER_DETERMINE_IN_REGION1_CPP(CLASS_NAME) \
190
191
192
193
//---------------------------------------------------------------------------
196
//---------------------------------------------------------------------------
197
#define _ML_CALL_CALCOUTSUBIMAGE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
198
{ \
199
reinterpret_cast<CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*>(this) \
200
->calcOutSubImageT(*outSubImg, outIndex, inSubImgs); \
201
}
202
203
//---------------------------------------------------------------------------
216
//---------------------------------------------------------------------------
217
#define _ML_CREATE_ITK_FILTER(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
218
reinterpret_cast<CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*>(this) \
219
->_createITKFilterT();
220
221
//---------------------------------------------------------------------------
232
//---------------------------------------------------------------------------
233
#define _ML_DESTROY_ITK_FILTER(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
234
reinterpret_cast<CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*>(this) \
235
->_destroyITKFilterT();
236
237
//---------------------------------------------------------------------------
248
//---------------------------------------------------------------------------
249
#define _ML_DETERMINE_ITK_IN_REGION(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, _DIM, CLASS_NAME) \
250
return reinterpret_cast<CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, _DIM>*>(this) \
251
->_determineInRegionT(inIndex, outBox, outIndex, numActiveInputs);
252
253
254
//---------------------------------------------------------------------------
265
//---------------------------------------------------------------------------
266
#define _ML_DETERMINE_ITK_OUT_IMAGE_REGION(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
267
return reinterpret_cast<CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*>(this) \
268
->_getOutImageRegionT(numImageInputs);
269
270
//---------------------------------------------------------------------------
281
//---------------------------------------------------------------------------
282
#define _ML_SET_FILTER_PARAMETERS(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
283
return reinterpret_cast<CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*>(this) \
284
->_setFilterParametersT();
285
286
//---------------------------------------------------------------------------
297
//---------------------------------------------------------------------------
298
#define _ML_GET_FILTER_PARAMETERS(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \
299
return reinterpret_cast<CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*>(this) \
300
->_getFilterParametersT();
301
302
303
//----------------------------------------------------------------------------
306
//----------------------------------------------------------------------------
307
#define _ML_ITK_DETERMINE_IN_REGION_0(CLASS_NAME, NAMESPACE) \
308
SubImageBox _determineInRegionT(MLint
/*inIndex*/
, const SubImageBox &
/*outBox*/
, MLint
/*outIndex*/
, MLint
/*numActiveInputs*/
) \
309
{ \
310
return SubImageBox(); \
311
}
312
313
//----------------------------------------------------------------------------
318
//----------------------------------------------------------------------------
319
#define _ML_ITK_DETERMINE_IN_REGION_N(CLASS_NAME, NAMESPACE) \
320
SubImageBox _determineInRegionT(MLint inIndex, const SubImageBox &outBox, MLint outIndex, MLint numActiveInputs) \
321
{ \
322
typename FilterType::Pointer filter = static_cast<FilterType*>(_itkObj->voidFilterPtr()); \
323
return determineImageFilterInRegionTN<FilterType, InImageType> \
324
(filter, *this, inIndex, outBox, outIndex, numActiveInputs); \
325
} \
326
327
328
329
//----------------------------------------------------------------------------
332
//----------------------------------------------------------------------------
333
#define _ML_ITK_DETERMINE_OUT_REGION_0(CLASS_NAME, NAMESPACE) \
334
SubImageBox _getOutImageRegionT(int
/*numImageInputs*/
) \
335
{ \
336
typename FilterType::Pointer filter = static_cast<FilterType*>(_itkObj->voidFilterPtr());\
337
return determineImageFilterOutImageRegionT0<FilterType, OutImageType> \
338
(filter, *this); \
339
} \
340
341
//----------------------------------------------------------------------------
344
//----------------------------------------------------------------------------
345
#define _ML_ITK_DETERMINE_OUT_REGION_N(CLASS_NAME, NAMESPACE) \
346
SubImageBox _getOutImageRegionT(int numImageInputs) \
347
{ \
348
typename FilterType::Pointer filter = static_cast<FilterType*>(_itkObj->voidFilterPtr());\
349
return determineImageFilterOutImageRegionTN<FilterType, OutImageType, InImageType> \
350
(filter, *this, numImageInputs); \
351
} \
352
353
354
355
//--------------------------------------------------------------------------------
360
//--------------------------------------------------------------------------------
362
#define ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_0(CLASS_NAME, NAMESPACE) \
363
typedef NAMESPACE::CLASS_NAME<_TEMPLATE_INPUTS0> FilterType; \
364
366
#define ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_1(CLASS_NAME, NAMESPACE) \
367
typedef NAMESPACE::CLASS_NAME<_TEMPLATE_INPUTS1> FilterType; \
368
370
#define ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_2(CLASS_NAME, NAMESPACE) \
371
typedef NAMESPACE::CLASS_NAME<_TEMPLATE_INPUTS2> FilterType; \
372
374
#define ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_3(CLASS_NAME, NAMESPACE) \
375
typedef NAMESPACE::CLASS_NAME<_TEMPLATE_INPUTS3> FilterType; \
376
378
379
//----------------------------------------------------------------------------------
384
// <typename DATATYPE, unsigned int DIM>
388
// TSubImage<DATATYPE> *outSubImg, int outIndex SUB_IMGS)
391
//----------------------------------------------------------------------------------
392
#define _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, DET_IN_REGION, WRAPPER_TYPEDEFS, CREATOR_SWITCH, DET_OUT_REGION) \
393
\
394
\
395
template <typename ML_OUTDATATYPE, typename ITK_OUTDATATYPE, \
396
typename ML_INDATATYPE, typename ITK_INDATATYPE, unsigned int DIM> \
397
class CLASS_NAME##Wrapper : public PROJECT_PREFIX##CLASS_NAME \
398
{ \
399
friend class PROJECT_PREFIX##CLASS_NAME; \
400
\
401
/*--------------------------------------------------------------------*/
\
402
\
403
/*--------------------------------------------------------------------*/
\
404
typedef itk::Image<ITK_INDATATYPE,DIM> InImageType; \
405
\
406
/*--------------------------------------------------------------------*/
\
407
\
408
/*--------------------------------------------------------------------*/
\
409
typedef ITK_INDATATYPE InPixelType; \
410
\
411
/*--------------------------------------------------------------------*/
\
412
\
413
/*--------------------------------------------------------------------*/
\
414
typedef itk::Image<ITK_OUTDATATYPE,DIM> OutImageType; \
415
\
416
/*--------------------------------------------------------------------*/
\
417
\
418
/*--------------------------------------------------------------------*/
\
419
typedef ITK_OUTDATATYPE OutPixelType; \
420
\
421
/*--------------------------------------------------------------------*/
\
422
\
423
/*--------------------------------------------------------------------*/
\
424
WRAPPER_TYPEDEFS(CLASS_NAME, NAMESPACE) \
425
\
426
/*--------------------------------------------------------------------*/
\
427
\
428
/*--------------------------------------------------------------------*/
\
429
void _createITKFilterT() \
430
{ \
431
/* Create and store the typed object wrapper in */
\
432
/* untyped base class pointer. */
\
433
_itkObj = new TypedObjectHolderT<FilterType>(); \
434
} \
435
\
436
/*--------------------------------------------------------------------*/
\
437
\
438
\
439
/*--------------------------------------------------------------------*/
\
440
void _destroyITKFilterT() \
441
{ \
442
delete _itkObj; _itkObj = nullptr; \
443
} \
444
\
445
/*------------------------------------------------------------------------*/
\
446
\
447
\
448
/*------------------------------------------------------------------------*/
\
449
DET_IN_REGION(CLASS_NAME, NAMESPACE) \
450
\
451
/*------------------------------------------------------------------------*/
\
452
\
453
/*------------------------------------------------------------------------*/
\
454
DET_OUT_REGION(CLASS_NAME, NAMESPACE) \
455
\
456
/*------------------------------------------------------------------------*/
\
457
\
458
/*------------------------------------------------------------------------*/
\
459
MLErrorCode _setFilterParametersT(); \
460
\
461
/*------------------------------------------------------------------------*/
\
462
\
463
/*------------------------------------------------------------------------*/
\
464
MLErrorCode _getFilterParametersT(); \
465
\
466
/*------------------------------------------------------------------------*/
\
467
\
468
/*------------------------------------------------------------------------*/
\
469
void calcOutSubImageT(SubImage &outSubImg, \
470
int outIndex, \
471
SubImage *inSubImgs); \
472
\
473
\
474
private: \
475
/*--- DO NOT IMPLEMENT MEMBERS IN THIS CLASS --- */
\
476
/*--- IT MUST BE LEGAL TO CAST IT TO ITS --- */
\
477
/*--- BASE CLASS AND BACK! --- */
\
478
\
479
\
480
CLASS_NAME##Wrapper(); \
481
\
482
~CLASS_NAME##Wrapper(); \
483
\
484
CLASS_NAME##Wrapper(const CLASS_NAME##Wrapper &); \
485
\
486
CLASS_NAME##Wrapper operator=(const CLASS_NAME##Wrapper &); \
487
\
488
}; \
489
\
490
/*---------------------------------------------------------------------------*/
\
491
/*--- Implement virtual calculateOutputSubImage method to call correctly ---*/
\
492
/*--- typed calcOutSubImageT method of template wrapper ---*/
\
493
/*---------------------------------------------------------------------------*/
\
494
void PROJECT_PREFIX##CLASS_NAME::calculateOutputSubImage(SubImage *outSubImg, \
495
int outIndex, \
496
SubImage *inSubImgs) \
497
{ \
498
/* Call correct template version of calcOutSubImageT for all types and dims.*/
\
499
CREATOR_SWITCH("calculateOutputSubImage()", \
500
_ML_CALL_CALCOUTSUBIMAGE, \
501
CLASS_NAME, _m_PixelType, _m_Dimension); \
502
} \
503
\
504
/*---------------------------------------------------------------------------*/
\
505
\
506
\
507
\
508
\
509
\
510
\
511
\
512
\
513
/*---------------------------------------------------------------------------*/
\
514
void PROJECT_PREFIX##CLASS_NAME::_createITKFilter(MLDataType dataType, MLint dim)\
515
{ \
516
/* Clean up an eventually existing filter. */
\
517
_destroyITKFilter(); \
518
\
519
/* Set data type and dimension of the filter to be created. */
\
520
_m_PixelType = dataType; \
521
_m_Dimension = dim; \
522
\
523
ML_TRY \
524
{ \
525
/* Implement ITKImage creation for all data types and all dimensions. */
\
526
CREATOR_SWITCH("_createITKFilter()", \
527
_ML_CREATE_ITK_FILTER, \
528
CLASS_NAME, _m_PixelType, _m_Dimension); \
529
} \
530
ML_CATCH_BLOCK(...) \
531
{ \
532
ML_ITK_ML_PRINT_ERROR("_createITKFilter()", \
533
ML_UNKNOWN_EXCEPTION, "Filter not created.", \
534
"_m_PixelType=", _m_PixelType, \
535
"_m_Dimension=", _m_Dimension); \
536
} \
537
} \
538
\
539
\
540
/*---------------------------------------------------------------------------*/
\
541
\
542
\
543
\
544
\
545
\
546
\
547
\
548
\
549
\
550
\
551
/*---------------------------------------------------------------------------*/
\
552
void PROJECT_PREFIX##CLASS_NAME::_destroyITKFilter() \
553
{ \
554
/* Destroy only valid objects */
\
555
if (!_itkObj || (_m_Dimension < 1) || \
556
(ML_INVALID_DATA_TYPE == _m_PixelType)){ return; } \
557
ML_TRY \
558
{ \
559
/* Implement ITKImage creation for all data types and all dimensions. */
\
560
CREATOR_SWITCH("_destroyITKFilter()", \
561
_ML_DESTROY_ITK_FILTER, \
562
CLASS_NAME, _m_PixelType, _m_Dimension); \
563
} \
564
ML_CATCH_BLOCK(...) \
565
{ \
566
ML_ITK_ML_PRINT_ERROR("_destroyITKFilter()", \
567
ML_UNKNOWN_EXCEPTION, "Filter destruction failed.", \
568
"_m_PixelType=", _m_PixelType, \
569
"_m_Dimension=", _m_Dimension); \
570
} \
571
_itkObj = nullptr; \
572
} \
573
\
574
\
575
/*----------------------------------------------------------------------------*/
\
576
\
577
\
578
\
579
\
580
\
581
\
582
\
583
\
584
\
585
\
586
\
587
\
588
/*----------------------------------------------------------------------------*/
\
589
SubImageBox PROJECT_PREFIX##CLASS_NAME::_determineInRegion(MLint inIndex, \
590
const SubImageBox &outBox,\
591
MLint outIndex, \
592
MLint numActiveInputs) \
593
{ \
594
ML_TRY \
595
{ \
596
/* Implement ITKImage creation for all data types and all dimensions. */
\
597
CREATOR_SWITCH("_determineInRegion()", \
598
_ML_DETERMINE_ITK_IN_REGION, \
599
CLASS_NAME, _m_PixelType, _m_Dimension); \
600
} \
601
ML_CATCH_BLOCK(...) \
602
{ \
603
ML_ITK_ML_PRINT_ERROR("_determineInRegion()", \
604
ML_UNKNOWN_EXCEPTION, "InRegion calculation failed.", \
605
"inIndex=", inIndex, \
606
"outIndex=", outIndex, \
607
"_m_PixelType=", _m_PixelType, \
608
"_m_Dimension=", _m_Dimension); \
609
} \
610
return SubImageBox();
/* Return empty box in case of error */
\
611
} \
612
\
613
\
614
/*----------------------------------------------------------------------------*/
\
615
\
616
\
617
\
618
\
619
\
620
\
621
\
622
/*----------------------------------------------------------------------------*/
\
623
SubImageBox PROJECT_PREFIX##CLASS_NAME::_getOutImageRegion(int numImageInputs) \
624
{ \
625
ML_TRY \
626
{ \
627
/* Implement ITKImage creation for all data types and all dimensions. */
\
628
CREATOR_SWITCH("_getOutImageRegion()", \
629
_ML_DETERMINE_ITK_OUT_IMAGE_REGION, \
630
CLASS_NAME, _m_PixelType, _m_Dimension); \
631
} \
632
ML_CATCH_BLOCK(...) \
633
{ \
634
ML_ITK_ML_PRINT_ERROR("_getOutImageRegion()", \
635
ML_UNKNOWN_EXCEPTION, "OutRegion calculation failed.", \
636
"numImageInputs=", numImageInputs, \
637
"_m_PixelType=", _m_PixelType, \
638
"_m_Dimension=", _m_Dimension); \
639
} \
640
return SubImageBox();
/* Return empty box in case of error */
\
641
} \
642
\
643
\
644
/*----------------------------------------------------------------------------*/
\
645
\
646
/*----------------------------------------------------------------------------*/
\
647
MLErrorCode PROJECT_PREFIX##CLASS_NAME::_setFilterParameters() \
648
{ \
649
MLErrorCode retCode = ML_RESULT_OK; \
650
\
651
ML_TRY \
652
{ \
653
/* Implement ITKImage creation for all data types and all dimensions. */
\
654
CREATOR_SWITCH("_setFilterParameters()", \
655
_ML_SET_FILTER_PARAMETERS, \
656
CLASS_NAME, _m_PixelType, _m_Dimension); \
657
} \
658
ML_CATCH_BLOCK(...) \
659
{ \
660
ML_PRINT_ERROR("_setFilterParameters())", \
661
ML_UNKNOWN_EXCEPTION, "Returning empty box."); \
662
retCode = ML_UNKNOWN_EXCEPTION; \
663
} \
664
\
665
return retCode; \
666
} \
667
\
668
\
669
/*----------------------------------------------------------------------------*/
\
670
\
671
/*----------------------------------------------------------------------------*/
\
672
MLErrorCode PROJECT_PREFIX##CLASS_NAME::_getFilterParameters() \
673
{ \
674
MLErrorCode retCode = ML_RESULT_OK; \
675
\
676
ML_TRY \
677
{ \
678
/* Call the correct template version of get filter function. */
\
679
CREATOR_SWITCH("_getFilterParameters()", \
680
_ML_GET_FILTER_PARAMETERS, \
681
CLASS_NAME, _m_PixelType, _m_Dimension); \
682
} \
683
ML_CATCH_BLOCK(...) \
684
{ \
685
ML_PRINT_ERROR("_getFilterParameters())", \
686
ML_UNKNOWN_EXCEPTION, "Parameter no or only partially read.");\
687
retCode = ML_UNKNOWN_EXCEPTION; \
688
} \
689
\
690
return retCode; \
691
} \
692
\
693
mlInitSystemITKSupport.h
mlModuleIncludes.h
MeVisLab
ITK
Sources
ML
MLITKSupport
mlITKSupportMacrosP.h
Generated by
1.10.0