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 itkGetMacro(Center, InputType);
00061 itkSetMacro(Center, InputType);
00062
00064 itkGetMacro(AxisLength, double);
00065 itkSetMacro(AxisLength, double);
00066
00068 itkGetMacro(Radius, double);
00069 itkSetMacro(Radius, double);
00070
00073 itkGetMacro(Orientation, InputType);
00074 itkSetMacro(Orientation, InputType);
00075
00077 OutputType Evaluate(const InputType& position) const;
00078
00079 protected:
00080
00081 FiniteCylinderSpatialFunction();
00082 virtual ~FiniteCylinderSpatialFunction();
00083
00084 void PrintSelf(std::ostream& os, Indent indent) const;
00085
00086 private:
00087
00088 FiniteCylinderSpatialFunction(const Self&);
00089 void operator=(const Self&);
00090
00092 InputType m_Center;
00093
00095 double m_AxisLength;
00096
00098 double m_Radius;
00099
00101 InputType m_Orientation;
00102
00103 };
00104
00105 }
00106
00107 #ifndef ITK_MANUAL_INSTANTIATION
00108 #include "itkFiniteCylinderSpatialFunction.txx"
00109 #endif
00110
00111 #endif