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 itkImageVectorOptimizerParametersHelper_h 19 #define itkImageVectorOptimizerParametersHelper_h 20 21 #include "itkOptimizerParametersHelper.h" 22 #include "itkImage.h" 23 24 namespace itk 25 { 26 /** \class ImageVectorOptimizerParametersHelper 27 * \brief Class to hold and manage parameters of type 28 * Image<Vector<...>,...>, used in Transforms, etc. 29 * 30 * \sa OptimizerParametersHelper 31 * \ingroup ITKCommon 32 */ 33 34 /* Can we template of Image type instead, but require that Image be of type 35 * Image< Vector< TValue, NVectorDimension >, VImageDimension > ? */ 36 template< typename TValue, 37 unsigned int NVectorDimension, 38 unsigned int VImageDimension > 39 class ITK_TEMPLATE_EXPORT ImageVectorOptimizerParametersHelper 40 : public OptimizerParametersHelper< TValue > 41 { 42 public: 43 44 /** The element type stored at each location in the Array. */ 45 using ValueType = TValue; 46 using Self = ImageVectorOptimizerParametersHelper; 47 using Superclass = OptimizerParametersHelper< TValue >; 48 49 /** Image type that this class expects. */ 50 using ParameterImageType = Image< Vector<TValue, NVectorDimension>, 51 VImageDimension >; 52 using ParameterImagePointer = typename ParameterImageType::Pointer; 53 54 /** Type of the common data object used in OptimizerParameters */ 55 using CommonContainerType = typename Superclass::CommonContainerType; 56 57 /** Default constructor. */ 58 ImageVectorOptimizerParametersHelper(); 59 60 /** Set a new data pointer for *both* the Array and parameter image, 61 * pointing both to a different memory block. 62 * The size of the new memroy block must be the same as current size of 63 * Array and the parameter image's buffer, in elements of TValue. 64 * Memory must be managed by caller afterwards. */ 65 void MoveDataPointer(CommonContainerType* container, 66 TValue * pointer ) override; 67 68 /** Set an image that holds the parameter data. \c container is a pointer 69 * of type itkArray to the object to which this helper is assigned. 70 *\c container will be pointed to the image data buffer, and set not to 71 * manage memory, so the image still manages its memory. 72 * A dynamic cast is performed on \c object to make sure its of proper type. 73 * Generally this will be called from 74 * OptimizerParameters::SetParameterObject. */ 75 void SetParametersObject(CommonContainerType * container, 76 LightObject * ) override; 77 78 ~ImageVectorOptimizerParametersHelper() override = default; 79 80 private: 81 /** The parameter image used by the class */ 82 ParameterImagePointer m_ParameterImage; 83 84 }; 85 86 }//namespace itk 87 88 #ifndef ITK_MANUAL_INSTANTIATION 89 #include "itkImageVectorOptimizerParametersHelper.hxx" 90 #endif 91 92 #endif 93