VTK  9.3.0
vtkAlgorithm.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
26#ifndef vtkAlgorithm_h
27#define vtkAlgorithm_h
28
29#include "vtkCommonExecutionModelModule.h" // For export macro
30#include "vtkObject.h"
31
32VTK_ABI_NAMESPACE_BEGIN
34class vtkAlgorithmInternals;
36class vtkCollection;
37class vtkDataArray;
38class vtkDataObject;
39class vtkExecutive;
40class vtkInformation;
47
48class VTKCOMMONEXECUTIONMODEL_EXPORT vtkAlgorithm : public vtkObject
49{
50public:
51 static vtkAlgorithm* New();
52 vtkTypeMacro(vtkAlgorithm, vtkObject);
53 void PrintSelf(ostream& os, vtkIndent indent) override;
54
76 {
79 DEFAULT_PRECISION
80 };
81
87
93
99 virtual void SetExecutive(vtkExecutive* executive);
100
125 vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo);
126
132 vtkInformation* request, vtkCollection* inInfo, vtkInformationVector* outInfo);
133
140 vtkInformationVector* outInfoVec, int requestFromOutputPort, vtkMTimeType* mtime);
141
149 virtual int ModifyRequest(vtkInformation* request, int when);
150
158
166
168
171 vtkGetObjectMacro(Information, vtkInformation);
174
179
184
186
189 bool UsesGarbageCollector() const override { return true; }
191
196
198
202 vtkSetMacro(AbortExecute, vtkTypeBool);
203 vtkGetMacro(AbortExecute, vtkTypeBool);
204 vtkBooleanMacro(AbortExecute, vtkTypeBool);
206
208
211 vtkGetMacro(Progress, double);
213
219 void UpdateProgress(double amount);
220
225
227
233 {
234 this->ContainerAlgorithm = containerAlg;
235 };
236 vtkAlgorithm* GetContainerAlgorithm() { return this->ContainerAlgorithm; };
238
240
247 vtkSetMacro(AbortOutput, bool);
248 vtkGetMacro(AbortOutput, bool);
250
252
264 void SetProgressShiftScale(double shift, double scale);
265 vtkGetMacro(ProgressShift, double);
266 vtkGetMacro(ProgressScale, double);
268
270
277 void SetProgressText(const char* ptext);
278 vtkGetStringMacro(ProgressText);
280
282
286 vtkGetMacro(ErrorCode, unsigned long);
288
289 // left public for performance since it is used in inner loops
290 std::atomic<vtkTypeBool> AbortExecute;
291
321
331
345
351
353
362 int idx, int port, int connection, int fieldAssociation, const char* name);
364 int idx, int port, int connection, int fieldAssociation, int fieldAttributeType);
365 virtual void SetInputArrayToProcess(int idx, vtkInformation* info);
367
391 virtual void SetInputArrayToProcess(int idx, int port, int connection,
392 const char* fieldAssociation, const char* attributeTypeorName);
393
398
399 // from here down are convenience methods that really are executive methods
400
405
411
416 vtkDataObject* GetInputDataObject(int port, int connection);
417
419
432 virtual void SetInputConnection(int port, vtkAlgorithmOutput* input);
435
437
446 virtual void AddInputConnection(int port, vtkAlgorithmOutput* input);
449
459 virtual void RemoveInputConnection(int port, vtkAlgorithmOutput* input);
460
464 virtual void RemoveInputConnection(int port, int idx);
465
469 virtual void RemoveAllInputConnections(int port);
470
479 virtual void SetInputDataObject(int port, vtkDataObject* data);
480 virtual void SetInputDataObject(vtkDataObject* data) { this->SetInputDataObject(0, data); }
481
487 virtual void AddInputDataObject(int port, vtkDataObject* data);
488 virtual void AddInputDataObject(vtkDataObject* data) { this->AddInputDataObject(0, data); }
489
498
503
508
513
518 vtkAlgorithm* GetInputAlgorithm(int port, int index, int& algPort);
519
523 vtkAlgorithm* GetInputAlgorithm(int port, int index);
524
529
534 vtkExecutive* GetInputExecutive(int port, int index);
535
540
549 vtkInformation* GetInputInformation(int port, int index);
550
555
564
566
569 virtual void Update(int port);
570 virtual void Update();
572
595 virtual vtkTypeBool Update(int port, vtkInformationVector* requests);
596
603
610 virtual int UpdatePiece(
611 int piece, int numPieces, int ghostLevels, const int extents[6] = nullptr);
612
618 virtual int UpdateExtent(const int extents[6]);
619
626 virtual int UpdateTimeStep(double time, int piece = -1, int numPieces = 1, int ghostLevels = 0,
627 const int extents[6] = nullptr);
628
632 virtual void UpdateInformation();
633
637 virtual void UpdateDataObject();
638
642 virtual void PropagateUpdateExtent();
643
647 virtual void UpdateWholeExtent();
648
653 void ConvertTotalInputToPortConnection(int ind, int& port, int& conn);
654
655 //======================================================================
656 // The following block of code is to support old style VTK applications. If
657 // you are using these calls there are better ways to do it in the new
658 // pipeline
659 //======================================================================
660
662
670
671 //========================================================================
672
674
681 int UpdateExtentIsEmpty(vtkInformation* pinfo, int extentType);
683
689
691
696 int* GetUpdateExtent() VTK_SIZEHINT(6) { return this->GetUpdateExtent(0); }
697 int* GetUpdateExtent(int port) VTK_SIZEHINT(6);
698 void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1, int& z0, int& z1)
699 {
700 this->GetUpdateExtent(0, x0, x1, y0, y1, z0, z1);
701 }
702 void GetUpdateExtent(int port, int& x0, int& x1, int& y0, int& y1, int& z0, int& z1);
703 void GetUpdateExtent(int extent[6]) { this->GetUpdateExtent(0, extent); }
704 void GetUpdateExtent(int port, int extent[6]);
706
708
713 int GetUpdatePiece() { return this->GetUpdatePiece(0); }
714 int GetUpdatePiece(int port);
717 int GetUpdateGhostLevel() { return this->GetUpdateGhostLevel(0); }
718 int GetUpdateGhostLevel(int port);
720
722
732 vtkGetObjectMacro(ProgressObserver, vtkProgressObserver);
734
735protected:
737 ~vtkAlgorithm() override;
738
739 // Time stamp to store the last time any filter was aborted.
741
742 // Time stamp to store the last time this filter checked for an
743 // abort.
745
746 // Keys used to indicate that input/output port information has been
747 // filled.
749
750 // Arbitrary extra information associated with this algorithm
752
758
764 virtual int FillInputPortInformation(int port, vtkInformation* info);
765
771 virtual int FillOutputPortInformation(int port, vtkInformation* info);
772
776 virtual void SetNumberOfInputPorts(int n);
777
781 virtual void SetNumberOfOutputPorts(int n);
782
783 // Helper methods to check input/output port index ranges.
784 int InputPortIndexInRange(int index, const char* action);
785 int OutputPortIndexInRange(int index, const char* action);
786
792
794
802 int GetInputArrayAssociation(int idx, int connection, vtkInformationVector** inputVector);
805
807
813 int idx, vtkInformationVector** inputVector, int& association);
815
817
825 vtkDataArray* GetInputArrayToProcess(int idx, int connection, vtkInformationVector** inputVector);
827 int idx, int connection, vtkInformationVector** inputVector, int& association);
829 vtkDataArray* GetInputArrayToProcess(int idx, vtkDataObject* input, int& association);
831
833
839 int idx, vtkInformationVector** inputVector, int& association);
841
843
852 int idx, int connection, vtkInformationVector** inputVector);
854 int idx, int connection, vtkInformationVector** inputVector, int& association);
858
867
875
877
881 vtkSetMacro(ErrorCode, unsigned long);
882 unsigned long ErrorCode;
884
885 // Progress/Update handling
886 double Progress;
888
889 // Garbage collection support.
891
892 // executive methods below
893
900 virtual void SetNthInputConnection(int port, int index, vtkAlgorithmOutput* input);
901
908 virtual void SetNumberOfInputConnections(int port, int n);
909
911
918 void SetInputDataInternal(int port, vtkDataObject* input)
919 {
920 this->SetInputDataObject(port, input);
921 }
922 void AddInputDataInternal(int port, vtkDataObject* input)
923 {
924 this->AddInputDataObject(port, input);
925 }
926
928
929private:
930 vtkExecutive* Executive;
931 vtkInformationVector* InputPortInformation;
932 vtkInformationVector* OutputPortInformation;
933 vtkAlgorithmInternals* AlgorithmInternal;
934 static void ConnectionAdd(
935 vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
936 static void ConnectionRemove(
937 vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
938 static void ConnectionRemoveAllInput(vtkAlgorithm* consumer, int port);
939 static void ConnectionRemoveAllOutput(vtkAlgorithm* producer, int port);
940
941 vtkAlgorithm(const vtkAlgorithm&) = delete;
942 void operator=(const vtkAlgorithm&) = delete;
943
944 double ProgressShift;
945 double ProgressScale;
946 vtkAlgorithm* ContainerAlgorithm;
947 bool AbortOutput;
948};
949
950VTK_ABI_NAMESPACE_END
951#endif
Abstract superclass for all arrays.
Proxy object to connect input/output ports.
Superclass for all sources, filters, and sinks in VTK.
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.
void UpdateProgress(double amount)
Update the progress of the process object.
vtkInformation * GetInputArrayInformation(int idx)
Get the info object for the specified input array to this algorithm.
int GetInputArrayAssociation(int idx, vtkInformationVector **inputVector)
Get the association of the actual data array for the input array specified by idx,...
virtual void RemoveInputConnection(int port, vtkAlgorithmOutput *input)
Remove a connection from the given input port index.
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.
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)
virtual void SetInputDataObject(vtkDataObject *data)
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.
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.
vtkInformation * Information
vtkAlgorithm * GetContainerAlgorithm()
Set/get a Container algorithm for this algorithm.
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.
void SetContainerAlgorithm(vtkAlgorithm *containerAlg)
Set/get a Container algorithm for this algorithm.
vtkDataObject * GetOutputDataObject(int port)
Get the data object that will contain the algorithm output for the given port.
vtkExecutive * GetInputExecutive()
Equivalent to GetInputExecutive(0, 0)
vtkExecutive * GetInputExecutive(int port, int index)
Returns the executive associated with a particular input connection.
virtual void RemoveAllInputConnections(int port)
Removes all input connections.
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 void AddInputConnection(vtkAlgorithmOutput *input)
Add a connection to the given input port index.
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.
virtual void SetInputArrayToProcess(int idx, int port, int connection, const char *fieldAssociation, const char *attributeTypeorName)
String based versions of SetInputArrayToProcess().
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.
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.
bool CheckUpstreamAbort()
Checks to see if an upstream filter has been aborted.
void SetProgressShiftScale(double shift, double scale)
Specify the shift and scale values to use to apply to the progress amount when UpdateProgress is call...
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)
unsigned long ErrorCode
The error code contains a possible error that occurred while reading or writing the file.
void GetUpdateExtent(int port, int extent[6])
These functions return the update extent for output ports that use 3D extents.
virtual void SetReleaseDataFlag(vtkTypeBool)
Turn release data flag on or off for all output ports.
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 SetInputArrayToProcess(int idx, int port, int connection, int fieldAssociation, const char *name)
Set the input data arrays that this algorithm will process.
static vtkTimeStamp LastAbortTime
vtkTypeBool HasExecutive()
Check whether this algorithm has an assigned executive.
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()
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).
bool CheckAbort()
Checks to see if this filter should abort.
void ReportReferences(vtkGarbageCollector *) override
char * ProgressText
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.
virtual void SetInputArrayToProcess(int idx, vtkInformation *info)
Set the input data arrays that this algorithm will process.
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...
void SetAbortExecuteAndUpdateTime()
Set AbortExecute Flag and update LastAbortTime.
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.
virtual void SetInputConnection(int port, vtkAlgorithmOutput *input)
Set the connection for the given input port index.
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.
virtual void SetInputConnection(vtkAlgorithmOutput *input)
Set the connection for the given input port index.
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.
bool UsesGarbageCollector() const override
Participate in garbage collection.
virtual vtkTypeBool GetReleaseDataFlag()
Turn release data flag on or off for all output ports.
int GetNumberOfInputConnections(int port)
Get the number of inputs currently connected to a port.
void SetProgressText(const char *ptext)
Set the current text message associated with the progress state.
virtual void PropagateUpdateExtent()
Propagate meta-data upstream.
virtual void Update(int port)
Bring this algorithm's outputs up-to-date.
std::atomic< vtkTypeBool > AbortExecute
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.
int GetUpdateNumberOfPieces()
These functions return the update extent for output ports that use piece extents.
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.
virtual void SetInputDataObject(int port, vtkDataObject *data)
Sets the data-object as an input on the given port index.
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.
vtkDataArray * GetInputArrayToProcess(int idx, vtkDataObject *input, int &association)
Filters that have multiple connections on one port can use this signature.
vtkTimeStamp LastAbortCheckTime
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.
virtual void RemoveInputConnection(int port, int idx)
Remove a connection given by index idx.
virtual void SetInputArrayToProcess(int idx, int port, int connection, int fieldAssociation, int fieldAttributeType)
Set the input data arrays that this algorithm will process.
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.
vtkProgressObserver * ProgressObserver
vtkDataObject * GetInputDataObject(int port, int connection)
Get the data object that will contain the algorithm input for the given port and given connection.
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)
~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)
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
virtual void AddInputConnection(int port, vtkAlgorithmOutput *input)
Add a connection to the given input port index.
void RemoveAllInputs()
Remove all the input data.
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
abstract superclass for arrays of numeric data
general representation of visualization data
Superclass for all pipeline executives in VTK.
Detect and break reference loops.
a simple class to control print indentation
Definition vtkIndent.h:29
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 vtkObject.h:49
Basic class to optionally replace vtkAlgorithm progress functionality.
record modification and/or execution time
static vtkInformationStringVectorKey * INPUT_REQUIRED_DATA_TYPE()
static vtkInformationIntegerKey * INPUT_IS_OPTIONAL()
Keys used to specify input port requirements.
static vtkInformationIntegerKey * CAN_HANDLE_PIECE_REQUEST()
Key that tells the pipeline that a particular algorithm can or cannot handle piece request.
static vtkInformationIntegerKey * INPUT_PORT()
static vtkInformationInformationVectorKey * INPUT_REQUIRED_FIELDS()
static vtkInformationInformationVectorKey * INPUT_ARRAYS_TO_PROCESS()
static vtkInformationIntegerKey * INPUT_CONNECTION()
static vtkInformationIntegerKey * CAN_PRODUCE_SUB_EXTENT()
This key tells the executive that a particular output port is capable of producing an arbitrary subex...
static vtkInformationIntegerKey * ABORTED()
static vtkInformationIntegerKey * INPUT_IS_REPEATABLE()
int vtkTypeBool
Definition vtkABI.h:64
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:270
#define VTK_SIZEHINT(...)