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 =========================================================================*/
32 #ifndef vtkAlgorithm_h
33 #define vtkAlgorithm_h
34 
35 #include "vtkCommonExecutionModelModule.h" // For export macro
36 #include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_0_0
37 #include "vtkObject.h"
38 
39 class vtkAbstractArray;
40 class vtkAlgorithmInternals;
41 class vtkAlgorithmOutput;
42 class vtkCollection;
43 class vtkDataArray;
44 class vtkDataObject;
45 class vtkExecutive;
46 class vtkInformation;
53 
54 class VTKCOMMONEXECUTIONMODEL_EXPORT vtkAlgorithm : public vtkObject
55 {
56 public:
57  static vtkAlgorithm* New();
58  vtkTypeMacro(vtkAlgorithm, vtkObject);
59  void PrintSelf(ostream& os, vtkIndent indent) override;
60 
82  {
85  DEFAULT_PRECISION
86  };
87 
92  int HasExecutive();
93 
99 
105  virtual void SetExecutive(vtkExecutive* executive);
106 
131  vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo);
132 
138  vtkInformation* request, vtkCollection* inInfo, vtkInformationVector* outInfo);
139 
145  virtual int ComputePipelineMTime(vtkInformation* request, vtkInformationVector** inInfoVec,
146  vtkInformationVector* outInfoVec, int requestFromOutputPort, vtkMTimeType* mtime);
147 
155  virtual int ModifyRequest(vtkInformation* request, int when);
156 
164 
172 
174 
177  vtkGetObjectMacro(Information, vtkInformation);
180 
185 
190 
192 
195  void Register(vtkObjectBase* o) override;
196  void UnRegister(vtkObjectBase* o) override;
198 
200 
204  vtkSetMacro(AbortExecute, vtkTypeBool);
205  vtkGetMacro(AbortExecute, vtkTypeBool);
206  vtkBooleanMacro(AbortExecute, vtkTypeBool);
208 
210 
213  vtkGetMacro(Progress, double);
215 
220  VTK_DEPRECATED_IN_9_0_0("Use vtkAlgorithm::UpdateProgress")
221  void SetProgress(double);
222 
228  void UpdateProgress(double amount);
229 
231 
243  void SetProgressShiftScale(double shift, double scale);
244  vtkGetMacro(ProgressShift, double);
245  vtkGetMacro(ProgressScale, double);
247 
249 
256  void SetProgressText(const char* ptext);
257  vtkGetStringMacro(ProgressText);
259 
261 
265  vtkGetMacro(ErrorCode, unsigned long);
267 
268  // left public for performance since it is used in inner loops
269  vtkTypeBool AbortExecute;
270 
275  static vtkInformationIntegerKey* INPUT_IS_OPTIONAL();
279  static vtkInformationIntegerKey* INPUT_IS_REPEATABLE();
283  static vtkInformationInformationVectorKey* INPUT_REQUIRED_FIELDS();
287  static vtkInformationStringVectorKey* INPUT_REQUIRED_DATA_TYPE();
291  static vtkInformationInformationVectorKey* INPUT_ARRAYS_TO_PROCESS();
295  static vtkInformationIntegerKey* INPUT_PORT();
299  static vtkInformationIntegerKey* INPUT_CONNECTION();
300 
309  static vtkInformationIntegerKey* CAN_PRODUCE_SUB_EXTENT();
310 
323  static vtkInformationIntegerKey* CAN_HANDLE_PIECE_REQUEST();
324 
326 
334  virtual void SetInputArrayToProcess(
335  int idx, int port, int connection, int fieldAssociation, const char* name);
336  virtual void SetInputArrayToProcess(
337  int idx, int port, int connection, int fieldAssociation, int fieldAttributeType);
338  virtual void SetInputArrayToProcess(int idx, vtkInformation* info);
340 
364  virtual void SetInputArrayToProcess(int idx, int port, int connection,
365  const char* fieldAssociation, const char* attributeTypeorName);
366 
370  vtkInformation* GetInputArrayInformation(int idx);
371 
372  // from here down are convenience methods that really are executive methods
373 
377  void RemoveAllInputs();
378 
383  vtkDataObject* GetOutputDataObject(int port);
384 
389  vtkDataObject* GetInputDataObject(int port, int connection);
390 
392 
405  virtual void SetInputConnection(int port, vtkAlgorithmOutput* input);
406  virtual void SetInputConnection(vtkAlgorithmOutput* input);
408 
410 
419  virtual void AddInputConnection(int port, vtkAlgorithmOutput* input);
420  virtual void AddInputConnection(vtkAlgorithmOutput* input);
422 
432  virtual void RemoveInputConnection(int port, vtkAlgorithmOutput* input);
433 
437  virtual void RemoveInputConnection(int port, int idx);
438 
442  virtual void RemoveAllInputConnections(int port);
443 
452  virtual void SetInputDataObject(int port, vtkDataObject* data);
453  virtual void SetInputDataObject(vtkDataObject* data) { this->SetInputDataObject(0, data); }
454 
461  virtual void AddInputDataObject(vtkDataObject* data) { this->AddInputDataObject(0, data); }
462 
471 
476 
481 
486 
491  vtkAlgorithm* GetInputAlgorithm(int port, int index, int& algPort);
492 
497 
502 
508 
513 
523 
528 
537 
539 
542  virtual void Update(int port);
543  virtual void Update();
545 
568  virtual vtkTypeBool Update(int port, vtkInformationVector* requests);
569 
575  virtual vtkTypeBool Update(vtkInformation* requests);
576 
583  virtual int UpdatePiece(
584  int piece, int numPieces, int ghostLevels, const int extents[6] = nullptr);
585 
591  virtual int UpdateExtent(const int extents[6]);
592 
599  virtual int UpdateTimeStep(double time, int piece = -1, int numPieces = 1, int ghostLevels = 0,
600  const int extents[6] = nullptr);
601 
605  virtual void UpdateInformation();
606 
610  virtual void UpdateDataObject();
611 
615  virtual void PropagateUpdateExtent();
616 
620  virtual void UpdateWholeExtent();
621 
626  void ConvertTotalInputToPortConnection(int ind, int& port, int& conn);
627 
628  //======================================================================
629  // The following block of code is to support old style VTK applications. If
630  // you are using these calls there are better ways to do it in the new
631  // pipeline
632  //======================================================================
633 
635 
638  virtual void SetReleaseDataFlag(int);
639  virtual int GetReleaseDataFlag();
643 
644  //========================================================================
645 
647 
654  int UpdateExtentIsEmpty(vtkInformation* pinfo, int extentType);
656 
662 
664 
669  int* GetUpdateExtent() VTK_SIZEHINT(6) { return this->GetUpdateExtent(0); }
671  void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1, int& z0, int& z1)
672  {
673  this->GetUpdateExtent(0, x0, x1, y0, y1, z0, z1);
674  }
675  void GetUpdateExtent(int port, int& x0, int& x1, int& y0, int& y1, int& z0, int& z1);
676  void GetUpdateExtent(int extent[6]) { this->GetUpdateExtent(0, extent); }
677  void GetUpdateExtent(int port, int extent[6]);
679 
681 
686  int GetUpdatePiece() { return this->GetUpdatePiece(0); }
690  int GetUpdateGhostLevel() { return this->GetUpdateGhostLevel(0); }
693 
695 
705  vtkGetObjectMacro(ProgressObserver, vtkProgressObserver);
707 
708 protected:
710  ~vtkAlgorithm() override;
711 
712  // Keys used to indicate that input/output port information has been
713  // filled.
715 
716  // Arbitrary extra information associated with this algorithm
718 
725 
732 
736  virtual void SetNumberOfInputPorts(int n);
737 
741  virtual void SetNumberOfOutputPorts(int n);
742 
743  // Helper methods to check input/output port index ranges.
744  int InputPortIndexInRange(int index, const char* action);
745  int OutputPortIndexInRange(int index, const char* action);
746 
751  int GetInputArrayAssociation(int idx, vtkInformationVector** inputVector);
752 
754 
762  int GetInputArrayAssociation(int idx, int connection, vtkInformationVector** inputVector);
765 
767 
773  int idx, vtkInformationVector** inputVector, int& association);
775 
777 
785  vtkDataArray* GetInputArrayToProcess(int idx, int connection, vtkInformationVector** inputVector);
787  int idx, int connection, vtkInformationVector** inputVector, int& association);
789  vtkDataArray* GetInputArrayToProcess(int idx, vtkDataObject* input, int& association);
791 
793 
799  int idx, vtkInformationVector** inputVector, int& association);
801 
803 
812  int idx, int connection, vtkInformationVector** inputVector);
814  int idx, int connection, vtkInformationVector** inputVector, int& association);
816  vtkAbstractArray* GetInputAbstractArrayToProcess(int idx, vtkDataObject* input, int& association);
818 
827 
835 
837 
841  vtkSetMacro(ErrorCode, unsigned long);
842  unsigned long ErrorCode;
844 
845  // Progress/Update handling
846  double Progress;
848 
849  // Garbage collection support.
851 
852  // executive methods below
853 
860  virtual void SetNthInputConnection(int port, int index, vtkAlgorithmOutput* input);
861 
868  virtual void SetNumberOfInputConnections(int port, int n);
869 
871 
879  {
880  this->SetInputDataObject(port, input);
881  }
883  {
884  this->AddInputDataObject(port, input);
885  }
886 
888 
889 private:
890  vtkExecutive* Executive;
891  vtkInformationVector* InputPortInformation;
892  vtkInformationVector* OutputPortInformation;
893  vtkAlgorithmInternals* AlgorithmInternal;
894  static void ConnectionAdd(
895  vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
896  static void ConnectionRemove(
897  vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
898  static void ConnectionRemoveAllInput(vtkAlgorithm* consumer, int port);
899  static void ConnectionRemoveAllOutput(vtkAlgorithm* producer, int port);
900 
901 private:
902  vtkAlgorithm(const vtkAlgorithm&) = delete;
903  void operator=(const vtkAlgorithm&) = delete;
904 
905  double ProgressShift;
906  double ProgressScale;
907 };
908 
909 #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:55
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:690
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:461
virtual void SetInputDataObject(vtkDataObject *data)
Definition: vtkAlgorithm.h:453
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:676
int GetUpdatePiece()
These functions return the update extent for output ports that use piece extents.
Definition: vtkAlgorithm.h:686
vtkInformation * Information
Definition: vtkAlgorithm.h:717
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:512
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:878
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:527
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:501
unsigned long ErrorCode
The error code contains a possible error that occurred while reading or writing the file.
Definition: vtkAlgorithm.h:841
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:847
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:470
int GetUpdateNumberOfPieces()
These functions return the update extent for output ports that use piece extents.
Definition: vtkAlgorithm.h:688
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:82
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:671
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:669
vtkInformation * GetOutputInformation(int port)
Return the information object that is associated with a particular output port.
vtkProgressObserver * ProgressObserver
Definition: vtkAlgorithm.h:887
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:882
~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:846
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:870
create and manipulate ordered lists of objects
Definition: vtkCollection.h:53
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:50
general representation of visualization data
Definition: vtkDataObject.h:60
Superclass for all pipeline executives in VTK.
Definition: vtkExecutive.h:47
Detect and break reference loops.
a simple class to control print indentation
Definition: vtkIndent.h:34
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:54
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(...)