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=========================================================================*/
100#ifndef vtkAlgorithm_h
101#define vtkAlgorithm_h
102
103#include "vtkCommonExecutionModelModule.h" // For export macro
104#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_0_0
105#include "vtkObject.h"
106
107class vtkAbstractArray;
108class vtkAlgorithmInternals;
110class vtkCollection;
111class vtkDataArray;
112class vtkDataObject;
113class vtkExecutive;
114class vtkInformation;
121
122class VTKCOMMONEXECUTIONMODEL_EXPORT vtkAlgorithm : public vtkObject
123{
124public:
125 static vtkAlgorithm* New();
126 vtkTypeMacro(vtkAlgorithm, vtkObject);
127 void PrintSelf(ostream& os, vtkIndent indent) override;
128
150 {
153 DEFAULT_PRECISION
154 };
155
161
167
173 virtual void SetExecutive(vtkExecutive* executive);
174
199 vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo);
200
206 vtkInformation* request, vtkCollection* inInfo, vtkInformationVector* outInfo);
207
214 vtkInformationVector* outInfoVec, int requestFromOutputPort, vtkMTimeType* mtime);
215
223 virtual int ModifyRequest(vtkInformation* request, int when);
224
232
240
242
245 vtkGetObjectMacro(Information, vtkInformation);
248
253
258
260
263 void Register(vtkObjectBase* o) override;
264 void UnRegister(vtkObjectBase* o) override;
266
268
272 vtkSetMacro(AbortExecute, vtkTypeBool);
273 vtkGetMacro(AbortExecute, vtkTypeBool);
274 vtkBooleanMacro(AbortExecute, vtkTypeBool);
276
278
281 vtkGetMacro(Progress, double);
283
288 VTK_DEPRECATED_IN_9_0_0("Use vtkAlgorithm::UpdateProgress")
289 void SetProgress(double);
290
296 void UpdateProgress(double amount);
297
299
311 void SetProgressShiftScale(double shift, double scale);
312 vtkGetMacro(ProgressShift, double);
313 vtkGetMacro(ProgressScale, double);
315
317
324 void SetProgressText(const char* ptext);
325 vtkGetStringMacro(ProgressText);
327
329
333 vtkGetMacro(ErrorCode, unsigned long);
335
336 // left public for performance since it is used in inner loops
337 vtkTypeBool AbortExecute;
338
343 static vtkInformationIntegerKey* INPUT_IS_OPTIONAL();
347 static vtkInformationIntegerKey* INPUT_IS_REPEATABLE();
351 static vtkInformationInformationVectorKey* INPUT_REQUIRED_FIELDS();
355 static vtkInformationStringVectorKey* INPUT_REQUIRED_DATA_TYPE();
359 static vtkInformationInformationVectorKey* INPUT_ARRAYS_TO_PROCESS();
363 static vtkInformationIntegerKey* INPUT_PORT();
367 static vtkInformationIntegerKey* INPUT_CONNECTION();
368
377 static vtkInformationIntegerKey* CAN_PRODUCE_SUB_EXTENT();
378
391 static vtkInformationIntegerKey* CAN_HANDLE_PIECE_REQUEST();
392
394
402 virtual void SetInputArrayToProcess(
403 int idx, int port, int connection, int fieldAssociation, const char* name);
404 virtual void SetInputArrayToProcess(
405 int idx, int port, int connection, int fieldAssociation, int fieldAttributeType);
406 virtual void SetInputArrayToProcess(int idx, vtkInformation* info);
408
432 virtual void SetInputArrayToProcess(int idx, int port, int connection,
433 const char* fieldAssociation, const char* attributeTypeorName);
434
438 vtkInformation* GetInputArrayInformation(int idx);
439
440 // from here down are convenience methods that really are executive methods
441
445 void RemoveAllInputs();
446
451 vtkDataObject* GetOutputDataObject(int port);
452
457 vtkDataObject* GetInputDataObject(int port, int connection);
458
460
473 virtual void SetInputConnection(int port, vtkAlgorithmOutput* input);
474 virtual void SetInputConnection(vtkAlgorithmOutput* input);
476
478
487 virtual void AddInputConnection(int port, vtkAlgorithmOutput* input);
488 virtual void AddInputConnection(vtkAlgorithmOutput* input);
490
500 virtual void RemoveInputConnection(int port, vtkAlgorithmOutput* input);
501
505 virtual void RemoveInputConnection(int port, int idx);
506
510 virtual void RemoveAllInputConnections(int port);
511
520 virtual void SetInputDataObject(int port, vtkDataObject* data);
521 virtual void SetInputDataObject(vtkDataObject* data) { this->SetInputDataObject(0, data); }
522
528 virtual void AddInputDataObject(int port, vtkDataObject* data);
529 virtual void AddInputDataObject(vtkDataObject* data) { this->AddInputDataObject(0, data); }
530
539
544
549
554
559 vtkAlgorithm* GetInputAlgorithm(int port, int index, int& algPort);
560
564 vtkAlgorithm* GetInputAlgorithm(int port, int index);
565
570
575 vtkExecutive* GetInputExecutive(int port, int index);
576
581
590 vtkInformation* GetInputInformation(int port, int index);
591
596
605
607
610 virtual void Update(int port);
611 virtual void Update();
613
636 virtual vtkTypeBool Update(int port, vtkInformationVector* requests);
637
644
651 virtual int UpdatePiece(
652 int piece, int numPieces, int ghostLevels, const int extents[6] = nullptr);
653
659 virtual int UpdateExtent(const int extents[6]);
660
667 virtual int UpdateTimeStep(double time, int piece = -1, int numPieces = 1, int ghostLevels = 0,
668 const int extents[6] = nullptr);
669
673 virtual void UpdateInformation();
674
678 virtual void UpdateDataObject();
679
683 virtual void PropagateUpdateExtent();
684
688 virtual void UpdateWholeExtent();
689
694 void ConvertTotalInputToPortConnection(int ind, int& port, int& conn);
695
696 //======================================================================
697 // The following block of code is to support old style VTK applications. If
698 // you are using these calls there are better ways to do it in the new
699 // pipeline
700 //======================================================================
701
703
706 virtual void SetReleaseDataFlag(int);
707 virtual int GetReleaseDataFlag();
711
712 //========================================================================
713
715
722 int UpdateExtentIsEmpty(vtkInformation* pinfo, int extentType);
724
730
732
737 int* GetUpdateExtent() VTK_SIZEHINT(6) { return this->GetUpdateExtent(0); }
738 int* GetUpdateExtent(int port) VTK_SIZEHINT(6);
739 void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1, int& z0, int& z1)
740 {
741 this->GetUpdateExtent(0, x0, x1, y0, y1, z0, z1);
742 }
743 void GetUpdateExtent(int port, int& x0, int& x1, int& y0, int& y1, int& z0, int& z1);
744 void GetUpdateExtent(int extent[6]) { this->GetUpdateExtent(0, extent); }
745 void GetUpdateExtent(int port, int extent[6]);
747
749
754 int GetUpdatePiece() { return this->GetUpdatePiece(0); }
755 int GetUpdatePiece(int port);
758 int GetUpdateGhostLevel() { return this->GetUpdateGhostLevel(0); }
759 int GetUpdateGhostLevel(int port);
761
763
773 vtkGetObjectMacro(ProgressObserver, vtkProgressObserver);
775
776protected:
778 ~vtkAlgorithm() override;
779
780 // Keys used to indicate that input/output port information has been
781 // filled.
783
784 // Arbitrary extra information associated with this algorithm
786
792 virtual int FillInputPortInformation(int port, vtkInformation* info);
793
799 virtual int FillOutputPortInformation(int port, vtkInformation* info);
800
804 virtual void SetNumberOfInputPorts(int n);
805
809 virtual void SetNumberOfOutputPorts(int n);
810
811 // Helper methods to check input/output port index ranges.
812 int InputPortIndexInRange(int index, const char* action);
813 int OutputPortIndexInRange(int index, const char* action);
814
820
822
830 int GetInputArrayAssociation(int idx, int connection, vtkInformationVector** inputVector);
833
835
841 int idx, vtkInformationVector** inputVector, int& association);
843
845
853 vtkDataArray* GetInputArrayToProcess(int idx, int connection, vtkInformationVector** inputVector);
855 int idx, int connection, vtkInformationVector** inputVector, int& association);
857 vtkDataArray* GetInputArrayToProcess(int idx, vtkDataObject* input, int& association);
859
861
867 int idx, vtkInformationVector** inputVector, int& association);
869
871
880 int idx, int connection, vtkInformationVector** inputVector);
882 int idx, int connection, vtkInformationVector** inputVector, int& association);
886
895
903
905
909 vtkSetMacro(ErrorCode, unsigned long);
910 unsigned long ErrorCode;
912
913 // Progress/Update handling
914 double Progress;
916
917 // Garbage collection support.
919
920 // executive methods below
921
928 virtual void SetNthInputConnection(int port, int index, vtkAlgorithmOutput* input);
929
936 virtual void SetNumberOfInputConnections(int port, int n);
937
939
946 void SetInputDataInternal(int port, vtkDataObject* input)
947 {
948 this->SetInputDataObject(port, input);
949 }
950 void AddInputDataInternal(int port, vtkDataObject* input)
951 {
952 this->AddInputDataObject(port, input);
953 }
954
956
957private:
958 vtkExecutive* Executive;
959 vtkInformationVector* InputPortInformation;
960 vtkInformationVector* OutputPortInformation;
961 vtkAlgorithmInternals* AlgorithmInternal;
962 static void ConnectionAdd(
963 vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
964 static void ConnectionRemove(
965 vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
966 static void ConnectionRemoveAllInput(vtkAlgorithm* consumer, int port);
967 static void ConnectionRemoveAllOutput(vtkAlgorithm* producer, int port);
968
969private:
970 vtkAlgorithm(const vtkAlgorithm&) = delete;
971 void operator=(const vtkAlgorithm&) = delete;
972
973 double ProgressShift;
974 double ProgressScale;
975};
976
977#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:123
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:758
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:529
virtual void SetInputDataObject(vtkDataObject *data)
Definition: vtkAlgorithm.h:521
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:744
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:754
vtkInformation * Information
Definition: vtkAlgorithm.h:785
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:580
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:946
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:595
unsigned long ErrorCode
The error code contains a possible error that occurred while reading or writing the file.
Definition: vtkAlgorithm.h:910
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:538
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:569
void ReportReferences(vtkGarbageCollector *) override
char * ProgressText
Definition: vtkAlgorithm.h:915
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:756
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:150
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:739
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:737
vtkProgressObserver * ProgressObserver
Definition: vtkAlgorithm.h:955
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:950
~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:914
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:938
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:82
Basic class to optionally replace vtkAlgorithm progress functionality.
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_DEPRECATED_IN_9_0_0(reason)
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
#define VTK_SIZEHINT(...)