1 /*========================================================================= 2 * 3 * Copyright Insight Software Consortium 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0.txt 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 *=========================================================================*/ 18 #ifndef itkSphereSpatialFunction_h 19 #define itkSphereSpatialFunction_h 20 21 #include "itkInteriorExteriorSpatialFunction.h" 22 23 namespace itk 24 { 25 /** \class SphereSpatialFunction 26 * \brief Spatial function implementation of a sphere 27 * 28 * Implements a function that returns 0 for points inside or on the surface 29 * of a sphere, 1 for points outside the sphere 30 * 31 * \ingroup SpatialFunctions 32 * \ingroup ITKCommon 33 */ 34 template< unsigned int VImageDimension = 3, typename TInput = Point< double, VImageDimension > > 35 class ITK_TEMPLATE_EXPORT SphereSpatialFunction: 36 public InteriorExteriorSpatialFunction< VImageDimension, TInput > 37 { 38 public: 39 ITK_DISALLOW_COPY_AND_ASSIGN(SphereSpatialFunction); 40 41 /** Standard class type aliases. */ 42 using Self = SphereSpatialFunction< VImageDimension, TInput >; 43 using Superclass = InteriorExteriorSpatialFunction< VImageDimension, TInput >; 44 using Pointer = SmartPointer< Self >; 45 using ConstPointer = SmartPointer< const Self >; 46 47 /** Method for creation through the object factory. */ 48 itkNewMacro(Self); 49 50 /** Run-time type information (and related methods). */ 51 itkTypeMacro(SphereSpatialFunction, InteriorExteriorSpatialFunction); 52 53 /** Input type for the function. */ 54 using InputType = typename Superclass::InputType; 55 56 /** Output type for the function. */ 57 using OutputType = typename Superclass::OutputType; 58 59 /** Evaluates the function at a given position */ 60 OutputType Evaluate(const InputType & position) const override; 61 62 /** Get and set the center of the sphere. */ 63 itkGetConstMacro(Center, InputType); 64 itkSetMacro(Center, InputType); 65 66 /** Get and set the radius of the sphere */ 67 itkGetConstMacro(Radius, double); 68 itkSetMacro(Radius, double); 69 70 protected: 71 SphereSpatialFunction(); 72 ~SphereSpatialFunction() override = default; 73 void PrintSelf(std::ostream & os, Indent indent) const override; 74 75 private: 76 /** The center of the sphere (of the same type as Input). */ 77 InputType m_Center; 78 79 /** The radius of the sphere. */ 80 double m_Radius; 81 }; 82 } // end namespace itk 83 84 #ifndef ITK_MANUAL_INSTANTIATION 85 #include "itkSphereSpatialFunction.hxx" 86 #endif 87 88 #endif 89