/*========================================================================= 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