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.
212 lines
7.7 KiB
212 lines
7.7 KiB
/*=========================================================================
|
|
|
|
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
|
|
|