MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //---------------------------------------------------------------------------------- 00004 00009 //---------------------------------------------------------------------------------- 00010 #ifndef __mlITKSpecialInputsSupport_H 00011 #define __mlITKSpecialInputsSupport_H 00012 00014 #ifndef __mlInitSystemITKSupport_H 00015 #include "mlInitSystemITKSupport.h" 00016 #endif 00017 00018 // Include most ML specific things. 00019 #ifndef __mlModuleIncludes_H 00020 #include "mlModuleIncludes.h" 00021 #endif 00022 00023 #ifndef __mlITKNonScalarSupport_H 00024 #include "mlITKNonScalarSupport.h" 00025 #endif 00026 00027 ML_START_NAMESPACE 00028 00029 00030 //--------------------------------------------------------------------------- 00041 //--------------------------------------------------------------------------- 00042 template <typename ITK_INDATATYPE, unsigned int DIM> 00043 typename itk::ImportImageFilter<ITK_INDATATYPE, DIM>::Pointer getITKSpecialInImg(const SubImage &inSubImg, const PagedImage &inImg) 00044 { 00045 ML_TRACE_IN("template getITKImageFromSubImg()"); 00046 00047 typename itk::ImportImageFilter<ITK_INDATATYPE, DIM>::Pointer itkSpecialImporter; 00048 00049 try{ 00050 // Get data from specialized image input. 00051 itkSpecialImporter = getITKImportImageFromSubImg<ITK_INDATATYPE, DIM>(inSubImg, inImg); 00052 } 00053 catch( itk::ExceptionObject & e ){ 00054 // Send error to ML error handler. 00055 postITKException(e, NULL, ML_ERROR, "Trying to continue without incomplete input(s)."); 00056 } 00057 00058 return itkSpecialImporter; 00059 } 00060 00061 00062 //--------------------------------------------------------------------------- 00081 //--------------------------------------------------------------------------- 00082 #define ImplementAndSetSpecialInputImage(ITK_SPECIAL_IN_IMAGE, IN_IDX, FUNC_CALL, PRE_PARAMS, POST_PARAMS, ML_PIX_TYPE, ITK_PIX_TYPE, DIMENSION) \ 00083 \ 00084 /* Get an ImportImageFilter from special input subimage. */ \ 00085 typename itk::ImportImageFilter<ITK_PIX_TYPE, DIMENSION>::Pointer \ 00086 ITK_SPECIAL_IN_IMAGE##Importer = \ 00087 getITKSpecialInImg<ITK_PIX_TYPE, DIMENSION>(inSubImgs[IN_IDX], *getInputImage(IN_IDX)); \ 00088 \ 00089 /* Get output image from the created importer. */ \ 00090 typedef typename itk::Image<ITK_PIX_TYPE, DIMENSION> ITK_SPECIAL_IN_IMAGE##Type; \ 00091 typename ITK_SPECIAL_IN_IMAGE##Type::Pointer ITK_SPECIAL_IN_IMAGE = \ 00092 ITK_SPECIAL_IN_IMAGE##Importer ? ITK_SPECIAL_IN_IMAGE##Importer->GetOutput() : NULL; \ 00093 \ 00094 /* If the output image is valid the call Set function; otherwise print error. */ \ 00095 if (ITK_SPECIAL_IN_IMAGE){ \ 00096 FUNC_CALL( PRE_PARAMS ITK_SPECIAL_IN_IMAGE POST_PARAMS ); \ 00097 } \ 00098 else { \ 00099 MLPrintAndNotify(ML_ERROR, "ML_","", \ 00100 "Could not create special itk input image","","Not setting special image", \ 00101 __FILE__, __LINE__, ML_BAD_PARAMETER); \ 00102 } \ 00103 00104 //--------------------------------------------------------------------------- 00115 //--------------------------------------------------------------------------- 00116 #define ImplementAndSetSpecialInputBase(ITK_SPECIAL_IN_IMAGE, IN_IDX, FUNC_CALL, MEMBER_NAME, DIMENSION) \ 00117 \ 00118 /* Call the set function of the itk object with the pointer from the base object wrapper. */ \ 00119 FUNC_CALL(MEMBER_NAME.getWrappedInputObject(MEMBER_NAME.getTypeId())); \ 00120 \ 00121 00122 00123 ML_END_NAMESPACE 00124 00125 #endif 00126