freEuclidianDistancePointMetricController.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   F.R.E.E. - flexible registration evaluation engine
00004   Version:   v.1.0.0
00005   Date:      $Date: 2006/09/01 12:00:00 $
00006   Module:    $RCSfile: freEuclidianDistancePointMetricController.h,v $
00007   Language:  C++
00008 
00009 
00010 
00011   Copyright (c) 2007 Ralf o Floca (Department of Medical Informatics,
00012   Institute for Medical Biometry and Informatics, University of Heidelberg,
00013   Germany). All rights reserved.
00014   See FREECopyright.txt or http://www.mi.med.uni-hd.de/free/copyright.htm
00015   for details.
00016 
00017      This software is distributed WITHOUT ANY WARRANTY; without even 
00018      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00019      PURPOSE.  See the above copyright notices for more information.
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                 //Profile settings
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     //Media
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 } //end of namespace FREE
00140 
00141 #endif

Generated at Sat Oct 13 15:53:48 2007 for f.r.e.e. - Flexible Registration and Evaluation Engine by doxygen 1.5.3 written by Dimitri van Heesch, © 1997-2000