Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

213 lines
7.7 KiB

2 years ago
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkDemandDrivenPipeline.h,v $
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 vtkDemandDrivenPipeline - Executive supporting on-demand execution.
// .SECTION Description
// vtkDemandDrivenPipeline is an executive that will execute an
// algorithm only when its outputs are out-of-date with respect to its
// inputs.
#ifndef __vtkDemandDrivenPipeline_h
#define __vtkDemandDrivenPipeline_h
#include "vtkExecutive.h"
class vtkDataArray;
class vtkDataSetAttributes;
class vtkDemandDrivenPipelineInternals;
class vtkFieldData;
class vtkInformation;
class vtkInformationIntegerKey;
class vtkInformationVector;
class vtkInformationKeyVectorKey;
class vtkInformationUnsignedLongKey;
class VTK_FILTERING_EXPORT vtkDemandDrivenPipeline : public vtkExecutive
{
public:
static vtkDemandDrivenPipeline* New();
vtkTypeRevisionMacro(vtkDemandDrivenPipeline,vtkExecutive);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Generalized interface for asking the executive to fullfill update
// requests.
virtual int ProcessRequest(vtkInformation* request,
vtkInformationVector** inInfo,
vtkInformationVector* outInfo);
// Description:
// Implement the pipeline modified time request.
virtual int
ComputePipelineMTime(vtkInformation* request,
vtkInformationVector** inInfoVec,
vtkInformationVector* outInfoVec,
int requestFromOutputPort,
unsigned long* mtime);
// Description:
// Bring the algorithm's outputs up-to-date. Returns 1 for success
// and 0 for failure.
virtual int Update();
virtual int Update(int port);
// Description:
// Get the PipelineMTime for this exective.
vtkGetMacro(PipelineMTime, unsigned long);
// Description:
// Set whether the given output port releases data when it is
// consumed. Returns 1 if the the value changes and 0 otherwise.
virtual int SetReleaseDataFlag(int port, int n);
// Description:
// Get whether the given output port releases data when it is consumed.
virtual int GetReleaseDataFlag(int port);
// Description:
// Bring the PipelineMTime up to date.
virtual int UpdatePipelineMTime();
// Description:
// Bring the output data object's existence up to date. This does
// not actually produce data, but does create the data object that
// will store data produced during the UpdateData step.
virtual int UpdateDataObject();
// Description:
// Bring the output information up to date.
virtual int UpdateInformation();
// Description:
// Bring the output data up to date. This should be called only
// when information is up to date. Use the Update method if it is
// not known that the information is up to date.
virtual int UpdateData(int outputPort);
// Description:
// Key defining a request to make sure the output data objects exist.
static vtkInformationRequestKey* REQUEST_DATA_OBJECT();
// Description:
// Key defining a request to make sure the output information is up to date.
static vtkInformationRequestKey* REQUEST_INFORMATION();
// Description:
// Key defining a request to make sure the output data are up to date.
static vtkInformationRequestKey* REQUEST_DATA();
// Description:
// Key defining a request to mark outputs that will NOT be generated
// during a REQUEST_DATA.
static vtkInformationRequestKey* REQUEST_DATA_NOT_GENERATED();
// Description:
// Key to specify in pipeline information the request that data be
// released after it is used.
static vtkInformationIntegerKey* RELEASE_DATA();
// Description:
// Key to store a mark for an output that will not be generated.
// Algorithms use this to tell the executive that they will not
// generate certain outputs for a REQUEST_DATA.
static vtkInformationIntegerKey* DATA_NOT_GENERATED();
// Description:
// Create (New) and return a data object of the given type.
static vtkDataObject* NewDataObject(const char* type);
protected:
vtkDemandDrivenPipeline();
~vtkDemandDrivenPipeline();
// Helper methods to send requests to the algorithm.
virtual int ExecuteDataObject(vtkInformation* request,
vtkInformationVector** inInfo,
vtkInformationVector* outInfo);
virtual int ExecuteInformation(vtkInformation* request,
vtkInformationVector** inInfo,
vtkInformationVector* outInfo);
virtual int ExecuteData(vtkInformation* request,
vtkInformationVector** inInfo,
vtkInformationVector* outInfo);
// Reset the pipeline update values in the given output information object.
virtual void ResetPipelineInformation(int port, vtkInformation*);
// Check whether the data object in the pipeline information for an
// output port exists and has a valid type.
virtual int CheckDataObject(int port, vtkInformationVector* outInfo);
// Input connection validity checkers.
int InputCountIsValid(vtkInformationVector **);
int InputCountIsValid(int port,vtkInformationVector **);
int InputTypeIsValid(vtkInformationVector **);
int InputTypeIsValid(int port,vtkInformationVector **);
int InputTypeIsValid(int port, int index,vtkInformationVector **);
int InputFieldsAreValid(vtkInformationVector **);
int InputFieldsAreValid(int port,vtkInformationVector **);
int InputFieldsAreValid(int port, int index,vtkInformationVector **);
// Field existence checkers.
int DataSetAttributeExists(vtkDataSetAttributes* dsa, vtkInformation* field);
int FieldArrayExists(vtkFieldData* data, vtkInformation* field);
int ArrayIsValid(vtkDataArray* array, vtkInformation* field);
// Input port information checkers.
int InputIsOptional(int port);
int InputIsRepeatable(int port);
// Decide whether the output data need to be generated.
virtual int NeedToExecuteData(int outputPort,
vtkInformationVector** inInfoVec,
vtkInformationVector* outInfoVec);
// Handle before/after operations for ExecuteData method.
virtual void ExecuteDataStart(vtkInformation* request,
vtkInformationVector** inInfoVec,
vtkInformationVector* outInfoVec);
virtual void ExecuteDataEnd(vtkInformation* request,
vtkInformationVector** inInfoVec,
vtkInformationVector* outInfoVec);
virtual void MarkOutputsGenerated(vtkInformation* request,
vtkInformationVector** inInfoVec,
vtkInformationVector* outInfoVec);
// Largest MTime of any algorithm on this executive or preceding
// executives.
unsigned long PipelineMTime;
// Time when information or data were last generated.
vtkTimeStamp DataObjectTime;
vtkTimeStamp InformationTime;
vtkTimeStamp DataTime;
//BTX
friend class vtkCompositeDataPipeline;
//ETX
vtkInformation *InfoRequest;
vtkInformation *DataObjectRequest;
vtkInformation *DataRequest;
private:
vtkDemandDrivenPipeline(const vtkDemandDrivenPipeline&); // Not implemented.
void operator=(const vtkDemandDrivenPipeline&); // Not implemented.
};
#endif