/**============================================================================
 *
 * \file   change_spacing_filter.hpp
 * \brief  Declarations for the ChangeSpacingFilterClass.
 *
 * \author Leblanc Christophe.
 * \date   18/12/2012
 * \email cleblancad@gmail.com
 *
 * Code inspired from:
 * 'Getting Started with ITK + VTK'
 * L. Ibanez, W. Schroeder, Insight Software Consortium.
 *
 *
 *=============================================================================*/

#ifndef TOMOPROCESS_FILTER_CHANGE_SPACING_FILTER_HPP
#define TOMOPROCESS_FILTER_CHANGE_SPACING_FILTER_HPP

#include "filter.hpp"
#include "detail/change_spacing_filter.hpp"

TOMOPROCESS_OPEN_GLOBAL_NAMESPACE
TOMOPROCESS_OPEN_FILTER_NAMESPACE

/** \class ChangeSpacingFilter
  * \brief Change spacing of an image.
  */
template<class ImageT>
class ChangeSpacingFilter
  : public Filter<
      itk::ChangeSpacingFilter<
        typename ImageT::InputImageType,
	typename ImageT::OutputImageType>,
      ImageT>
{
public:
  /// \brief This class.
  typedef ChangeSpacingFilter 	Self;
  
  /// \brief Parent class.
  typedef Filter<
    itk::ChangeSpacingFilter<
      typename ImageT::InputImageType,
      typename ImageT::OutputImageType>,
    ImageT> SuperClass;
    
  /// \brief Image type.
  typedef ImageT ImageType;
  
  /// \brief Spacing type.
  typedef typename SuperClass::ITKFilterType::SpacingType SpacingType;
  
  /// \brief Sets the parameter.
  /// \param[in] spacing new image spacing.
  virtual void SetParameters(const SpacingType &spacing)
  { this->m_Filter->SetSpacing(spacing); }
};

TOMOPROCESS_CLOSE_FILTER_NAMESPACE
TOMOPROCESS_CLOSE_GLOBAL_NAMESPACE

#endif // TOMOPROCESS_FILTER_CHANGE_SPACING_FILTER_HPP