MeVisLabToolboxReference
|
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