MeVisLabToolboxReference
FMEwork/ITK/Sources/ITK/MLITK/ITKSupport/mlITKSpecialInputsSupport.h
Go to the documentation of this file.
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