/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkFlexibleVectorCastImageFilter.h,v $ Language: C++ Date: $Date: 2008-10-17 16:30:53 $ Version: $Revision: 1.16 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkFlexibleVectorCastImageFilter_h #define __itkFlexibleVectorCastImageFilter_h #include "itkUnaryFunctorImageFilter.h" #include "itkNumericTraitsFixedArrayPixel.h" namespace itk { /** \class FlexibleVectorCastImageFilter * * \brief Casts input vector pixels to output vector pixel type. * * This filter is templated over the input image type and * output image type. * * The filter expect both images to have the same number of dimensions, * and that both the input and output have itk::Vector pixel types * of the same VectorDimension. * * \sa Vector * * \ingroup IntensityImageFilters Multithreaded */ namespace Functor { template< class TInput, class TOutput> class FlexibleVectorCast { public: FlexibleVectorCast() {} ~FlexibleVectorCast() {} bool operator!=( const FlexibleVectorCast & ) const { return false; } bool operator==( const FlexibleVectorCast & other ) const { return !(*this != other); } inline TOutput operator()( const TInput & A ) const { typedef typename TOutput::ValueType OutputValueType; TOutput value; unsigned int k; for( k = 0; k < TOutput::Dimension && k < TInput::Dimension; k++ ) { value[k] = static_cast( A[k] ); } for (; k < TOutput::Dimension; k++) value[k] = 0; return value; } }; } template > class ITK_EXPORT FlexibleVectorCastImageFilter : public UnaryFunctorImageFilter > { public: /** Standard class typedefs. */ typedef FlexibleVectorCastImageFilter Self; typedef UnaryFunctorImageFilter< TInputImage,TOutputImage, Functor::FlexibleVectorCast< typename TInputImage::PixelType, typename TOutputImage::PixelType> > Superclass; typedef SmartPointer Pointer; typedef SmartPointer ConstPointer; /** Method for creation through the object factory. */ itkNewMacro(Self); /** Runtime information support. */ itkTypeMacro(FlexibleVectorCastImageFilter, UnaryFunctorImageFilter); protected: FlexibleVectorCastImageFilter() {} virtual ~FlexibleVectorCastImageFilter() {} private: FlexibleVectorCastImageFilter(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented }; } // end namespace itk #endif