#pragma once
/*=========================================================================

 medInria

 Copyright (c) INRIA 2013 - 2018. All rights reserved.
 See LICENSE.txt for details.
 
  This software is distributed WITHOUT ANY WARRANTY; without even
  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  PURPOSE.

=========================================================================*/

#include "vtkImageAlgorithm.h"

class vtkMatrix4x4;

class vtkVectorOrienter : public vtkImageAlgorithm
{
public:

    enum ProjectionMode
    {
        ProjectOnYZ,
        ProjectOnXZ,
        ProjectOnXY
    };

  vtkTypeMacro(vtkVectorOrienter,vtkImageAlgorithm);
  void PrintSelf(ostream& os, vtkIndent indent);

  // Description:
  // Construct object to extract all of the input data.
  static vtkVectorOrienter *New();

  // Description:
  // Specify i-j-k (min,max) pairs to extract. The resulting structured points
  // dataset can be of any topological dimension (i.e., point, line, image,
  // or volume).
  void SetVOI(const int&,const int&,const int&,const int&,const int&,const int&);

  // Description:
  // Set Orientation Matrix
  void SetOrientationMatrix(vtkMatrix4x4 *matrix){Matrix=matrix;}

  void SetProjection(bool enable){Projection=enable;}
  bool GetProjection(){return Projection;}


protected:
  vtkVectorOrienter();
  ~vtkVectorOrienter() {}


  virtual int RequestData(vtkInformation* request,
                          vtkInformationVector** inputVector,
                          vtkInformationVector* outputVector);



private:
  vtkVectorOrienter(const vtkVectorOrienter&);  // Not implemented.
  void operator=(const vtkVectorOrienter&);  // Not implemented.

  ProjectionMode    ProjMode;

  int               VOI[6];
  vtkMatrix4x4      *Matrix;
  bool              Projection;
};
