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
49class vtkAlgorithmInternals;
51class vtkCollection;
52class vtkDataArray;
53class vtkDataObject;
54class vtkExecutive;
55class vtkInformation;
62
63class VTKCOMMONEXECUTIONMODEL_EXPORT vtkAlgorithm : public vtkObject
64{
65public:
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
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
469 virtual void AddInputDataObject(int port, vtkDataObject* data);
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
505 vtkAlgorithm* GetInputAlgorithm(int port, int index);
506
511
516 vtkExecutive* GetInputExecutive(int port, int index);
517
522
531 vtkInformation* GetInputInformation(int port, int index);
532
537
546
548
551 virtual void Update(int port);
552 virtual void Update();
554
577 virtual vtkTypeBool Update(int port, vtkInformationVector* requests);
578
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); }
679 int* GetUpdateExtent(int port) VTK_SIZEHINT(6);
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); }
696 int GetUpdatePiece(int port);
699 int GetUpdateGhostLevel() { return this->GetUpdateGhostLevel(0); }
700 int GetUpdateGhostLevel(int port);
702
704
714 vtkGetObjectMacro(ProgressObserver, vtkProgressObserver);
716
717protected:
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
733 virtual int FillInputPortInformation(int port, vtkInformation* info);
734
740 virtual int FillOutputPortInformation(int port, vtkInformation* info);
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
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);
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
887 void SetInputDataInternal(int port, vtkDataObject* input)
888 {
889 this->SetInputDataObject(port, input);
890 }
891 void AddInputDataInternal(int port, vtkDataObject* input)
892 {
893 this->AddInputDataObject(port, input);
894 }
895
897
898private:
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
910private:
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).
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:699
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: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
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:695
vtkInformation * Information
Definition: vtkAlgorithm.h:726
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:521
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: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.
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:536
unsigned long ErrorCode
The error code contains a possible error that occurred while reading or writing the file.
Definition: vtkAlgorithm.h:851
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:479
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:510
void ReportReferences(vtkGarbageCollector *) override
char * ProgressText
Definition: vtkAlgorithm.h:856
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:697
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:91
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:680
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:678
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.
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:891
~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: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
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: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.
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_DEPRECATED_IN_9_0_0(reason)
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
#define VTK_SIZEHINT(...)