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
99class vtkAlgorithmInternals;
101class vtkCollection;
102class vtkDataArray;
103class vtkDataObject;
104class vtkExecutive;
105class vtkInformation;
112
113class VTKCOMMONEXECUTIONMODEL_EXPORT vtkAlgorithm : public vtkObject
114{
115public:
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
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
628
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
767protected:
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
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);
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
948private:
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
960private:
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).
vtkAlgorithmOutput * GetInputConnection(int port, int index)
Get the algorithm output port connected to an input port.
int GetUpdatePiece(int port)
These functions return the update extent for output ports that use piece extents.
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...
vtkDataArray * GetInputArrayToProcess(int idx, int connection, vtkInformationVector **inputVector)
Filters that have multiple connections on one port can use this signature.
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 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
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.
vtkInformation * GetOutputPortInformation(int port)
Get the information object associated with an output port.
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
vtkInformation * GetInputArrayFieldInformation(int idx, vtkInformationVector **inputVector)
This method takes in an index (as specified in SetInputArrayToProcess) and a pipeline information vec...
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
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.
vtkExecutive * GetInputExecutive()
Equivalent to GetInputExecutive(0, 0)
Definition: vtkAlgorithm.h:571
vtkExecutive * GetInputExecutive(int port, int index)
Returns the executive associated with a particular input connection.
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.
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...
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.
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, int connection, vtkInformationVector **inputVector, int &association)
Filters that have multiple connections on one port can use this signature.
static vtkInformationIntegerKey * PORT_REQUIREMENTS_FILLED()
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.
void ReleaseDataFlagOn()
Turn release data flag on or off for all output ports.
vtkDataArray * GetInputArrayToProcess(int idx, int connection, vtkInformationVector **inputVector, int &association)
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...
vtkInformation * GetInputInformation()
Equivalent to GetInputInformation(0, 0)
Definition: vtkAlgorithm.h:586
unsigned long ErrorCode
The error code contains a possible error that occurred while reading or writing the file.
Definition: vtkAlgorithm.h:901
void GetUpdateExtent(int port, int extent[6])
These functions return the update extent for output ports that use 3D extents.
vtkInformation * GetOutputInformation(int port)
Return the information object that is associated with a particular output port.
vtkInformation * GetInputPortInformation(int port)
Get the information object associated with an input port.
int GetUpdateGhostLevel(int port)
These functions return the update extent for output ports that use piece extents.
int * GetUpdateExtent(int port)
These functions return the update extent for output ports that use 3D extents.
virtual void AddInputDataObject(int port, vtkDataObject *data)
Add the data-object as an input to this given port.
virtual vtkExecutive * CreateDefaultExecutive()
Create a default executive.
vtkAlgorithmOutput * GetOutputPort()
Definition: vtkAlgorithm.h:529
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...
vtkAlgorithm * GetInputAlgorithm()
Equivalent to GetInputAlgorithm(0, 0).
Definition: vtkAlgorithm.h:560
void ReportReferences(vtkGarbageCollector *) override
char * ProgressText
Definition: vtkAlgorithm.h:906
vtkAbstractArray * GetInputAbstractArrayToProcess(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.
static vtkAlgorithm * New()
void SetProgressObserver(vtkProgressObserver *)
If an ProgressObserver is set, the algorithm will report progress through it rather than directly.
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...
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.
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.
vtkDataArray * GetInputArrayToProcess(int idx, vtkDataObject *input)
Filters that have multiple connections on one port can use this signature.
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.
virtual void PropagateUpdateExtent()
Propagate meta-data upstream.
virtual void Update(int port)
Bring this algorithm's outputs up-to-date.
vtkExecutive * GetExecutive()
Get this algorithm's executive.
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.
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.
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.
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 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
vtkDataArray * GetInputArrayToProcess(int idx, vtkDataObject *input, 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.
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, vtkDataObject *input, int &association)
Filters that have multiple connections on one port can use this signature.
int HasExecutive()
Check whether this algorithm has an assigned executive.
vtkAbstractArray * GetInputAbstractArrayToProcess(int idx, vtkDataObject *input)
Filters that have multiple connections on one port can use this signature.
int * GetUpdateExtent()
These functions return the update extent for output ports that use 3D extents.
Definition: vtkAlgorithm.h:728
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.
vtkAlgorithmOutput * GetOutputPort(int index)
Get a proxy object corresponding to the given output port of this algorithm.
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.
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
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.
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(...)