VTK  9.1.0
vtkAlgorithm.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkAlgorithm.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
91 #ifndef vtkAlgorithm_h
92 #define vtkAlgorithm_h
93 
94 #include "vtkCommonExecutionModelModule.h" // For export macro
95 #include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_0_0
96 #include "vtkObject.h"
97 
98 class vtkAbstractArray;
99 class vtkAlgorithmInternals;
100 class vtkAlgorithmOutput;
101 class vtkCollection;
102 class vtkDataArray;
103 class vtkDataObject;
104 class vtkExecutive;
105 class vtkInformation;
111 class vtkProgressObserver;
112 
113 class VTKCOMMONEXECUTIONMODEL_EXPORT vtkAlgorithm : public vtkObject
114 {
115 public:
116  static vtkAlgorithm* New();
117  vtkTypeMacro(vtkAlgorithm, vtkObject);
118  void PrintSelf(ostream& os, vtkIndent indent) override;
119 
141  {
144  DEFAULT_PRECISION
145  };
146 
152 
158 
164  virtual void SetExecutive(vtkExecutive* executive);
165 
190  vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo);
191 
197  vtkInformation* request, vtkCollection* inInfo, vtkInformationVector* outInfo);
198 
204  virtual int ComputePipelineMTime(vtkInformation* request, vtkInformationVector** inInfoVec,
205  vtkInformationVector* outInfoVec, int requestFromOutputPort, vtkMTimeType* mtime);
206 
214  virtual int ModifyRequest(vtkInformation* request, int when);
215 
223 
231 
233 
236  vtkGetObjectMacro(Information, vtkInformation);
239 
244 
249 
251 
254  void Register(vtkObjectBase* o) override;
255  void UnRegister(vtkObjectBase* o) override;
257 
259 
263  vtkSetMacro(AbortExecute, vtkTypeBool);
264  vtkGetMacro(AbortExecute, vtkTypeBool);
265  vtkBooleanMacro(AbortExecute, vtkTypeBool);
267 
269 
272  vtkGetMacro(Progress, double);
274 
279  VTK_DEPRECATED_IN_9_0_0("Use vtkAlgorithm::UpdateProgress")
280  void SetProgress(double);
281 
287  void UpdateProgress(double amount);
288 
290 
302  void SetProgressShiftScale(double shift, double scale);
303  vtkGetMacro(ProgressShift, double);
304  vtkGetMacro(ProgressScale, double);
306 
308 
315  void SetProgressText(const char* ptext);
316  vtkGetStringMacro(ProgressText);
318 
320 
324  vtkGetMacro(ErrorCode, unsigned long);
326 
327  // left public for performance since it is used in inner loops
328  vtkTypeBool AbortExecute;
329 
334  static vtkInformationIntegerKey* INPUT_IS_OPTIONAL();
338  static vtkInformationIntegerKey* INPUT_IS_REPEATABLE();
342  static vtkInformationInformationVectorKey* INPUT_REQUIRED_FIELDS();
346  static vtkInformationStringVectorKey* INPUT_REQUIRED_DATA_TYPE();
350  static vtkInformationInformationVectorKey* INPUT_ARRAYS_TO_PROCESS();
354  static vtkInformationIntegerKey* INPUT_PORT();
358  static vtkInformationIntegerKey* INPUT_CONNECTION();
359 
368  static vtkInformationIntegerKey* CAN_PRODUCE_SUB_EXTENT();
369 
382  static vtkInformationIntegerKey* CAN_HANDLE_PIECE_REQUEST();
383 
385 
393  virtual void SetInputArrayToProcess(
394  int idx, int port, int connection, int fieldAssociation, const char* name);
395  virtual void SetInputArrayToProcess(
396  int idx, int port, int connection, int fieldAssociation, int fieldAttributeType);
397  virtual void SetInputArrayToProcess(int idx, vtkInformation* info);
399 
423  virtual void SetInputArrayToProcess(int idx, int port, int connection,
424  const char* fieldAssociation, const char* attributeTypeorName);
425 
429  vtkInformation* GetInputArrayInformation(int idx);
430 
431  // from here down are convenience methods that really are executive methods
432 
436  void RemoveAllInputs();
437 
442  vtkDataObject* GetOutputDataObject(int port);
443 
448  vtkDataObject* GetInputDataObject(int port, int connection);
449 
451 
464  virtual void SetInputConnection(int port, vtkAlgorithmOutput* input);
465  virtual void SetInputConnection(vtkAlgorithmOutput* input);
467 
469 
478  virtual void AddInputConnection(int port, vtkAlgorithmOutput* input);
479  virtual void AddInputConnection(vtkAlgorithmOutput* input);
481 
491  virtual void RemoveInputConnection(int port, vtkAlgorithmOutput* input);
492 
496  virtual void RemoveInputConnection(int port, int idx);
497 
501  virtual void RemoveAllInputConnections(int port);
502 
511  virtual void SetInputDataObject(int port, vtkDataObject* data);
512  virtual void SetInputDataObject(vtkDataObject* data) { this->SetInputDataObject(0, data); }
513 
520  virtual void AddInputDataObject(vtkDataObject* data) { this->AddInputDataObject(0, data); }
521 
530 
535 
540 
545 
550  vtkAlgorithm* GetInputAlgorithm(int port, int index, int& algPort);
551 
556 
561 
567 
572 
582 
587 
596 
598 
601  virtual void Update(int port);
602  virtual void Update();
604 
627  virtual vtkTypeBool Update(int port, vtkInformationVector* requests);
628 
634  virtual vtkTypeBool Update(vtkInformation* requests);
635 
642  virtual int UpdatePiece(
643  int piece, int numPieces, int ghostLevels, const int extents[6] = nullptr);
644 
650  virtual int UpdateExtent(const int extents[6]);
651 
658  virtual int UpdateTimeStep(double time, int piece = -1, int numPieces = 1, int ghostLevels = 0,
659  const int extents[6] = nullptr);
660 
664  virtual void UpdateInformation();
665 
669  virtual void UpdateDataObject();
670 
674  virtual void PropagateUpdateExtent();
675 
679  virtual void UpdateWholeExtent();
680 
685  void ConvertTotalInputToPortConnection(int ind, int& port, int& conn);
686 
687  //======================================================================
688  // The following block of code is to support old style VTK applications. If
689  // you are using these calls there are better ways to do it in the new
690  // pipeline
691  //======================================================================
692 
694 
697  virtual void SetReleaseDataFlag(int);
698  virtual int GetReleaseDataFlag();
702 
703  //========================================================================
704 
706 
713  int UpdateExtentIsEmpty(vtkInformation* pinfo, int extentType);
715 
721 
723 
728  int* GetUpdateExtent() VTK_SIZEHINT(6) { return this->GetUpdateExtent(0); }
730  void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1, int& z0, int& z1)
731  {
732  this->GetUpdateExtent(0, x0, x1, y0, y1, z0, z1);
733  }
734  void GetUpdateExtent(int port, int& x0, int& x1, int& y0, int& y1, int& z0, int& z1);
735  void GetUpdateExtent(int extent[6]) { this->GetUpdateExtent(0, extent); }
736  void GetUpdateExtent(int port, int extent[6]);
738 
740 
745  int GetUpdatePiece() { return this->GetUpdatePiece(0); }
749  int GetUpdateGhostLevel() { return this->GetUpdateGhostLevel(0); }
752 
754 
764  vtkGetObjectMacro(ProgressObserver, vtkProgressObserver);
766 
767 protected:
769  ~vtkAlgorithm() override;
770 
771  // Keys used to indicate that input/output port information has been
772  // filled.
774 
775  // Arbitrary extra information associated with this algorithm
777 
784 
791 
795  virtual void SetNumberOfInputPorts(int n);
796 
800  virtual void SetNumberOfOutputPorts(int n);
801 
802  // Helper methods to check input/output port index ranges.
803  int InputPortIndexInRange(int index, const char* action);
804  int OutputPortIndexInRange(int index, const char* action);
805 
810  int GetInputArrayAssociation(int idx, vtkInformationVector** inputVector);
811 
813 
821  int GetInputArrayAssociation(int idx, int connection, vtkInformationVector** inputVector);
824 
826 
832  int idx, vtkInformationVector** inputVector, int& association);
834 
836 
844  vtkDataArray* GetInputArrayToProcess(int idx, int connection, vtkInformationVector** inputVector);
846  int idx, int connection, vtkInformationVector** inputVector, int& association);
848  vtkDataArray* GetInputArrayToProcess(int idx, vtkDataObject* input, int& association);
850 
852 
858  int idx, vtkInformationVector** inputVector, int& association);
860 
862 
871  int idx, int connection, vtkInformationVector** inputVector);
873  int idx, int connection, vtkInformationVector** inputVector, int& association);
875  vtkAbstractArray* GetInputAbstractArrayToProcess(int idx, vtkDataObject* input, int& association);
877 
886 
894 
896 
900  vtkSetMacro(ErrorCode, unsigned long);
901  unsigned long ErrorCode;
903 
904  // Progress/Update handling
905  double Progress;
907 
908  // Garbage collection support.
910 
911  // executive methods below
912 
919  virtual void SetNthInputConnection(int port, int index, vtkAlgorithmOutput* input);
920 
927  virtual void SetNumberOfInputConnections(int port, int n);
928 
930 
938  {
939  this->SetInputDataObject(port, input);
940  }
942  {
943  this->AddInputDataObject(port, input);
944  }
945 
947 
948 private:
949  vtkExecutive* Executive;
950  vtkInformationVector* InputPortInformation;
951  vtkInformationVector* OutputPortInformation;
952  vtkAlgorithmInternals* AlgorithmInternal;
953  static void ConnectionAdd(
954  vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
955  static void ConnectionRemove(
956  vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
957  static void ConnectionRemoveAllInput(vtkAlgorithm* consumer, int port);
958  static void ConnectionRemoveAllOutput(vtkAlgorithm* producer, int port);
959 
960 private:
961  vtkAlgorithm(const vtkAlgorithm&) = delete;
962  void operator=(const vtkAlgorithm&) = delete;
963 
964  double ProgressShift;
965  double ProgressScale;
966 };
967 
968 #endif
Abstract superclass for all arrays.
Proxy object to connect input/output ports.
Superclass for all sources, filters, and sinks in VTK.
Definition: vtkAlgorithm.h:114
virtual void UpdateDataObject()
Create output object(s).
int GetUpdatePiece(int port)
These functions return the update extent for output ports that use piece extents.
static vtkAlgorithm * New()
int GetInputArrayAssociation(int idx, vtkInformationVector **inputVector)
Get the assocition of the actual data array for the input array specified by idx, this is only reason...
virtual void SetNumberOfOutputPorts(int n)
Set the number of output ports provided by the algorithm.
virtual void SetNthInputConnection(int port, int index, vtkAlgorithmOutput *input)
Replace the Nth connection on the given input port.
int GetUpdateGhostLevel()
These functions return the update extent for output ports that use piece extents.
Definition: vtkAlgorithm.h:749
static vtkInformationIntegerKey * PORT_REQUIREMENTS_FILLED()
void GetUpdateExtent(int port, int &x0, int &x1, int &y0, int &y1, int &z0, int &z1)
These functions return the update extent for output ports that use 3D extents.
int GetInputArrayAssociation(int idx, vtkDataObject *input)
Filters that have multiple connections on one port can use this signature.
virtual void AddInputDataObject(vtkDataObject *data)
Definition: vtkAlgorithm.h:520
virtual void SetInputDataObject(vtkDataObject *data)
Definition: vtkAlgorithm.h:512
int UpdateExtentIsEmpty(vtkInformation *pinfo, int extentType)
This detects when the UpdateExtent will generate no data This condition is satisfied when the UpdateE...
int UpdateExtentIsEmpty(vtkInformation *pinfo, vtkDataObject *output)
This detects when the UpdateExtent will generate no data This condition is satisfied when the UpdateE...
void GetUpdateExtent(int extent[6])
These functions return the update extent for output ports that use 3D extents.
Definition: vtkAlgorithm.h:735
int GetUpdatePiece()
These functions return the update extent for output ports that use piece extents.
Definition: vtkAlgorithm.h:745
vtkInformation * Information
Definition: vtkAlgorithm.h:776
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, vtkDataObject *input, int &association)
Filters that have multiple connections on one port can use this signature.
vtkExecutive * GetInputExecutive()
Equivalent to GetInputExecutive(0, 0)
Definition: vtkAlgorithm.h:571
virtual vtkTypeBool Update(vtkInformation *requests)
Convenience method to update an algorithm after passing requests to its first output port.
virtual int FillOutputPortInformation(int port, vtkInformation *info)
Fill the output port information objects for this algorithm.
virtual int ComputePipelineMTime(vtkInformation *request, vtkInformationVector **inInfoVec, vtkInformationVector *outInfoVec, int requestFromOutputPort, vtkMTimeType *mtime)
A special version of ProcessRequest meant specifically for the pipeline modified time request.
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, vtkInformationVector **inputVector)
Get the actual data array for the input array specified by idx, this is only reasonable during the RE...
virtual vtkTypeBool Update(int port, vtkInformationVector *requests)
This method enables the passing of data requests to the algorithm to be used during execution (in add...
vtkAlgorithmOutput * GetInputConnection(int port, int index)
Get the algorithm output port connected to an input port.
int * GetUpdateExtent(int port)
These functions return the update extent for output ports that use 3D extents.
vtkInformation * GetOutputPortInformation(int port)
Get the information object associated with an output port.
virtual int UpdatePiece(int piece, int numPieces, int ghostLevels, const int extents[6]=nullptr)
Convenience method to update an algorithm after passing requests to its first output port.
virtual vtkTypeBool ProcessRequest(vtkInformation *request, vtkInformationVector **inInfo, vtkInformationVector *outInfo)
Upstream/Downstream requests form the generalized interface through which executives invoke a algorit...
int GetNumberOfOutputPorts()
Get the number of output ports provided by the algorithm.
virtual int ModifyRequest(vtkInformation *request, int when)
This method gives the algorithm a chance to modify the contents of a request before or after (specifi...
void ReleaseDataFlagOff()
Turn release data flag on or off for all output ports.
void SetInputDataInternal(int port, vtkDataObject *input)
These methods are used by subclasses to implement methods to set data objects directly as input.
Definition: vtkAlgorithm.h:937
void UnRegister(vtkObjectBase *o) override
Participate in garbage collection.
int GetNumberOfInputPorts()
Get the number of input ports used by the algorithm.
int GetInputArrayAssociation(int idx, int connection, vtkInformationVector **inputVector)
Filters that have multiple connections on one port can use this signature.
vtkAlgorithm * GetInputAlgorithm(int port, int index)
Returns the algorithm connected to a port-index pair.
vtkInformation * GetInputInformation()
Equivalent to GetInputInformation(0, 0)
Definition: vtkAlgorithm.h:586
void ReleaseDataFlagOn()
Turn release data flag on or off for all output ports.
vtkDataArray * GetInputArrayToProcess(int idx, int connection, vtkInformationVector **inputVector)
Filters that have multiple connections on one port can use this signature.
vtkAlgorithm * GetInputAlgorithm()
Equivalent to GetInputAlgorithm(0, 0).
Definition: vtkAlgorithm.h:560
unsigned long ErrorCode
The error code contains a possible error that occurred while reading or writing the file.
Definition: vtkAlgorithm.h:900
void GetUpdateExtent(int port, int extent[6])
These functions return the update extent for output ports that use 3D extents.
int GetUpdateGhostLevel(int port)
These functions return the update extent for output ports that use piece extents.
virtual void AddInputDataObject(int port, vtkDataObject *data)
Add the data-object as an input to this given port.
vtkExecutive * GetInputExecutive(int port, int index)
Returns the executive associated with a particular input connection.
int OutputPortIndexInRange(int index, const char *action)
static void SetDefaultExecutivePrototype(vtkExecutive *proto)
If the DefaultExecutivePrototype is set, a copy of it is created in CreateDefaultExecutive() using Ne...
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, int connection, vtkInformationVector **inputVector)
Filters that have multiple connections on one port can use this signature.
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, vtkDataObject *input)
Filters that have multiple connections on one port can use this signature.
vtkDataArray * GetInputArrayToProcess(int idx, vtkInformationVector **inputVector)
Get the actual data array for the input array specified by idx, this is only reasonable during the RE...
vtkDataArray * GetInputArrayToProcess(int idx, vtkDataObject *input)
Filters that have multiple connections on one port can use this signature.
vtkDataArray * GetInputArrayToProcess(int idx, vtkInformationVector **inputVector, int &association)
Get the actual data array for the input array specified by idx, this is only reasonable during the RE...
void ReportReferences(vtkGarbageCollector *) override
vtkExecutive * GetExecutive()
Get this algorithm's executive.
char * ProgressText
Definition: vtkAlgorithm.h:906
vtkAlgorithm * GetInputAlgorithm(int port, int index, int &algPort)
Returns the algorithm and the output port index of that algorithm connected to a port-index pair.
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, vtkInformationVector **inputVector, int &association)
Get the actual data array for the input array specified by idx, this is only reasonable during the RE...
void SetProgressObserver(vtkProgressObserver *)
If an ProgressObserver is set, the algorithm will report progress through it rather than directly.
vtkDataArray * GetInputArrayToProcess(int idx, vtkDataObject *input, int &association)
Filters that have multiple connections on one port can use this signature.
virtual int FillInputPortInformation(int port, vtkInformation *info)
Fill the input port information objects for this algorithm.
virtual void UpdateWholeExtent()
Bring this algorithm's outputs up-to-date.
vtkDataArray * GetInputArrayToProcess(int idx, int connection, vtkInformationVector **inputVector, int &association)
Filters that have multiple connections on one port can use this signature.
virtual void SetNumberOfInputConnections(int port, int n)
Set the number of input connections on the given input port.
int GetTotalNumberOfInputConnections()
Get the total number of inputs for this algorithm.
void ConvertTotalInputToPortConnection(int ind, int &port, int &conn)
Convenience routine to convert from a linear ordering of input connections to a port/connection pair.
virtual void SetExecutive(vtkExecutive *executive)
Set this algorithm's executive.
int GetNumberOfInputConnections(int port)
Get the number of inputs currently connected to a port.
vtkInformation * GetInputArrayFieldInformation(int idx, vtkInformationVector **inputVector)
This method takes in an index (as specified in SetInputArrayToProcess) and a pipeline information vec...
virtual void PropagateUpdateExtent()
Propagate meta-data upstream.
virtual void Update(int port)
Bring this algorithm's outputs up-to-date.
virtual int UpdateExtent(const int extents[6])
Convenience method to update an algorithm after passing requests to its first output port.
void Register(vtkObjectBase *o) override
Participate in garbage collection.
vtkAlgorithmOutput * GetOutputPort()
Definition: vtkAlgorithm.h:529
int GetUpdateNumberOfPieces()
These functions return the update extent for output ports that use piece extents.
Definition: vtkAlgorithm.h:747
vtkTypeBool ProcessRequest(vtkInformation *request, vtkCollection *inInfo, vtkInformationVector *outInfo)
Version of ProcessRequest() that is wrapped.
vtkInformation * GetInputPortInformation(int port)
Get the information object associated with an input port.
DesiredOutputPrecision
Values used for setting the desired output precision for various algorithms.
Definition: vtkAlgorithm.h:141
virtual void SetReleaseDataFlag(int)
Turn release data flag on or off for all output ports.
void GetUpdateExtent(int &x0, int &x1, int &y0, int &y1, int &z0, int &z1)
These functions return the update extent for output ports that use 3D extents.
Definition: vtkAlgorithm.h:730
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, int connection, vtkInformationVector **inputVector, int &association)
Filters that have multiple connections on one port can use this signature.
virtual void SetNumberOfInputPorts(int n)
Set the number of input ports used by the algorithm.
int HasExecutive()
Check whether this algorithm has an assigned executive.
vtkAlgorithmOutput * GetOutputPort(int index)
Get a proxy object corresponding to the given output port of this algorithm.
int * GetUpdateExtent()
These functions return the update extent for output ports that use 3D extents.
Definition: vtkAlgorithm.h:728
vtkInformation * GetOutputInformation(int port)
Return the information object that is associated with a particular output port.
vtkProgressObserver * ProgressObserver
Definition: vtkAlgorithm.h:946
virtual int GetReleaseDataFlag()
Turn release data flag on or off for all output ports.
virtual void UpdateInformation()
Bring the algorithm's information up-to-date.
void AddInputDataInternal(int port, vtkDataObject *input)
Definition: vtkAlgorithm.h:941
~vtkAlgorithm() override
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual vtkExecutive * CreateDefaultExecutive()
Create a default executive.
int GetUpdateNumberOfPieces(int port)
These functions return the update extent for output ports that use piece extents.
int InputPortIndexInRange(int index, const char *action)
double Progress
Definition: vtkAlgorithm.h:905
vtkInformation * GetInputInformation(int port, int index)
Return the information object that is associated with a particular input connection.
virtual int UpdateTimeStep(double time, int piece=-1, int numPieces=1, int ghostLevels=0, const int extents[6]=nullptr)
Convenience method to update an algorithm after passing requests to its first output port.
virtual void SetInformation(vtkInformation *)
Set/Get the information object associated with this algorithm.
virtual void Update()
Bring this algorithm's outputs up-to-date.
static vtkExecutive * DefaultExecutivePrototype
Definition: vtkAlgorithm.h:929
create and manipulate ordered lists of objects
Definition: vtkCollection.h:53
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
general representation of visualization data
Superclass for all pipeline executives in VTK.
Definition: vtkExecutive.h:76
Detect and break reference loops.
a simple class to control print indentation
Definition: vtkIndent.h:113
Key for integer values in vtkInformation.
Key for string values in vtkInformation.
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
abstract base class for most VTK objects
Definition: vtkObjectBase.h:70
abstract base class for most VTK objects
Definition: vtkObject.h:73
Basic class to optionally replace vtkAlgorithm progress functionality.
@ info
Definition: vtkX3D.h:382
@ port
Definition: vtkX3D.h:453
@ scale
Definition: vtkX3D.h:235
@ time
Definition: vtkX3D.h:503
@ extent
Definition: vtkX3D.h:351
@ name
Definition: vtkX3D.h:225
@ index
Definition: vtkX3D.h:252
@ data
Definition: vtkX3D.h:321
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_DEPRECATED_IN_9_0_0(reason)
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
#define VTK_SIZEHINT(...)