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 =========================================================================*/
41 #ifndef vtkAlgorithm_h
42 #define vtkAlgorithm_h
43 
44 #include "vtkCommonExecutionModelModule.h" // For export macro
45 #include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_0_0
46 #include "vtkObject.h"
47 
48 class vtkAbstractArray;
49 class vtkAlgorithmInternals;
50 class vtkAlgorithmOutput;
51 class vtkCollection;
52 class vtkDataArray;
53 class vtkDataObject;
54 class vtkExecutive;
55 class vtkInformation;
62 
63 class VTKCOMMONEXECUTIONMODEL_EXPORT vtkAlgorithm : public vtkObject
64 {
65 public:
66  static vtkAlgorithm* New();
67  vtkTypeMacro(vtkAlgorithm, vtkObject);
68  void PrintSelf(ostream& os, vtkIndent indent) override;
69 
91  {
94  DEFAULT_PRECISION
95  };
96 
102 
108 
114  virtual void SetExecutive(vtkExecutive* executive);
115 
140  vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo);
141 
147  vtkInformation* request, vtkCollection* inInfo, vtkInformationVector* outInfo);
148 
154  virtual int ComputePipelineMTime(vtkInformation* request, vtkInformationVector** inInfoVec,
155  vtkInformationVector* outInfoVec, int requestFromOutputPort, vtkMTimeType* mtime);
156 
164  virtual int ModifyRequest(vtkInformation* request, int when);
165 
173 
181 
183 
186  vtkGetObjectMacro(Information, vtkInformation);
189 
194 
199 
201 
204  void Register(vtkObjectBase* o) override;
205  void UnRegister(vtkObjectBase* o) override;
207 
209 
213  vtkSetMacro(AbortExecute, vtkTypeBool);
214  vtkGetMacro(AbortExecute, vtkTypeBool);
215  vtkBooleanMacro(AbortExecute, vtkTypeBool);
217 
219 
222  vtkGetMacro(Progress, double);
224 
229  VTK_DEPRECATED_IN_9_0_0("Use vtkAlgorithm::UpdateProgress")
230  void SetProgress(double);
231 
237  void UpdateProgress(double amount);
238 
240 
252  void SetProgressShiftScale(double shift, double scale);
253  vtkGetMacro(ProgressShift, double);
254  vtkGetMacro(ProgressScale, double);
256 
258 
265  void SetProgressText(const char* ptext);
266  vtkGetStringMacro(ProgressText);
268 
270 
274  vtkGetMacro(ErrorCode, unsigned long);
276 
277  // left public for performance since it is used in inner loops
278  vtkTypeBool AbortExecute;
279 
284  static vtkInformationIntegerKey* INPUT_IS_OPTIONAL();
288  static vtkInformationIntegerKey* INPUT_IS_REPEATABLE();
292  static vtkInformationInformationVectorKey* INPUT_REQUIRED_FIELDS();
296  static vtkInformationStringVectorKey* INPUT_REQUIRED_DATA_TYPE();
300  static vtkInformationInformationVectorKey* INPUT_ARRAYS_TO_PROCESS();
304  static vtkInformationIntegerKey* INPUT_PORT();
308  static vtkInformationIntegerKey* INPUT_CONNECTION();
309 
318  static vtkInformationIntegerKey* CAN_PRODUCE_SUB_EXTENT();
319 
332  static vtkInformationIntegerKey* CAN_HANDLE_PIECE_REQUEST();
333 
335 
343  virtual void SetInputArrayToProcess(
344  int idx, int port, int connection, int fieldAssociation, const char* name);
345  virtual void SetInputArrayToProcess(
346  int idx, int port, int connection, int fieldAssociation, int fieldAttributeType);
347  virtual void SetInputArrayToProcess(int idx, vtkInformation* info);
349 
373  virtual void SetInputArrayToProcess(int idx, int port, int connection,
374  const char* fieldAssociation, const char* attributeTypeorName);
375 
379  vtkInformation* GetInputArrayInformation(int idx);
380 
381  // from here down are convenience methods that really are executive methods
382 
386  void RemoveAllInputs();
387 
392  vtkDataObject* GetOutputDataObject(int port);
393 
398  vtkDataObject* GetInputDataObject(int port, int connection);
399 
401 
414  virtual void SetInputConnection(int port, vtkAlgorithmOutput* input);
415  virtual void SetInputConnection(vtkAlgorithmOutput* input);
417 
419 
428  virtual void AddInputConnection(int port, vtkAlgorithmOutput* input);
429  virtual void AddInputConnection(vtkAlgorithmOutput* input);
431 
441  virtual void RemoveInputConnection(int port, vtkAlgorithmOutput* input);
442 
446  virtual void RemoveInputConnection(int port, int idx);
447 
451  virtual void RemoveAllInputConnections(int port);
452 
461  virtual void SetInputDataObject(int port, vtkDataObject* data);
462  virtual void SetInputDataObject(vtkDataObject* data) { this->SetInputDataObject(0, data); }
463 
470  virtual void AddInputDataObject(vtkDataObject* data) { this->AddInputDataObject(0, data); }
471 
480 
485 
490 
495 
500  vtkAlgorithm* GetInputAlgorithm(int port, int index, int& algPort);
501 
506 
511 
517 
522 
532 
537 
546 
548 
551  virtual void Update(int port);
552  virtual void Update();
554 
577  virtual vtkTypeBool Update(int port, vtkInformationVector* requests);
578 
584  virtual vtkTypeBool Update(vtkInformation* requests);
585 
592  virtual int UpdatePiece(
593  int piece, int numPieces, int ghostLevels, const int extents[6] = nullptr);
594 
600  virtual int UpdateExtent(const int extents[6]);
601 
608  virtual int UpdateTimeStep(double time, int piece = -1, int numPieces = 1, int ghostLevels = 0,
609  const int extents[6] = nullptr);
610 
614  virtual void UpdateInformation();
615 
619  virtual void UpdateDataObject();
620 
624  virtual void PropagateUpdateExtent();
625 
629  virtual void UpdateWholeExtent();
630 
635  void ConvertTotalInputToPortConnection(int ind, int& port, int& conn);
636 
637  //======================================================================
638  // The following block of code is to support old style VTK applications. If
639  // you are using these calls there are better ways to do it in the new
640  // pipeline
641  //======================================================================
642 
644 
647  virtual void SetReleaseDataFlag(int);
648  virtual int GetReleaseDataFlag();
652 
653  //========================================================================
654 
656 
663  int UpdateExtentIsEmpty(vtkInformation* pinfo, int extentType);
665 
671 
673 
678  int* GetUpdateExtent() VTK_SIZEHINT(6) { return this->GetUpdateExtent(0); }
680  void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1, int& z0, int& z1)
681  {
682  this->GetUpdateExtent(0, x0, x1, y0, y1, z0, z1);
683  }
684  void GetUpdateExtent(int port, int& x0, int& x1, int& y0, int& y1, int& z0, int& z1);
685  void GetUpdateExtent(int extent[6]) { this->GetUpdateExtent(0, extent); }
686  void GetUpdateExtent(int port, int extent[6]);
688 
690 
695  int GetUpdatePiece() { return this->GetUpdatePiece(0); }
699  int GetUpdateGhostLevel() { return this->GetUpdateGhostLevel(0); }
702 
704 
714  vtkGetObjectMacro(ProgressObserver, vtkProgressObserver);
716 
717 protected:
719  ~vtkAlgorithm() override;
720 
721  // Keys used to indicate that input/output port information has been
722  // filled.
724 
725  // Arbitrary extra information associated with this algorithm
727 
734 
741 
745  virtual void SetNumberOfInputPorts(int n);
746 
750  virtual void SetNumberOfOutputPorts(int n);
751 
752  // Helper methods to check input/output port index ranges.
753  int InputPortIndexInRange(int index, const char* action);
754  int OutputPortIndexInRange(int index, const char* action);
755 
760  int GetInputArrayAssociation(int idx, vtkInformationVector** inputVector);
761 
763 
771  int GetInputArrayAssociation(int idx, int connection, vtkInformationVector** inputVector);
774 
776 
782  int idx, vtkInformationVector** inputVector, int& association);
784 
786 
794  vtkDataArray* GetInputArrayToProcess(int idx, int connection, vtkInformationVector** inputVector);
796  int idx, int connection, vtkInformationVector** inputVector, int& association);
798  vtkDataArray* GetInputArrayToProcess(int idx, vtkDataObject* input, int& association);
800 
802 
808  int idx, vtkInformationVector** inputVector, int& association);
810 
812 
821  int idx, int connection, vtkInformationVector** inputVector);
823  int idx, int connection, vtkInformationVector** inputVector, int& association);
825  vtkAbstractArray* GetInputAbstractArrayToProcess(int idx, vtkDataObject* input, int& association);
827 
836 
844 
846 
850  vtkSetMacro(ErrorCode, unsigned long);
851  unsigned long ErrorCode;
853 
854  // Progress/Update handling
855  double Progress;
857 
858  // Garbage collection support.
860 
861  // executive methods below
862 
869  virtual void SetNthInputConnection(int port, int index, vtkAlgorithmOutput* input);
870 
877  virtual void SetNumberOfInputConnections(int port, int n);
878 
880 
888  {
889  this->SetInputDataObject(port, input);
890  }
892  {
893  this->AddInputDataObject(port, input);
894  }
895 
897 
898 private:
899  vtkExecutive* Executive;
900  vtkInformationVector* InputPortInformation;
901  vtkInformationVector* OutputPortInformation;
902  vtkAlgorithmInternals* AlgorithmInternal;
903  static void ConnectionAdd(
904  vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
905  static void ConnectionRemove(
906  vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
907  static void ConnectionRemoveAllInput(vtkAlgorithm* consumer, int port);
908  static void ConnectionRemoveAllOutput(vtkAlgorithm* producer, int port);
909 
910 private:
911  vtkAlgorithm(const vtkAlgorithm&) = delete;
912  void operator=(const vtkAlgorithm&) = delete;
913 
914  double ProgressShift;
915  double ProgressScale;
916 };
917 
918 #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:64
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:699
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:470
virtual void SetInputDataObject(vtkDataObject *data)
Definition: vtkAlgorithm.h:462
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:685
int GetUpdatePiece()
These functions return the update extent for output ports that use piece extents.
Definition: vtkAlgorithm.h:695
vtkInformation * Information
Definition: vtkAlgorithm.h:726
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:521
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:887
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:536
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:510
unsigned long ErrorCode
The error code contains a possible error that occurred while reading or writing the file.
Definition: vtkAlgorithm.h:850
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:856
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:479
int GetUpdateNumberOfPieces()
These functions return the update extent for output ports that use piece extents.
Definition: vtkAlgorithm.h:697
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:91
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:680
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:678
vtkInformation * GetOutputInformation(int port)
Return the information object that is associated with a particular output port.
vtkProgressObserver * ProgressObserver
Definition: vtkAlgorithm.h:896
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:891
~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:855
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:879
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:63
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(...)