00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __freEuclidianDistancePointMetricController_h
00023 #define __freEuclidianDistancePointMetricController_h
00024
00025 #include "frePointSetToPointSetMetricControllerBase.h"
00026 #include "freIntensityImageMediaController.h"
00027
00028 #include "itkEuclideanDistancePointMetric.h"
00029
00030 namespace FREE
00031 {
00032
00043 freControllerIDMacro(EuclidianDistancePointMetricControllerBase, "EuclidianDistancePointMetricBase");
00044 template <unsigned int VDimension>
00045 class EuclidianDistancePointMetricControllerBase : public PointSetToPointSetMetricControllerBase< itk::EuclideanDistancePointMetric<typename ImageTypes<VDimension>::PointSetType,typename ImageTypes<VDimension>::PointSetType,typename ImageTypes<VDimension>::InternalImageType> >
00046 {
00047 public:
00048 typedef typename ImageTypes<VDimension>::PointSetType PointSetType;
00049 typedef typename ImageTypes<VDimension>::InternalImageType DistanceMapType;
00050
00051 typedef itk::EuclideanDistancePointMetric<PointSetType,PointSetType,DistanceMapType> ComponentType;
00052 typedef PointSetToPointSetMetricControllerBase<ComponentType> Superclass;
00053
00054
00055 itkTypeMacro(EuclidianDistancePointMetricControllerBase, PointSetToPointSetMetricControllerBase);
00056
00057 protected:
00058 EuclidianDistancePointMetricControllerBase()
00059 {
00060
00061 this->UpdateControllerID(ControllerID::EuclidianDistancePointMetricControllerBase);
00062 this->m_Description = "A basis for euclidian distance metrics";
00063 };
00064
00065 void GenerateProfile(CtrlProfile::ControllerProfile& profile,
00066 const SessionComponentCache* pComponentCache,
00067 bool bRegardOldSetup) const
00068 {
00069 Superclass::GenerateProfile(profile,pComponentCache,bRegardOldSetup);
00070
00071
00072 if (VDimension==2)
00073 {
00074 profile.MediaMap().AddMedia("distanceMap",ControllerID::IntensityImage2DMediaController,DASet,2,0);
00075 }
00076 else
00077 {
00078 profile.MediaMap().AddMedia("distanceMap",ControllerID::IntensityImage3DMediaController,DASet,3,0);
00079 }
00080 };
00081
00082 virtual void SetMediaCasted(const MediaID& mediaID,
00083 GenericMediaType* pMedia,
00084 ComponentType* pComponent,
00085 SessionComponentCache* pComponentCache,
00086 SessionInfo* pSessionInfo) const
00087 {
00088 if (mediaID == "distanceMap")
00089 {
00090 DistanceMapType* pMap = 0;
00091 try
00092 {
00093 pMap = dynamic_cast<DistanceMapType*>(pMedia);
00094 }
00095 catchAllNPassMacro("Error while casting distance map. Map seems to have an invalid type.");
00096 if (!pMap) throwCtrlExceptionMacro("","Error while casting distance map. Map seems to have an invalid type.");
00097
00098 pComponent->SetDistanceMap(pMap);
00099 }
00100 else Superclass::SetMediaCasted(mediaID, pMedia, pComponent, pComponentCache, pSessionInfo);
00101 };
00102
00103 };
00104
00113 freControllerIDMacro(EuclidianDistancePoint2DMetricController, "Euclidian Distance Point 2D Metric");
00114 class EuclidianDistancePoint2DMetricController : public EuclidianDistancePointMetricControllerBase<2>
00115 {
00116 public:
00117 itkTypeMacro(EuclidianDistancePoint2DMetricController, EuclidianDistancePointMetricControllerBase);
00118
00119 EuclidianDistancePoint2DMetricController();
00120 };
00121
00130 freControllerIDMacro(EuclidianDistancePoint3DMetricController, "Euclidian Distance Point 3D Metric");
00131 class EuclidianDistancePoint3DMetricController : public EuclidianDistancePointMetricControllerBase<3>
00132 {
00133 public:
00134 itkTypeMacro(EuclidianDistancePoint3DMetricController, EuclidianDistancePointMetricControllerBase);
00135
00136 EuclidianDistancePoint3DMetricController();
00137 };
00138
00139 }
00140
00141 #endif