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.
nmWTAI-Platform/3rd/VTK7.1/include/vtkImageSlab.h

153 lines
4.8 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkImageSlab.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 vtkImageSlab
* @brief combine image slices to form a slab image
*
* vtkImageSlab will combine all of the slices of an image to
* create a single slice. The slices can be combined with the
* following operations: averaging, summation, minimum, maximum.
* If you require an arbitrary angle of projection, you can use
* vtkImageReslice.
* @par Thanks:
* Thanks to David Gobbi for contributing this class to VTK.
*/
#ifndef vtkImageSlab_h
#define vtkImageSlab_h
#include "vtkImagingGeneralModule.h" // For export macro
#include "vtkThreadedImageAlgorithm.h"
class VTKIMAGINGGENERAL_EXPORT vtkImageSlab : public vtkThreadedImageAlgorithm
{
public:
static vtkImageSlab *New();
vtkTypeMacro(vtkImageSlab, vtkThreadedImageAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
//@{
/**
* Set the slice direction: zero for x, 1 for y, 2 for z.
* The default is the Z direction.
*/
vtkSetClampMacro(Orientation, int, 0, 2);
void SetOrientationToX() {
this->SetOrientation(0); };
void SetOrientationToY() {
this->SetOrientation(1); };
void SetOrientationToZ() {
this->SetOrientation(2); };
vtkGetMacro(Orientation, int);
//@}
//@{
/**
* Set the range of slices to combine. The default is to project
* through all slices.
*/
vtkSetVector2Macro(SliceRange, int);
vtkGetVector2Macro(SliceRange, int);
//@}
//@{
/**
* Set the operation to use when combining slices. The choices are
* "Mean", "Sum", "Min", "Max". The default is "Mean".
*/
vtkSetClampMacro(Operation, int, VTK_IMAGE_SLAB_MIN, VTK_IMAGE_SLAB_SUM);
void SetOperationToMin() {
this->SetOperation(VTK_IMAGE_SLAB_MIN); };
void SetOperationToMax() {
this->SetOperation(VTK_IMAGE_SLAB_MAX); };
void SetOperationToMean() {
this->SetOperation(VTK_IMAGE_SLAB_MEAN); };
void SetOperationToSum() {
this->SetOperation(VTK_IMAGE_SLAB_SUM); };
vtkGetMacro(Operation, int);
const char *GetOperationAsString();
//@}
//@{
/**
* Use trapezoid integration for slab computation. This weighs the
* first and last slices by half when doing sum and mean, as compared
* to the default midpoint integration that weighs all slices equally.
* It is off by default.
*/
vtkSetMacro(TrapezoidIntegration, int);
vtkBooleanMacro(TrapezoidIntegration, int);
vtkGetMacro(TrapezoidIntegration, int);
//@}
//@{
/**
* Turn on multi-slice output. Each slice of the output will be
* a projection through the specified range of input slices, e.g.
* if the SliceRange is [0,3] then slice 'i' of the output will
* be a projection through slices 'i' through '3+i' of the input.
* This flag is off by default.
*/
vtkSetMacro(MultiSliceOutput, int);
vtkBooleanMacro(MultiSliceOutput, int);
vtkGetMacro(MultiSliceOutput, int);
//@}
//@{
/**
* Set the output scalar type to float or double, to avoid
* potential overflow when doing a summation operation.
* The default is to use the scalar type of the input data,
* and clamp the output to the range of the input scalar type.
*/
void SetOutputScalarTypeToFloat() {
this->SetOutputScalarType(VTK_FLOAT); };
void SetOutputScalarTypeToDouble() {
this->SetOutputScalarType(VTK_DOUBLE); };
void SetOutputScalarTypeToInputScalarType() {
this->SetOutputScalarType(0); };
vtkGetMacro(OutputScalarType, int);
//@}
protected:
vtkImageSlab();
~vtkImageSlab();
virtual int RequestInformation(vtkInformation *, vtkInformationVector **,
vtkInformationVector *);
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **,
vtkInformationVector *);
virtual void ThreadedRequestData(vtkInformation *request,
vtkInformationVector **inputVector,
vtkInformationVector *outputVector,
vtkImageData ***inData,
vtkImageData **outData, int ext[6], int id);
vtkSetMacro(OutputScalarType, int);
int Operation;
int Orientation;
int SliceRange[2];
int OutputScalarType;
int MultiSliceOutput;
int TrapezoidIntegration;
private:
vtkImageSlab(const vtkImageSlab&) VTK_DELETE_FUNCTION;
void operator=(const vtkImageSlab&) VTK_DELETE_FUNCTION;
};
#endif