MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //---------------------------------------------------------------------------------- 00005 00010 //---------------------------------------------------------------------------------- 00011 #ifndef __mlITKSupportMacrosP_H 00012 #define __mlITKSupportMacrosP_H 00013 00015 #include "mlInitSystemITKSupport.h" 00016 00018 #ifndef __mlModuleIncludes_H 00019 #include "mlModuleIncludes.h" 00020 #endif 00021 00023 #include <itkImage.h> 00024 00025 //--------------------------------------------------------------------------- 00028 //--------------------------------------------------------------------------- 00029 #define _ML_INSTANTIATE_2D_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, CLASS_NAME, DIM) \ 00030 { \ 00031 switch (DIM){ \ 00032 case 2: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 2, CLASS_NAME); break; \ 00033 default: \ 00034 ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_2D_CODE).", "DIM=", DIM); \ 00035 } \ 00036 } 00037 00038 //--------------------------------------------------------------------------- 00041 //--------------------------------------------------------------------------- 00042 #define _ML_INSTANTIATE_3D_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, CLASS_NAME, DIM) \ 00043 { \ 00044 switch (DIM){ \ 00045 case 3: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 3, CLASS_NAME); break; \ 00046 default: \ 00047 ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_3D_CODE).", "DIM=", DIM); \ 00048 } \ 00049 } 00050 00051 //--------------------------------------------------------------------------- 00054 //--------------------------------------------------------------------------- 00055 #define _ML_INSTANTIATE_2D3D_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, CLASS_NAME, DIM) \ 00056 { \ 00057 switch (DIM){ \ 00058 case 2: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 2, CLASS_NAME); break; \ 00059 case 3: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 3, CLASS_NAME); break; \ 00060 default: \ 00061 ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_3D_CODE).", "DIM=", DIM); \ 00062 } \ 00063 } 00064 00065 //--------------------------------------------------------------------------- 00068 //--------------------------------------------------------------------------- 00069 #define _ML_INSTANTIATE_6D_CODE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, USER_CODE2, CLASS_NAME, DIM) \ 00070 { \ 00071 switch (DIM){ \ 00072 /* case 1: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 1, CLASS_NAME); break;*/ \ 00073 case 2: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 2, CLASS_NAME); break; \ 00074 case 3: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 3, CLASS_NAME); break; \ 00075 /* case 4: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 4, CLASS_NAME); break; */ \ 00076 /* case 5: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 5, CLASS_NAME); break; */ \ 00077 case 6: USER_CODE2(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, 6, CLASS_NAME); break; \ 00078 default: \ 00079 ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DIMENSION, "Ignoring case(_ML_INSTANTIATE_6D_CODE).", "DIM=", DIM); \ 00080 } \ 00081 } 00082 00083 //------------------------------------------------------------------------------------ 00085 //------------------------------------------------------------------------------------ 00086 #define _ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, DIM_INST)\ 00087 switch(DATATYPE_ENUM){ \ 00088 case MLint8Type: DIM_INST(MLint8 , MLint8 , MLint8 , MLint8 , USER_CODE, CLASS_NAME, DIM); break; \ 00089 case MLuint8Type: DIM_INST(MLuint8 , MLuint8 , MLuint8 , MLuint8 , USER_CODE, CLASS_NAME, DIM); break; \ 00090 case MLint16Type: DIM_INST(MLint16 , MLint16 , MLint16 , MLint16 , USER_CODE, CLASS_NAME, DIM); break; \ 00091 case MLuint16Type: DIM_INST(MLuint16 , MLuint16 , MLuint16 , MLuint16 , USER_CODE, CLASS_NAME, DIM); break; \ 00092 case MLint32Type: DIM_INST(MLint32 , MLint32 , MLint32 , MLint32 , USER_CODE, CLASS_NAME, DIM); break; \ 00093 case MLuint32Type: DIM_INST(MLuint32 , MLuint32 , MLuint32 , MLuint32 , USER_CODE, CLASS_NAME, DIM); break; \ 00094 case MLfloatType: DIM_INST(MLfloat , MLfloat , MLfloat , MLfloat , USER_CODE, CLASS_NAME, DIM); break; \ 00095 case MLdoubleType: DIM_INST(MLdouble , MLdouble , MLdouble , MLdouble , USER_CODE, CLASS_NAME, DIM); break; \ 00096 /* case MLldoubleType: DIM_INST(MLldouble , MLldouble , MLldouble , MLldouble, USER_CODE, CLASS_NAME, DIM); break; */ \ 00097 /* case MLint64Type: DIM_INST(MLint64 , MLint64 , MLint64 , MLint64 , USER_CODE, CLASS_NAME, DIM); break; */ \ 00098 /* case MLuint64Type: DIM_INST(MLuint64 , MLuint64 , MLuint64 , MLuint64 , USER_CODE, CLASS_NAME, DIM); break; */ \ 00099 default: { \ 00100 ML_ITK_ML_PRINT_ERROR(#CLASS_NAME, ML_BAD_DATA_TYPE, \ 00101 "Type case not executed(_ML_IMPLEMENT_ALL_ITK_CASES).", \ 00102 "DATATYPE_ENUM=", DATATYPE_ENUM, \ 00103 "DIM=", DIM); \ 00104 break; \ 00105 } \ 00106 } \ 00107 00108 //------------------------------------------------------------------------------------ 00110 //------------------------------------------------------------------------------------ 00111 #define ML_IMPLEMENT_ALL_ITK_2D_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM)\ 00112 _ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_2D_CODE) 00113 00114 //------------------------------------------------------------------------------------ 00116 //------------------------------------------------------------------------------------ 00117 #define ML_IMPLEMENT_ALL_ITK_3D_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM)\ 00118 _ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_3D_CODE) 00119 00120 //------------------------------------------------------------------------------------ 00122 //------------------------------------------------------------------------------------ 00123 #define ML_IMPLEMENT_ALL_ITK_2D3D_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM)\ 00124 _ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_2D3D_CODE) 00125 00126 //------------------------------------------------------------------------------------ 00128 //------------------------------------------------------------------------------------ 00129 #define ML_IMPLEMENT_ALL_ITK_6D_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM)\ 00130 _ML_IMPLEMENT_ALL_ITK_CASES(INFO_STRING, USER_CODE, CLASS_NAME, DATATYPE_ENUM, DIM, _ML_INSTANTIATE_6D_CODE) 00131 00132 00133 //--------------------------------------------------------------------------- 00135 //--------------------------------------------------------------------------- 00136 #define _TEMPLATE_INPUTS0 OutImageType 00137 #define _TEMPLATE_INPUTS1 InImageType,OutImageType 00138 #define _TEMPLATE_INPUTS2 InImageType,InImageType,OutImageType 00139 #define _TEMPLATE_INPUTS3 InImageType,InImageType,InImageType,OutImageType 00140 #define _TEMPLATE_INPUTS4 InImageType,InImageType,InImageType,InImageType,OutImageType 00141 #define _TEMPLATE_INPUTS5 InImageType,InImageType,InImageType,InImageType,InImageType,OutImageType 00142 00143 00144 00145 //--------------------------------------------------------------------------- 00149 //--------------------------------------------------------------------------- 00150 #define _WRAPPER_DETERMINE_IN_REGION1_CPP(CLASS_NAME) \ 00151 00152 00153 00154 //--------------------------------------------------------------------------- 00157 //--------------------------------------------------------------------------- 00158 #define _ML_CALL_CALCOUTSUBIMAGE(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \ 00159 { \ 00160 ((CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*)this)->calcOutSubImageT(*outSubImg, outIndex, inSubImgs); \ 00161 } 00162 00163 //--------------------------------------------------------------------------- 00176 //--------------------------------------------------------------------------- 00177 #define _ML_CREATE_ITK_FILTER(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \ 00178 ((CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*)this)->_createITKFilterT(); 00179 00180 //--------------------------------------------------------------------------- 00191 //--------------------------------------------------------------------------- 00192 #define _ML_DESTROY_ITK_FILTER(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \ 00193 ((CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*)this)->_destroyITKFilterT(); 00194 00195 //--------------------------------------------------------------------------- 00206 //--------------------------------------------------------------------------- 00207 #define _ML_DETERMINE_ITK_IN_REGION(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, _DIM, CLASS_NAME) \ 00208 return ((CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, _DIM>*)this)->_determineInRegionT(inIndex, outBox, outIndex, numActiveInputs); 00209 00210 00211 //--------------------------------------------------------------------------- 00222 //--------------------------------------------------------------------------- 00223 #define _ML_DETERMINE_ITK_OUT_IMAGE_REGION(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \ 00224 return ((CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*)this)->_getOutImageRegionT(numImageInputs); 00225 00226 //--------------------------------------------------------------------------- 00237 //--------------------------------------------------------------------------- 00238 #define _ML_SET_FILTER_PARAMETERS(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \ 00239 return ((CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*)this)->_setFilterParametersT(); 00240 00241 //--------------------------------------------------------------------------- 00252 //--------------------------------------------------------------------------- 00253 #define _ML_GET_FILTER_PARAMETERS(MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM, CLASS_NAME) \ 00254 return ((CLASS_NAME##Wrapper<MLOUTDATATYPE, ITKOUTDATATYPE, MLINDATATYPE, ITKINDATATYPE, DIM>*)this)->_getFilterParametersT(); 00255 00256 00257 //---------------------------------------------------------------------------- 00260 //---------------------------------------------------------------------------- 00261 #define _ML_ITK_DETERMINE_IN_REGION_0(CLASS_NAME, NAMESPACE) \ 00262 SubImageBox _determineInRegionT(MLint /*inIndex*/, const SubImageBox &/*outBox*/, MLint /*outIndex*/, MLint /*numActiveInputs*/) \ 00263 { \ 00264 ML_TRACE_IN("template CLASS_NAME##Wrapper::_determineInRegionT(4 args, default version)"); \ 00265 return SubImageBox(); \ 00266 } 00267 00268 //---------------------------------------------------------------------------- 00273 //---------------------------------------------------------------------------- 00274 #define _ML_ITK_DETERMINE_IN_REGION_N(CLASS_NAME, NAMESPACE) \ 00275 SubImageBox _determineInRegionT(MLint inIndex, const SubImageBox &outBox, MLint outIndex, MLint numActiveInputs) \ 00276 { \ 00277 ML_TRACE_IN("template CLASS_NAME##Wrapper::_determineInRegionT(4 args)"); \ 00278 \ 00279 typename FilterType::Pointer filter = static_cast<FilterType*>(_itkObj->voidFilterPtr()); \ 00280 return determineImageFilterInRegionTN<FilterType, InImageType> \ 00281 (filter, *this, inIndex, outBox, outIndex, numActiveInputs); \ 00282 } \ 00283 00284 00285 00286 //---------------------------------------------------------------------------- 00289 //---------------------------------------------------------------------------- 00290 #define _ML_ITK_DETERMINE_OUT_REGION_0(CLASS_NAME, NAMESPACE) \ 00291 SubImageBox _getOutImageRegionT(int /*numImageInputs*/) \ 00292 { \ 00293 ML_TRACE_IN("template CLASS_NAME##Wrapper::getOutImageRegionT() for 0 inps"); \ 00294 \ 00295 typename FilterType::Pointer filter = static_cast<FilterType*>(_itkObj->voidFilterPtr());\ 00296 return determineImageFilterOutImageRegionT0<FilterType, OutImageType> \ 00297 (filter, *this); \ 00298 } \ 00299 00300 //---------------------------------------------------------------------------- 00303 //---------------------------------------------------------------------------- 00304 #define _ML_ITK_DETERMINE_OUT_REGION_N(CLASS_NAME, NAMESPACE) \ 00305 SubImageBox _getOutImageRegionT(int numImageInputs) \ 00306 { \ 00307 ML_TRACE_IN("template CLASS_NAME##Wrapper::getOutImageRegionT() for N inps"); \ 00308 \ 00309 typename FilterType::Pointer filter = static_cast<FilterType*>(_itkObj->voidFilterPtr());\ 00310 return determineImageFilterOutImageRegionTN<FilterType, OutImageType, InImageType> \ 00311 (filter, *this, numImageInputs); \ 00312 } \ 00313 00314 00315 00316 //-------------------------------------------------------------------------------- 00321 //-------------------------------------------------------------------------------- 00323 #define ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_0(CLASS_NAME, NAMESPACE) \ 00324 typedef NAMESPACE::CLASS_NAME<_TEMPLATE_INPUTS0> FilterType; \ 00325 00326 00327 #define ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_1(CLASS_NAME, NAMESPACE) \ 00328 typedef NAMESPACE::CLASS_NAME<_TEMPLATE_INPUTS1> FilterType; \ 00329 00330 00331 #define ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_2(CLASS_NAME, NAMESPACE) \ 00332 typedef NAMESPACE::CLASS_NAME<_TEMPLATE_INPUTS2> FilterType; \ 00333 00334 00335 #define ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_3(CLASS_NAME, NAMESPACE) \ 00336 typedef NAMESPACE::CLASS_NAME<_TEMPLATE_INPUTS3> FilterType; \ 00337 00338 00339 00340 //---------------------------------------------------------------------------------- 00345 // <typename DATATYPE, unsigned int DIM> 00349 // TSubImage<DATATYPE> *outSubImg, int outIndex SUB_IMGS) 00352 //---------------------------------------------------------------------------------- 00353 #define _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, DET_IN_REGION, WRAPPER_TYPEDEFS, CREATOR_SWITCH, DET_OUT_REGION) \ 00354 \ 00355 \ 00356 template <typename ML_OUTDATATYPE, typename ITK_OUTDATATYPE, \ 00357 typename ML_INDATATYPE, typename ITK_INDATATYPE, unsigned int DIM> \ 00358 class CLASS_NAME##Wrapper : public PROJECT_PREFIX##CLASS_NAME \ 00359 { \ 00360 friend class PROJECT_PREFIX##CLASS_NAME; \ 00361 \ 00362 /*--------------------------------------------------------------------*/ \ 00363 \ 00364 /*--------------------------------------------------------------------*/ \ 00365 typedef itk::Image<ITK_INDATATYPE,DIM> InImageType; \ 00366 \ 00367 /*--------------------------------------------------------------------*/ \ 00368 \ 00369 /*--------------------------------------------------------------------*/ \ 00370 typedef ITK_INDATATYPE InPixelType; \ 00371 \ 00372 /*--------------------------------------------------------------------*/ \ 00373 \ 00374 /*--------------------------------------------------------------------*/ \ 00375 typedef itk::Image<ITK_OUTDATATYPE,DIM> OutImageType; \ 00376 \ 00377 /*--------------------------------------------------------------------*/ \ 00378 \ 00379 /*--------------------------------------------------------------------*/ \ 00380 typedef ITK_OUTDATATYPE OutPixelType; \ 00381 \ 00382 /*--------------------------------------------------------------------*/ \ 00383 \ 00384 /*--------------------------------------------------------------------*/ \ 00385 WRAPPER_TYPEDEFS(CLASS_NAME, NAMESPACE) \ 00386 \ 00387 /*--------------------------------------------------------------------*/ \ 00388 \ 00389 /*--------------------------------------------------------------------*/ \ 00390 void _createITKFilterT() \ 00391 { \ 00392 ML_TRACE_IN("template CLASS_NAME##Wrapper::_createITKFilterT()"); \ 00393 \ 00394 /* Create and store the typed object wrapper in */ \ 00395 /* untyped base class pointer. */ \ 00396 _itkObj = new TypedObjectHolderT<FilterType>(); \ 00397 } \ 00398 \ 00399 /*--------------------------------------------------------------------*/ \ 00400 \ 00401 \ 00402 /*--------------------------------------------------------------------*/ \ 00403 void _destroyITKFilterT() \ 00404 { \ 00405 ML_TRACE_IN("template CLASS_NAME##Wrapper::_destroyITKFilterT()"); \ 00406 ML_DELETE(_itkObj); \ 00407 } \ 00408 \ 00409 /*------------------------------------------------------------------------*/ \ 00410 \ 00411 \ 00412 /*------------------------------------------------------------------------*/ \ 00413 DET_IN_REGION(CLASS_NAME, NAMESPACE) \ 00414 \ 00415 /*------------------------------------------------------------------------*/ \ 00416 \ 00417 /*------------------------------------------------------------------------*/ \ 00418 DET_OUT_REGION(CLASS_NAME, NAMESPACE) \ 00419 \ 00420 /*------------------------------------------------------------------------*/ \ 00421 \ 00422 /*------------------------------------------------------------------------*/ \ 00423 MLErrorCode _setFilterParametersT(); \ 00424 \ 00425 /*------------------------------------------------------------------------*/ \ 00426 \ 00427 /*------------------------------------------------------------------------*/ \ 00428 MLErrorCode _getFilterParametersT(); \ 00429 \ 00430 /*------------------------------------------------------------------------*/ \ 00431 \ 00432 /*------------------------------------------------------------------------*/ \ 00433 void calcOutSubImageT(SubImage &outSubImg, \ 00434 int outindex, \ 00435 SubImage *inSubImgs); \ 00436 \ 00437 \ 00438 private: \ 00439 /*--- DO NOT IMPLEMENT MEMBERS IN THIS CLASS --- */ \ 00440 /*--- IT MUST BE LEGAL TO CAST IT TO ITS --- */ \ 00441 /*--- BASE CLASS! --- */ \ 00442 \ 00443 \ 00444 CLASS_NAME##Wrapper(){} \ 00445 \ 00446 ~CLASS_NAME##Wrapper(){} \ 00447 \ 00448 CLASS_NAME##Wrapper(const CLASS_NAME##Wrapper &){} \ 00449 \ 00450 CLASS_NAME##Wrapper operator=(const CLASS_NAME##Wrapper &){} \ 00451 \ 00452 }; \ 00453 \ 00454 /*---------------------------------------------------------------------------*/ \ 00455 /*--- Implement virtual calculateOutputSubImage method to call correctly ---*/ \ 00456 /*--- typed calcOutSubImageT method of template wrapper ---*/ \ 00457 /*---------------------------------------------------------------------------*/ \ 00458 void PROJECT_PREFIX##CLASS_NAME::calculateOutputSubImage(SubImage *outSubImg, \ 00459 int outIndex, \ 00460 SubImage *inSubImgs) \ 00461 { \ 00462 ML_TRACE_IN("calculateOutputSubImage()"); \ 00463 \ 00464 /* Call correct template version of calcOutSubImageT for all types and dims.*/ \ 00465 CREATOR_SWITCH("calculateOutputSubImage()", \ 00466 _ML_CALL_CALCOUTSUBIMAGE, \ 00467 CLASS_NAME, _m_PixelType, _m_Dimension); \ 00468 } \ 00469 \ 00470 /*---------------------------------------------------------------------------*/ \ 00471 \ 00472 \ 00473 \ 00474 \ 00475 \ 00476 \ 00477 \ 00478 \ 00479 /*---------------------------------------------------------------------------*/ \ 00480 void PROJECT_PREFIX##CLASS_NAME::_createITKFilter(MLDataType dataType, MLint dim)\ 00481 { \ 00482 ML_TRACE_IN("_createITKFilter()"); \ 00483 \ 00484 /* Clean up an eventually existing filter. */ \ 00485 _destroyITKFilter(); \ 00486 \ 00487 /* Set data type and dimension of the filter to be created. */ \ 00488 _m_PixelType = dataType; \ 00489 _m_Dimension = dim; \ 00490 \ 00491 ML_TRY \ 00492 { \ 00493 /* Implement ITKImage creation for all data types and all dimensions. */ \ 00494 CREATOR_SWITCH("_createITKFilter()", \ 00495 _ML_CREATE_ITK_FILTER, \ 00496 CLASS_NAME, _m_PixelType, _m_Dimension); \ 00497 } \ 00498 ML_CATCH_BLOCK(...) \ 00499 { \ 00500 ML_ITK_ML_PRINT_ERROR("_createITKFilter()", \ 00501 ML_UNKNOWN_EXCEPTION, "Filter not created.", \ 00502 "_m_PixelType=", _m_PixelType, \ 00503 "_m_Dimension=", _m_Dimension); \ 00504 } \ 00505 } \ 00506 \ 00507 \ 00508 /*---------------------------------------------------------------------------*/ \ 00509 \ 00510 \ 00511 \ 00512 \ 00513 \ 00514 \ 00515 \ 00516 \ 00517 \ 00518 \ 00519 /*---------------------------------------------------------------------------*/ \ 00520 void PROJECT_PREFIX##CLASS_NAME::_destroyITKFilter() \ 00521 { \ 00522 ML_TRACE_IN("_destroyITKFilter()"); \ 00523 /* Destroy only valid objects */ \ 00524 if (!_itkObj || (_m_Dimension < 1) || \ 00525 (ML_INVALID_DATA_TYPE == _m_PixelType)){ return; } \ 00526 ML_TRY \ 00527 { \ 00528 /* Implement ITKImage creation for all data types and all dimensions. */ \ 00529 CREATOR_SWITCH("_destroyITKFilter()", \ 00530 _ML_DESTROY_ITK_FILTER, \ 00531 CLASS_NAME, _m_PixelType, _m_Dimension); \ 00532 } \ 00533 ML_CATCH_BLOCK(...) \ 00534 { \ 00535 ML_ITK_ML_PRINT_ERROR("_destroyITKFilter()", \ 00536 ML_UNKNOWN_EXCEPTION, "Filter destruction failed.", \ 00537 "_m_PixelType=", _m_PixelType, \ 00538 "_m_Dimension=", _m_Dimension); \ 00539 } \ 00540 _itkObj = NULL; \ 00541 } \ 00542 \ 00543 \ 00544 /*----------------------------------------------------------------------------*/ \ 00545 \ 00546 \ 00547 \ 00548 \ 00549 \ 00550 \ 00551 \ 00552 \ 00553 \ 00554 \ 00555 \ 00556 \ 00557 /*----------------------------------------------------------------------------*/ \ 00558 SubImageBox PROJECT_PREFIX##CLASS_NAME::_determineInRegion(MLint inIndex, \ 00559 const SubImageBox &outBox,\ 00560 MLint outIndex, \ 00561 MLint numActiveInputs) \ 00562 { \ 00563 ML_TRACE_IN("_determineInRegion(4 args)"); \ 00564 ML_TRY \ 00565 { \ 00566 /* Implement ITKImage creation for all data types and all dimensions. */ \ 00567 CREATOR_SWITCH("_determineInRegion()", \ 00568 _ML_DETERMINE_ITK_IN_REGION, \ 00569 CLASS_NAME, _m_PixelType, _m_Dimension); \ 00570 } \ 00571 ML_CATCH_BLOCK(...) \ 00572 { \ 00573 ML_ITK_ML_PRINT_ERROR("_determineInRegion()", \ 00574 ML_UNKNOWN_EXCEPTION, "InRegion calculation failed.", \ 00575 "inIndex=", inIndex, \ 00576 "outIndex=", outIndex, \ 00577 "_m_PixelType=", _m_PixelType, \ 00578 "_m_Dimension=", _m_Dimension); \ 00579 } \ 00580 return SubImageBox(); /* Return empty box in case of error */ \ 00581 } \ 00582 \ 00583 \ 00584 /*----------------------------------------------------------------------------*/ \ 00585 \ 00586 \ 00587 \ 00588 \ 00589 \ 00590 \ 00591 \ 00592 /*----------------------------------------------------------------------------*/ \ 00593 SubImageBox PROJECT_PREFIX##CLASS_NAME::_getOutImageRegion(int numImageInputs) \ 00594 { \ 00595 ML_TRACE_IN("_getOutImageRegion()"); \ 00596 ML_TRY \ 00597 { \ 00598 /* Implement ITKImage creation for all data types and all dimensions. */ \ 00599 CREATOR_SWITCH("_getOutImageRegion()", \ 00600 _ML_DETERMINE_ITK_OUT_IMAGE_REGION, \ 00601 CLASS_NAME, _m_PixelType, _m_Dimension); \ 00602 } \ 00603 ML_CATCH_BLOCK(...) \ 00604 { \ 00605 ML_ITK_ML_PRINT_ERROR("_getOutImageRegion()", \ 00606 ML_UNKNOWN_EXCEPTION, "OutRegion calculation failed.", \ 00607 "numImageInputs=", numImageInputs, \ 00608 "_m_PixelType=", _m_PixelType, \ 00609 "_m_Dimension=", _m_Dimension); \ 00610 } \ 00611 return SubImageBox(); /* Return empty box in case of error */ \ 00612 } \ 00613 \ 00614 \ 00615 /*----------------------------------------------------------------------------*/ \ 00616 \ 00617 /*----------------------------------------------------------------------------*/ \ 00618 MLErrorCode PROJECT_PREFIX##CLASS_NAME::_setFilterParameters() \ 00619 { \ 00620 ML_TRACE_IN("_setFilterParameters()"); \ 00621 \ 00622 MLErrorCode retCode = ML_RESULT_OK; \ 00623 \ 00624 ML_TRY \ 00625 { \ 00626 /* Implement ITKImage creation for all data types and all dimensions. */ \ 00627 CREATOR_SWITCH("_setFilterParameters()", \ 00628 _ML_SET_FILTER_PARAMETERS, \ 00629 CLASS_NAME, _m_PixelType, _m_Dimension); \ 00630 } \ 00631 ML_CATCH_BLOCK(...) \ 00632 { \ 00633 ML_PRINT_ERROR("_setFilterParameters())", \ 00634 ML_UNKNOWN_EXCEPTION, "Returning empty box."); \ 00635 retCode = ML_UNKNOWN_EXCEPTION; \ 00636 } \ 00637 \ 00638 return retCode; \ 00639 } \ 00640 \ 00641 \ 00642 /*----------------------------------------------------------------------------*/ \ 00643 \ 00644 /*----------------------------------------------------------------------------*/ \ 00645 MLErrorCode PROJECT_PREFIX##CLASS_NAME::_getFilterParameters() \ 00646 { \ 00647 ML_TRACE_IN("_getFilterParameters()"); \ 00648 \ 00649 MLErrorCode retCode = ML_RESULT_OK; \ 00650 \ 00651 ML_TRY \ 00652 { \ 00653 /* Call the correct template version of get filter function. */ \ 00654 CREATOR_SWITCH("_getFilterParameters()", \ 00655 _ML_GET_FILTER_PARAMETERS, \ 00656 CLASS_NAME, _m_PixelType, _m_Dimension); \ 00657 } \ 00658 ML_CATCH_BLOCK(...) \ 00659 { \ 00660 ML_PRINT_ERROR("_getFilterParameters())", \ 00661 ML_UNKNOWN_EXCEPTION, "Parameter no or only partially read.");\ 00662 retCode = ML_UNKNOWN_EXCEPTION; \ 00663 } \ 00664 \ 00665 return retCode; \ 00666 } \ 00667 \ 00668 00669 #endif // __mlITKSupportMacrosP_H 00670