MeVisLabToolboxReference
FMEwork/ITK/Sources/ITK/MLITK/ITKSupport/mlITKSupport.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //----------------------------------------------------------------------------------
00005 
00010 //----------------------------------------------------------------------------------
00011 #ifndef __mlITKSupport_H
00012 #define __mlITKSupport_H
00013 
00015 // Include dll-specific settings.
00016 #include "mlInitSystemITKSupport.h"
00017 
00019 #ifndef __mlModuleIncludes_H
00020 #include "mlModuleIncludes.h"
00021 #endif
00022 
00024 #ifndef __mlTools_H
00025 #include "mlTools.h"
00026 #endif
00027 
00029 #ifndef __mlITKSupportMacrosP_H
00030 #include "mlITKSupportMacrosP.h"
00031 #endif
00032 
00034 #ifndef __mlITKSupportToolFunctions_H
00035 #include "mlITKSupportToolFunctions.h"
00036 #endif
00037 
00038 
00039 //---------------------------------------------------------------------------
00041 //---------------------------------------------------------------------------
00042 inline void ML_ITK_ML_PRINT_ERROR(const std::string &className,
00043                                   MLErrorCode        errCode,
00044                                   std::string        reason,
00045                                   const std::string &strParam1="",
00046                                   MLint              intParam1=-965386,
00047                                   const std::string &strParam2="",
00048                                   MLint              intParam2=-965386,
00049                                   const std::string &strParam3="",
00050                                   MLint              intParam3=-965386,
00051                                   const std::string &strParam4="",
00052                                   MLint              intParam4=-965386){
00053   reason += strParam1;
00054   if (intParam1 != -965386){
00055     char strBuf[512]="";
00056     MLsnprintf(strBuf, 511, "%I64Ld", intParam1);
00057     reason += strBuf;
00058   }
00059   reason += strParam2;
00060   if (intParam2 != -965386){
00061     char strBuf[512]="";
00062     MLsnprintf(strBuf, 511, "%I64Ld", intParam2);
00063     reason += strBuf;
00064   }
00065   reason += strParam3;
00066   if (intParam3 != -965386){
00067     char strBuf[512]="";
00068     MLsnprintf(strBuf, 511, "%I64Ld", intParam3);
00069     reason += strBuf;
00070   }
00071   reason += strParam4;
00072   if (intParam4 != -965386){
00073     char strBuf[512]="";
00074     MLsnprintf(strBuf, 511, "%I64Ld", intParam4);
00075     reason += strBuf;
00076   }
00077 
00078   ML_PRINT_ERROR(className, errCode, reason);
00079 }
00080 
00081 
00082 //---------------------------------------------------------------------------
00084 //---------------------------------------------------------------------------
00086 #define ML_ITK_WRAPPER_0_2D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00087   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_0, \
00088                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_0,  \
00089                   ML_IMPLEMENT_ALL_ITK_2D_CASES, _ML_ITK_DETERMINE_OUT_REGION_0)
00090   
00092 #define ML_ITK_WRAPPER_1_2D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00093   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00094                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_1,  \
00095                   ML_IMPLEMENT_ALL_ITK_2D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00096   
00098 #define ML_ITK_WRAPPER_2_2D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00099   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00100                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_2,  \
00101                   ML_IMPLEMENT_ALL_ITK_2D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00102   
00104 #define ML_ITK_WRAPPER_3_2D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00105   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00106                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_3,  \
00107                   ML_IMPLEMENT_ALL_ITK_2D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00108 
00109 
00110 
00111 //---------------------------------------------------------------------------
00113 //---------------------------------------------------------------------------
00115 #define ML_ITK_WRAPPER_0_3D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00116   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_0, \
00117                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_0,  \
00118                   ML_IMPLEMENT_ALL_ITK_3D_CASES, _ML_ITK_DETERMINE_OUT_REGION_0)
00119   
00121 #define ML_ITK_WRAPPER_1_3D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00122   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00123                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_1,  \
00124                   ML_IMPLEMENT_ALL_ITK_3D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00125   
00127 #define ML_ITK_WRAPPER_2_3D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00128   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00129                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_2,  \
00130                   ML_IMPLEMENT_ALL_ITK_3D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00131   
00133 #define ML_ITK_WRAPPER_3_3D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00134   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00135                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_3,  \
00136                   ML_IMPLEMENT_ALL_ITK_3D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00137 
00138 
00139 
00140 //---------------------------------------------------------------------------
00142 //---------------------------------------------------------------------------
00144 #define ML_ITK_WRAPPER_0_2D3D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00145   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_0, \
00146                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_0,  \
00147                   ML_IMPLEMENT_ALL_ITK_2D3D_CASES, _ML_ITK_DETERMINE_OUT_REGION_0)
00148   
00150 #define ML_ITK_WRAPPER_1_2D3D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00151   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00152                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_1,  \
00153                   ML_IMPLEMENT_ALL_ITK_2D3D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00154   
00156 #define ML_ITK_WRAPPER_2_2D3D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00157   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00158                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_2,  \
00159                   ML_IMPLEMENT_ALL_ITK_2D3D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00160   
00162 #define ML_ITK_WRAPPER_3_2D3D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00163   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00164                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_3,  \
00165                   ML_IMPLEMENT_ALL_ITK_2D3D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00166 
00167 
00168 //---------------------------------------------------------------------------
00170 //---------------------------------------------------------------------------
00172 #define ML_ITK_WRAPPER_0_6D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00173   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_0, \
00174                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_0,  \
00175                   ML_IMPLEMENT_ALL_ITK_6D_CASES, _ML_ITK_DETERMINE_OUT_REGION_0)
00176   
00178 #define ML_ITK_WRAPPER_1_6D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00179   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00180                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_1,  \
00181                   ML_IMPLEMENT_ALL_ITK_6D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00182   
00184 #define ML_ITK_WRAPPER_2_6D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00185   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00186                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_2,  \
00187                   ML_IMPLEMENT_ALL_ITK_6D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00188   
00190 #define ML_ITK_WRAPPER_3_6D(PROJECT_PREFIX, CLASS_NAME, NAMESPACE) \
00191   _ML_ITK_WRAPPER(PROJECT_PREFIX, CLASS_NAME, NAMESPACE, _ML_ITK_DETERMINE_IN_REGION_N, \
00192                   ML_ITK_DEFAULT_WRAPPER_TYPEDEFS_3,  \
00193                   ML_IMPLEMENT_ALL_ITK_6D_CASES, _ML_ITK_DETERMINE_OUT_REGION_N)
00194 
00195 
00196 
00197 
00198 //---------------------------------------------------------------------------
00201 //---------------------------------------------------------------------------
00202 class TypedObjectHolderBase
00203 {
00204   public:
00206     TypedObjectHolderBase(): _m_Filter(NULL) {}
00207 
00209     virtual ~TypedObjectHolderBase(){}
00210 
00212     inline void* voidFilterPtr(){ return _m_Filter; }
00213     
00214   protected:
00218     void                * _m_Filter;                                                        
00219 };
00220 
00221 //---------------------------------------------------------------------------
00223 //---------------------------------------------------------------------------
00224 template <typename FILTER_TYPE>
00225 class TypedObjectHolderT : public TypedObjectHolderBase
00226 {
00227   public:
00229     typedef typename FILTER_TYPE::Pointer ItkObjPtrType;
00230     
00232     TypedObjectHolderT<FILTER_TYPE>(): TypedObjectHolderBase(), _typedFilterSmartPtr(FILTER_TYPE::New())
00233     { 
00234       // Store the untyped void pointer to the typed itk object in the base class object.
00235       TypedObjectHolderBase::_m_Filter = _typedFilterSmartPtr.GetPointer();
00236     }
00237 
00239     inline ItkObjPtrType ptr(){ return _typedFilterSmartPtr; }
00240     
00241   protected:
00242   
00244     ItkObjPtrType _typedFilterSmartPtr;
00245 };
00246 
00247 
00248 
00249 //---------------------------------------------------------------------------
00252 //---------------------------------------------------------------------------
00253 #define IMPLEMENT_ITK_INTERFACE_H(CLASS_NAME)                                                \
00254                                                                                              \
00255   protected:                                                                                 \
00256                                                                                              \
00257           \
00258           \
00259     virtual void calculateOutputSubImage(SubImage *outSubImg, int outIndex, SubImage *inSubImgs);\
00260                                                                                              \
00261           \
00262           \
00263     TypedObjectHolderBase *_itkObj;                                                          \
00264                                                                                              \
00265           \
00266     MLint        _m_Dimension;                                                               \
00267                                                                                              \
00268           \
00269     MLDataType   _m_PixelType;                                                               \
00270                                                                                              \
00271           \
00272           \
00273     ImageVector       _m_Shift[5];                                                           \
00274                                                                                              \
00275           \
00276           \
00277     bool        _isValidFilter(){ return _itkObj && _itkObj->voidFilterPtr(); }              \
00278                                                                                              \
00279           \
00280           \
00281     void        _createITKFilter(MLDataType dataType, MLint dim);                            \
00282                                                                                              \
00283           \
00284     void        _destroyITKFilter();                                                         \
00285                                                                                              \
00286           \
00287     SubImageBox   _determineInRegion(MLint inIndex, const SubImageBox &outBox, MLint outIndex, MLint numActiveInputs); \
00288                                                                                              \
00289           \
00290           \
00291     SubImageBox   _getOutImageRegion(int numImageInputs);                                    \
00292                                                                                              \
00293           \
00294     MLErrorCode _setFilterParameters();                                                      \
00295                                                                                              \
00296           \
00297     MLErrorCode _getFilterParameters();                                                      \
00298 
00299 
00300 #endif