SourceTransformTranslate.h

Go to the documentation of this file.
00001 // $Id$
00002 
00003 #ifndef __SOURCETRANSFORMTRANSLATE_H__
00004 #define __SOURCETRANSFORMTRANSLATE_H__
00005 
00006 #include "SourceGenerics.h"
00007 #include <math.h>
00008 
00009 //============================================================================
00010 //============================================================================
00011 template<class DATA, int DIMENSIONALITY, class PRECISION, class SOURCE>
00012 class SourceTransformTranslateBaseOf: public SourceTransformOf<DATA,
00013     DIMENSIONALITY, PRECISION, SOURCE>
00014 {
00015 protected:
00016   typedef PointOf<DIMENSIONALITY, Real> POINT;
00017   POINT m_dpt;
00018 
00019 public:
00020   SourceTransformTranslateBaseOf() :
00021     SourceTransformOf<DATA, DIMENSIONALITY, PRECISION, SOURCE> (), m_dpt(0.)
00022   {
00023   }
00024 
00025   virtual String Describe() const
00026   {
00027     return (_LINE + SerializationId() + LINE_ + (_INDENT + "translation by: "
00028         + m_dpt.Describe() + LINE_) + this->DescribeCommon());
00029   }
00030 
00031   virtual void RegisterParameters(RegistryOfParameters& reg)
00032   {
00033     RegisterPointAsParameter(reg, m_dpt);
00034   }
00035 
00036   POINT& Translate()
00037   {
00038     return m_dpt;
00039   }
00040 
00041   const POINT& Translate() const
00042   {
00043     return m_dpt;
00044   }
00045 
00046   static String SerializationId()
00047   {
00048     return String("SourceTransformTranslate(") + DIMENSIONALITY + "D)";
00049   }
00050 
00051   void SerializeSelf(Stream &st) const
00052   {
00053     ::Serialize(st, m_dpt);
00054   }
00055 
00056   void DeserializeSelf(Stream &st)
00057   {
00058     ::Deserialize(st, m_dpt);
00059   }
00060 };
00061 
00062 //============================================================================
00063 //============================================================================
00064 template<class DATA, int DIMENSIONALITY, class PRECISION, class SOURCE>
00065 class SourceTransformTranslateOf: public SourceTransformTranslateBaseOf<DATA,
00066     DIMENSIONALITY, PRECISION, SOURCE>
00067 {
00068   SourceTransformTranslateOf() :
00069     SourceTransformTranslateBaseOf<DATA, DIMENSIONALITY, PRECISION, SOURCE> ()
00070   {
00071   }
00072   SourceTransformTranslateOf(SOURCE* psource) :
00073     SourceTransformTranslateBaseOf<DATA, DIMENSIONALITY, PRECISION, SOURCE> (
00074         psource)
00075   {
00076   }
00077 
00078   // TODO
00079 };
00080 
00081 //============================================================================
00082 //============================================================================
00083 template<class DATA, class PRECISION, class SOURCE>
00084 class SourceTransformTranslateOf<DATA, 2, PRECISION, SOURCE> : public SourceTransformTranslateBaseOf<
00085     DATA, 2, PRECISION, SOURCE>
00086 {
00087 public:
00088 SOURCE_ACTUALS_2D  ;
00089 
00090   inline void Get(DATA& dataOut, const PRECISION &rX, const PRECISION &rY) const
00091     {
00092     ::Get(
00093         *(this->m_psource),
00094         dataOut,
00095         (rX-this->m_dpt.X()*this->m_ptSize.X()),
00096         (rY-this->m_dpt.Y()*this->m_ptSize.Y())
00097     );
00098     }
00099 
00100   inline void Set(const PRECISION &rX, const PRECISION &rY, const DATA& data)
00101     {
00102     ::Set(
00103         *(this->m_psource),
00104         (rX-this->m_dpt.X()*this->m_ptSize.X()),
00105         (rY-this->m_dpt.Y()*this->m_ptSize.Y()),
00106         data
00107     );
00108     }
00109 
00110   };
00111 
00112 //============================================================================
00113 // 3d
00114 //============================================================================
00115 //============================================================================
00116 //============================================================================
00117 template<class DATA, class PRECISION, class SOURCE>
00118 class SourceTransformTranslateOf<DATA, 3, PRECISION, SOURCE> : public SourceTransformTranslateBaseOf<
00119     DATA, 3, PRECISION, SOURCE>
00120 {
00121 public:
00122 SOURCE_ACTUALS_3D  ;
00123 
00124   inline void Get(DATA& dataOut, const PRECISION &rX, const PRECISION &rY, const PRECISION &rZ) const
00125     {
00126     ::Get(
00127         *(this->m_psource),
00128         dataOut,
00129         (rX-this->m_dpt.X()*this->m_ptSize.X()),
00130         (rY-this->m_dpt.Y()*this->m_ptSize.Y()),
00131         (rZ-this->m_dpt.Z()*this->m_ptSize.Z())
00132     );
00133     }
00134 
00135   inline void Set(const PRECISION &rX, const PRECISION &rY, const PRECISION &rZ, const DATA& data)
00136     {
00137     ::Set(
00138         *(this->m_psource),
00139         (rX-this->m_dpt.X()*this->m_ptSize.X()),
00140         (rY-this->m_dpt.Y()*this->m_ptSize.Y()),
00141         (rZ-this->m_dpt.Z()*this->m_ptSize.Z()),
00142         data
00143     );
00144     }
00145   };
00146 
00147 //============================================================================
00148 // translate assistant
00149 //============================================================================
00150 MAKE_ASSISTANT(
00151     Translate,
00152     SourceTransformTranslateOf,
00153       {psrcOut->Translate()=pt;},
00154     const PointOf<TypeOfDimensionality(SOURCE) COMMA TypeOfPrecision(SOURCE)> &pt,
00155 );
00156 
00157 #endif // __SOURCETRANSFORMTRANSLATE_H__

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1