00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkFiniteCylinderSpatialFunction_h
00018 #define __itkFiniteCylinderSpatialFunction_h
00019
00020 #include "itkInteriorExteriorSpatialFunction.h"
00021
00022 namespace itk
00023 {
00024
00034 template <unsigned int VDimension = 3,
00035 typename TInput = Point<double, VDimension> >
00036 class ITK_EXPORT FiniteCylinderSpatialFunction
00037 : public InteriorExteriorSpatialFunction<VDimension, TInput>
00038 {
00039 public:
00040
00042 typedef FiniteCylinderSpatialFunction Self;
00043 typedef InteriorExteriorSpatialFunction<VDimension, TInput> Superclass;
00044 typedef SmartPointer<Self> Pointer;
00045 typedef SmartPointer<const Self> ConstPointer;
00046
00048 itkTypeMacro(FiniteCylinderSpatialFunction,InteriorExteriorSpatialFunction);
00049
00051 itkNewMacro(Self);
00052
00054 typedef typename Superclass::InputType InputType;
00055
00057 typedef typename Superclass::OutputType OutputType;
00058
00060 itkGetConstMacro(Center, InputType);
00061 itkSetMacro(Center, InputType);
00063
00065 itkGetConstMacro(AxisLength, double);
00066 itkSetMacro(AxisLength, double);
00068
00070 itkGetConstMacro(Radius, double);
00071 itkSetMacro(Radius, double);
00073
00076 itkGetConstMacro(Orientation, InputType);
00077 itkSetMacro(Orientation, InputType);
00079
00081 OutputType Evaluate(const InputType& position) const;
00082
00083 protected:
00084
00085 FiniteCylinderSpatialFunction();
00086 virtual ~FiniteCylinderSpatialFunction();
00087
00088 void PrintSelf(std::ostream& os, Indent indent) const;
00089
00090 private:
00091
00092 FiniteCylinderSpatialFunction(const Self&);
00093 void operator=(const Self&);
00094
00096 InputType m_Center;
00097
00099 double m_AxisLength;
00100
00102 double m_Radius;
00103
00105 InputType m_Orientation;
00106
00107 };
00108
00109 }
00110
00111
00112
00113 #define ITK_TEMPLATE_FiniteCylinderSpatialFunction(_, EXPORT, x, y) namespace itk { \
00114 _(2(class EXPORT FiniteCylinderSpatialFunction< ITK_TEMPLATE_2 x >)) \
00115 namespace Templates { typedef FiniteCylinderSpatialFunction< ITK_TEMPLATE_2 x > \
00116 FiniteCylinderSpatialFunction##y; } \
00117 }
00118
00119 #if ITK_TEMPLATE_EXPLICIT
00120 # include "Templates/itkFiniteCylinderSpatialFunction+-.h"
00121 #endif
00122
00123 #if ITK_TEMPLATE_TXX
00124 # include "itkFiniteCylinderSpatialFunction.txx"
00125 #endif
00126
00127
00128 #endif
00129