You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
5.1 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkImageRectilinearWipe.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/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 notice for more information.
=========================================================================*/
/**
* @class vtkImageRectilinearWipe
* @brief make a rectilinear combination of two images.
*
* vtkImageRectilinearWipe makes a rectilinear combination of two
* images. The two input images must correspond in size, scalar type and
* number of components.
* The resulting image has four possible configurations
* called:
* Quad - alternate input 0 and input 1 horizontally and
* vertically. Select this with SetWipeModeToQuad. The Position
* specifies the location of the quad intersection.
* Corner - 3 of one input and 1 of the other. Select the location of
* input 0 with with SetWipeModeToLowerLeft, SetWipeModeToLowerRight,
* SetWipeModeToUpperLeft and SetWipeModeToUpperRight. The Position
* selects the location of the corner.
* Horizontal - alternate input 0 and input 1 with a vertical
* split. Select this with SetWipeModeToHorizontal. Position[0]
* specifies the location of the vertical transition between input 0
* and input 1.
* Vertical - alternate input 0 and input 1 with a horizontal
* split. Only the y The intersection point of the rectilinear points
* is controlled with the Point ivar.
*
* @par Thanks:
* This work was supported by PHS Research Grant No. 1 P41 RR13218-01
* from the National Center for Research Resources.
*
* @sa
* vtkImageCheckerboard
*/
#ifndef vtkImageRectilinearWipe_h
#define vtkImageRectilinearWipe_h
#include "vtkImagingHybridModule.h" // For export macro
#include "vtkThreadedImageAlgorithm.h"
#define VTK_WIPE_QUAD 0
#define VTK_WIPE_HORIZONTAL 1
#define VTK_WIPE_VERTICAL 2
#define VTK_WIPE_LOWER_LEFT 3
#define VTK_WIPE_LOWER_RIGHT 4
#define VTK_WIPE_UPPER_LEFT 5
#define VTK_WIPE_UPPER_RIGHT 6
class VTKIMAGINGHYBRID_EXPORT vtkImageRectilinearWipe : public vtkThreadedImageAlgorithm
{
public:
static vtkImageRectilinearWipe* New();
vtkTypeMacro(vtkImageRectilinearWipe, vtkThreadedImageAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@{
/**
* Set/Get the location of the image transition. Note that position is
* specified in pixels.
*/
vtkSetVector2Macro(Position, int);
vtkGetVectorMacro(Position, int, 2);
//@}
//@{
/**
* Set/Get the location of the wipe axes. The default is X,Y (ie vector
* values of 0 and 1).
*/
vtkSetVector2Macro(Axis, int);
vtkGetVectorMacro(Axis, int, 2);
//@}
/**
* Set the two inputs to this filter.
*/
virtual void SetInput1Data(vtkDataObject* in) { this->SetInputData(0, in); }
virtual void SetInput2Data(vtkDataObject* in) { this->SetInputData(1, in); }
//@{
/**
* Specify the wipe mode. This mode determnis how input 0 and input
* 1 are combined to produce the output. Each mode uses one or both
* of the values stored in Position.
* SetWipeToQuad - alternate input 0 and input 1 horizontally and
* vertically. The Position specifies the location of the quad
* intersection.
* SetWipeToLowerLeft{LowerRight,UpperLeft.UpperRight} - 3 of one
* input and 1 of the other. Select the location of input 0 to the
* LowerLeft{LowerRight,UpperLeft,UpperRight}. Position
* selects the location of the corner.
* SetWipeToHorizontal - alternate input 0 and input 1 with a vertical
* split. Position[0] specifies the location of the vertical
* transition between input 0 and input 1.
* SetWipeToVertical - alternate input 0 and input 1 with a
* horizontal split. Position[1] specifies the location of the
* horizontal transition between input 0 and input 1.
*/
vtkSetClampMacro(Wipe, int, VTK_WIPE_QUAD, VTK_WIPE_UPPER_RIGHT);
vtkGetMacro(Wipe, int);
void SetWipeToQuad() { this->SetWipe(VTK_WIPE_QUAD); }
void SetWipeToHorizontal() { this->SetWipe(VTK_WIPE_HORIZONTAL); }
void SetWipeToVertical() { this->SetWipe(VTK_WIPE_VERTICAL); }
void SetWipeToLowerLeft() { this->SetWipe(VTK_WIPE_LOWER_LEFT); }
void SetWipeToLowerRight() { this->SetWipe(VTK_WIPE_LOWER_RIGHT); }
void SetWipeToUpperLeft() { this->SetWipe(VTK_WIPE_UPPER_LEFT); }
void SetWipeToUpperRight() { this->SetWipe(VTK_WIPE_UPPER_RIGHT); }
//@}
protected:
vtkImageRectilinearWipe();
~vtkImageRectilinearWipe() override {}
void ThreadedRequestData(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData,
int extent[6], int threadId) override;
int Position[2];
int Wipe;
int Axis[2];
private:
vtkImageRectilinearWipe(const vtkImageRectilinearWipe&) = delete;
void operator=(const vtkImageRectilinearWipe&) = delete;
};
#endif