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 itkSpatialFunction_h 19 #define itkSpatialFunction_h 20 21 #include "itkFunctionBase.h" 22 #include "itkPoint.h" 23 24 namespace itk 25 { 26 /** \class SpatialFunction 27 * \brief N-dimensional spatial function class 28 * 29 * itk::SpatialFunction provides the ability to define functions that can 30 * be evaluated at an arbitrary point in space (physical or otherwise). The return 31 * type is specified by the derived class, and the input to the function 32 * is an n-dimensional itk::Point. 33 * 34 * Although itk::ImageFunction and itk::SpatialFunction are quite similar, 35 * itk::SpatialFunction derived classes exist without reference to an Image 36 * type. 37 * 38 * SpatialFunction is templated over output type (the data type 39 * returned by an evaluate() call) and dimensionality. 40 * 41 * \ingroup SpatialFunctions 42 * \ingroup ITKCommon 43 */ 44 template< typename TOutput, 45 unsigned int VImageDimension = 3, 46 typename TInput = Point< double, VImageDimension > > 47 class ITK_TEMPLATE_EXPORT SpatialFunction:public FunctionBase< TInput, TOutput > 48 { 49 public: 50 ITK_DISALLOW_COPY_AND_ASSIGN(SpatialFunction); 51 52 /** Standard class type aliases. */ 53 using Self = SpatialFunction; 54 using Superclass = FunctionBase< TInput, TOutput >; 55 using Pointer = SmartPointer< Self >; 56 using ConstPointer = SmartPointer< const Self >; 57 58 /** Run-time type information (and related methods). */ 59 itkTypeMacro(SpatialFunction, FunctionBase); 60 61 /** Input type for the function. */ 62 using InputType = typename Superclass::InputType; 63 64 /** Output type for the function. */ 65 using OutputType = typename Superclass::OutputType; 66 67 /** Spatial dimension. */ 68 static constexpr unsigned int ImageDimension = VImageDimension; 69 70 /** Evaluate the function at a given position. Remember, position is 71 * represented by an n-d itk::Point object with data type double. */ 72 OutputType Evaluate(const InputType & input) const override = 0; 73 74 protected: 75 SpatialFunction() = default; 76 ~SpatialFunction() override = default; 77 void PrintSelf(std::ostream & os, Indent indent) const override; 78 }; 79 } // end namespace itk 80 81 #ifndef ITK_MANUAL_INSTANTIATION 82 #include "itkSpatialFunction.hxx" 83 #endif 84 85 #endif 86