00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "freMetricCtrlrs.h"
00023
00024 #include "freMeanSquaresMetricController.h"
00025 #include "freNormalizedCorrelationMetricController.h"
00026 #include "freMutualInformationMetricController.h"
00027 #include "freMattesMutualInformationMetricController.h"
00028 #include "freMutualInformationHistogramMetricController.h"
00029 #include "freMeanReciprocalSquaresMetricController.h"
00030 #include "freDifferenceEnergyMetricController.h"
00031 #include "freDifferenceEntropyMetricController.h"
00032 #include "freEuclidianDistancePointMetricController.h"
00033
00034 namespace FREE
00035 {
00036
00037 #ifndef __FREE_DISABLE_DLL_INTERFACE
00038
00039 namespace
00040 {
00041
00042 extern "C"
00043 #ifdef _WIN32
00044 __declspec( dllexport )
00045 #endif
00046 void FREEGetControllerList(int& iControllerCount, const char**& pControllerIDs)
00047 {
00048 ::FREE::MetricCtrlrs::GetControllerList(iControllerCount, pControllerIDs);
00049 };
00050
00051 extern "C"
00052 #ifdef _WIN32
00053 __declspec( dllexport )
00054 #endif
00055 GenericComponentController* FREECreateController(const char* pControllerID)
00056 {
00057 return ::FREE::MetricCtrlrs::CreateController(pControllerID);
00058 };
00059
00060 extern "C"
00061 #ifdef _WIN32
00062 __declspec( dllexport )
00063 #endif
00064 bool FREEDeleteController (GenericComponentController* pController)
00065 {
00066 if (pController)
00067 {
00068 delete pController;
00069 }
00070 return true;
00071 };
00072
00073 extern "C"
00074 #ifdef _WIN32
00075 __declspec( dllexport )
00076 #endif
00077 void FREELinkCentralAsDedicated (::FREE::ControllerCentral::ControllerListType* pDedicatedControllerList,
00078 ::FREE::ControllerCentral::LibraryHandleListType* pDedicatedLibraryHandles,
00079 ::FREE::ProgressEventBase* pfnOnControl, ::FREE::ProgressEventBase* pfnOnBuild,
00080 ::FREE::ControllerCentral::CtrlCallbackListType* pCtrlCallbackList,
00081 ::FREE::ControllerCentral::CtrlProgressListType* pCtrlProgressList,
00082 ::itk::MutexLock* pGlobalCallbackMutex,
00083 ::itk::MutexLock* pGlobalProgressMutex)
00084 {
00085 ::FREE::ControllerCentral::LinkControllerCentralAsDedicated(pDedicatedControllerList,pDedicatedLibraryHandles,pfnOnControl,pfnOnBuild,pCtrlCallbackList,pCtrlProgressList,pGlobalCallbackMutex,pGlobalProgressMutex);
00086 }
00087
00088
00089 }
00090
00091 #endif // __FREE_DISABLE_DLL_INTERFACE
00092
00096
00097
00098 void MetricCtrlrs::RegisterAllControllers(ControllerCentral* pCentral)
00099 {
00100 int iCount = 0;
00101 const char** pControllerIDs = 0;
00102
00103 MetricCtrlrs::GetControllerList(iCount,pControllerIDs);
00104
00105 for (int iPos = 0; iPos < iCount; iPos++)
00106 {
00107 pCentral->RegisterController(MetricCtrlrs::CreateController(pControllerIDs[iPos]));
00108 }
00109
00110 if (pControllerIDs)
00111 delete pControllerIDs;
00112 };
00113
00114 void MetricCtrlrs::GetControllerList(int& iControllerCount, const char**& pControllerIDs)
00115 {
00116 typedef std::vector<const char*> ControllerListType;
00117 ControllerListType internalControllerList;
00118
00119
00120 internalControllerList.push_back(ControllerID::MeanSquares2DMetricController);
00121 internalControllerList.push_back(ControllerID::NormalizedCorrelation2DMetricController);
00122 internalControllerList.push_back(ControllerID::MutualInformation2DMetricController);
00123 internalControllerList.push_back(ControllerID::MattesMutualInformation2DMetricController);
00124 internalControllerList.push_back(ControllerID::MutualInformationHistogram2DMetricController);
00125 internalControllerList.push_back(ControllerID::MeanReciprocalSquares2DMetricController);
00126 internalControllerList.push_back(ControllerID::DifferenceEnergy2DMetricController);
00127 internalControllerList.push_back(ControllerID::DifferenceEntropy2DMetricController);
00128 internalControllerList.push_back(ControllerID::EuclidianDistancePoint2DMetricController);
00129
00130 internalControllerList.push_back(ControllerID::MeanSquares3DMetricController);
00131 internalControllerList.push_back(ControllerID::NormalizedCorrelation3DMetricController);
00132 internalControllerList.push_back(ControllerID::MutualInformation3DMetricController);
00133 internalControllerList.push_back(ControllerID::MattesMutualInformation3DMetricController);
00134 internalControllerList.push_back(ControllerID::MutualInformationHistogram3DMetricController);
00135 internalControllerList.push_back(ControllerID::MeanReciprocalSquares3DMetricController);
00136 internalControllerList.push_back(ControllerID::DifferenceEnergy3DMetricController);
00137 internalControllerList.push_back(ControllerID::DifferenceEntropy3DMetricController);
00138 internalControllerList.push_back(ControllerID::EuclidianDistancePoint3DMetricController);
00139
00140
00141 iControllerCount = internalControllerList.size();
00142 pControllerIDs = new const char*[iControllerCount];
00143 for (unsigned int iPos = 0; iPos<iControllerCount; iPos++)
00144 {
00145 pControllerIDs[iPos] = internalControllerList.at(iPos);
00146 }
00147 };
00148
00149 GenericComponentController* MetricCtrlrs::CreateController(const char* pControllerID)
00150 {
00151 std::string sControllerID(pControllerID);
00152
00153
00154 if (sControllerID == ControllerID::MeanSquares2DMetricController)
00155 return(GenericComponentController*)new MeanSquares2DMetricController;
00156 if (sControllerID == ControllerID::NormalizedCorrelation2DMetricController)
00157 return(GenericComponentController*)new NormalizedCorrelation2DMetricController;
00158 if (sControllerID == ControllerID::MutualInformation2DMetricController)
00159 return(GenericComponentController*)new MutualInformation2DMetricController;
00160 if (sControllerID == ControllerID::MattesMutualInformation2DMetricController)
00161 return(GenericComponentController*)new MattesMutualInformation2DMetricController;
00162 if (sControllerID == ControllerID::MutualInformationHistogram2DMetricController)
00163 return(GenericComponentController*)new MutualInformationHistogram2DMetricController;
00164 if (sControllerID == ControllerID::MeanReciprocalSquares2DMetricController)
00165 return(GenericComponentController*)new MeanReciprocalSquares2DMetricController;
00166 if (sControllerID == ControllerID::DifferenceEnergy2DMetricController)
00167 return(GenericComponentController*)new DifferenceEnergy2DMetricController;
00168 if (sControllerID == ControllerID::DifferenceEntropy2DMetricController)
00169 return(GenericComponentController*)new DifferenceEntropy2DMetricController;
00170 if (sControllerID == ControllerID::EuclidianDistancePoint2DMetricController)
00171 return(GenericComponentController*)new EuclidianDistancePoint2DMetricController;
00172
00173 if (sControllerID == ControllerID::MeanSquares3DMetricController)
00174 return(GenericComponentController*)new MeanSquares3DMetricController;
00175 if (sControllerID == ControllerID::NormalizedCorrelation3DMetricController)
00176 return(GenericComponentController*)new NormalizedCorrelation3DMetricController;
00177 if (sControllerID == ControllerID::MutualInformation3DMetricController)
00178 return(GenericComponentController*)new MutualInformation3DMetricController;
00179 if (sControllerID == ControllerID::MattesMutualInformation3DMetricController)
00180 return(GenericComponentController*)new MattesMutualInformation3DMetricController;
00181 if (sControllerID == ControllerID::MutualInformationHistogram3DMetricController)
00182 return(GenericComponentController*)new MutualInformationHistogram3DMetricController;
00183 if (sControllerID == ControllerID::MeanReciprocalSquares3DMetricController)
00184 return(GenericComponentController*)new MeanReciprocalSquares3DMetricController;
00185 if (sControllerID == ControllerID::DifferenceEnergy3DMetricController)
00186 return(GenericComponentController*)new DifferenceEnergy3DMetricController;
00187 if (sControllerID == ControllerID::DifferenceEntropy3DMetricController)
00188 return(GenericComponentController*)new DifferenceEntropy3DMetricController;
00189 if (sControllerID == ControllerID::EuclidianDistancePoint3DMetricController)
00190 return(GenericComponentController*)new EuclidianDistancePoint3DMetricController;
00191
00192 return NULL;
00193 };
00194
00195
00196 }