Files
ThirdParty-6/ParaView-5.0.1/VTK/Common/ExecutionModel/vtkImageAlgorithm.h

164 lines
6.4 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkImageAlgorithm.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.
=========================================================================*/
// .NAME vtkImageAlgorithm - Generic algorithm superclass for image algs
// .SECTION Description
// vtkImageAlgorithm is a filter superclass that hides much of the
// pipeline complexity. It handles breaking the pipeline execution
// into smaller extents so that the vtkImageData limits are observed. It
// also provides support for multithreading. If you don't need any of this
// functionality, consider using vtkSimpleImageToImageFilter instead.
// .SECTION See also
// vtkSimpleImageToImageFilter
#ifndef vtkImageAlgorithm_h
#define vtkImageAlgorithm_h
#include "vtkCommonExecutionModelModule.h" // For export macro
#include "vtkAlgorithm.h"
class vtkDataSet;
class vtkImageData;
class VTKCOMMONEXECUTIONMODEL_EXPORT vtkImageAlgorithm : public vtkAlgorithm
{
public:
vtkTypeMacro(vtkImageAlgorithm,vtkAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Get the output data object for a port on this algorithm.
vtkImageData* GetOutput();
vtkImageData* GetOutput(int);
virtual void SetOutput(vtkDataObject* d);
// Description:
// Process a request from the executive. For vtkImageAlgorithm, the
// request will be delegated to one of the following methods: RequestData,
// RequestInformation, or RequestUpdateExtent.
virtual int ProcessRequest(vtkInformation*,
vtkInformationVector**,
vtkInformationVector*);
// Description:
// Assign a data object as input. Note that this method does not
// establish a pipeline connection. Use SetInputConnection to
// setup a pipeline connection.
void SetInputData(vtkDataObject *);
void SetInputData(int, vtkDataObject*);
// Description:
// Get a data object for one of the input port connections. The use
// of this method is strongly discouraged, but some filters that were
// written a long time ago still use this method.
vtkDataObject *GetInput(int port);
vtkDataObject *GetInput() { return this->GetInput(0); };
vtkImageData *GetImageDataInput(int port);
// Description:
// Assign a data object as input. Note that this method does not
// establish a pipeline connection. Use SetInputConnection to
// setup a pipeline connection.
virtual void AddInputData(vtkDataObject *);
virtual void AddInputData(int, vtkDataObject*);
protected:
vtkImageAlgorithm();
~vtkImageAlgorithm();
// Description:
// Subclasses can reimplement this method to collect information
// from their inputs and set information for their outputs.
virtual int RequestInformation(vtkInformation* request,
vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
// Description:
// Subclasses can reimplement this method to translate the update
// extent requests from each output port into update extent requests
// for the input connections.
virtual int RequestUpdateExtent(vtkInformation*,
vtkInformationVector**,
vtkInformationVector*);
// Description:
// Convenience method to copy the scalar type and number of components
// from the input data to the output data. You will generally want to
// call this from inside your RequestInformation method, unless you
// want the output data to have a different scalar type or number of
// components from the input.
virtual void CopyInputArrayAttributesToOutput(vtkInformation* request,
vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
// Description:
// This is called in response to a REQUEST_DATA request from the
// executive. Subclasses should override either this method or the
// ExecuteDataWithInformation method in order to generate data for
// their outputs. For images, the output arrays will already be
// allocated, so all that is necessary is to fill in the voxel values.
virtual int RequestData(vtkInformation *request,
vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
// Description:
// This is a convenience method that is implemented in many subclasses
// instead of RequestData. It is called by RequestData.
virtual void ExecuteDataWithInformation(vtkDataObject *output,
vtkInformation* outInfo);
// Description
// This method is the old style execute method, provided for the sake
// of backwards compatibility with older filters and readers.
virtual void ExecuteData(vtkDataObject *output);
virtual void Execute();
// Description:
// Allocate the output data. This will be called before RequestData,
// it is not necessary for subclasses to call this method themselves.
virtual void AllocateOutputData(vtkImageData *out,
vtkInformation* outInfo,
int *uExtent);
virtual vtkImageData *AllocateOutputData(vtkDataObject *out,
vtkInformation *outInfo);
// Description:
// Copy the other point and cell data. Subclasses will almost never
// need to reimplement this method.
virtual void CopyAttributeData(vtkImageData *in, vtkImageData *out,
vtkInformationVector** inputVector);
// Description:
// These method should be reimplemented by subclasses that have
// more than a single input or single output.
// See vtkAlgorithm for more information.
virtual int FillOutputPortInformation(int port, vtkInformation* info);
virtual int FillInputPortInformation(int port, vtkInformation* info);
private:
vtkImageAlgorithm(const vtkImageAlgorithm&); // Not implemented.
void operator=(const vtkImageAlgorithm&); // Not implemented.
};
#endif