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=========================================================================*/
32#ifndef vtkAlgorithm_h
33#define vtkAlgorithm_h
34
35#include "vtkCommonExecutionModelModule.h" // For export macro
36#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_0_0
37#include "vtkObject.h"
38
40class vtkAlgorithmInternals;
42class vtkCollection;
43class vtkDataArray;
44class vtkDataObject;
45class vtkExecutive;
46class vtkInformation;
53
54class VTKCOMMONEXECUTIONMODEL_EXPORT vtkAlgorithm : public vtkObject
55{
56public:
57 static vtkAlgorithm* New();
58 vtkTypeMacro(vtkAlgorithm, vtkObject);
59 void PrintSelf(ostream& os, vtkIndent indent) override;
60
82 {
85 DEFAULT_PRECISION
86 };
87
93
99
105 virtual void SetExecutive(vtkExecutive* executive);
106
131 vtkInformation* request, vtkInformationVector** inInfo, vtkInformationVector* outInfo);
132
138 vtkInformation* request, vtkCollection* inInfo, vtkInformationVector* outInfo);
139
146 vtkInformationVector* outInfoVec, int requestFromOutputPort, vtkMTimeType* mtime);
147
155 virtual int ModifyRequest(vtkInformation* request, int when);
156
164
172
174
177 vtkGetObjectMacro(Information, vtkInformation);
180
185
190
192
195 void Register(vtkObjectBase* o) override;
196 void UnRegister(vtkObjectBase* o) override;
198
200
204 vtkSetMacro(AbortExecute, vtkTypeBool);
205 vtkGetMacro(AbortExecute, vtkTypeBool);
206 vtkBooleanMacro(AbortExecute, vtkTypeBool);
208
210
213 vtkGetMacro(Progress, double);
215
220 VTK_DEPRECATED_IN_9_0_0("Use vtkAlgorithm::UpdateProgress")
221 void SetProgress(double);
222
228 void UpdateProgress(double amount);
229
231
243 void SetProgressShiftScale(double shift, double scale);
244 vtkGetMacro(ProgressShift, double);
245 vtkGetMacro(ProgressScale, double);
247
249
256 void SetProgressText(const char* ptext);
257 vtkGetStringMacro(ProgressText);
259
261
265 vtkGetMacro(ErrorCode, unsigned long);
267
268 // left public for performance since it is used in inner loops
269 vtkTypeBool AbortExecute;
270
275 static vtkInformationIntegerKey* INPUT_IS_OPTIONAL();
279 static vtkInformationIntegerKey* INPUT_IS_REPEATABLE();
283 static vtkInformationInformationVectorKey* INPUT_REQUIRED_FIELDS();
287 static vtkInformationStringVectorKey* INPUT_REQUIRED_DATA_TYPE();
291 static vtkInformationInformationVectorKey* INPUT_ARRAYS_TO_PROCESS();
295 static vtkInformationIntegerKey* INPUT_PORT();
299 static vtkInformationIntegerKey* INPUT_CONNECTION();
300
309 static vtkInformationIntegerKey* CAN_PRODUCE_SUB_EXTENT();
310
323 static vtkInformationIntegerKey* CAN_HANDLE_PIECE_REQUEST();
324
326
334 virtual void SetInputArrayToProcess(
335 int idx, int port, int connection, int fieldAssociation, const char* name);
336 virtual void SetInputArrayToProcess(
337 int idx, int port, int connection, int fieldAssociation, int fieldAttributeType);
338 virtual void SetInputArrayToProcess(int idx, vtkInformation* info);
340
364 virtual void SetInputArrayToProcess(int idx, int port, int connection,
365 const char* fieldAssociation, const char* attributeTypeorName);
366
370 vtkInformation* GetInputArrayInformation(int idx);
371
372 // from here down are convenience methods that really are executive methods
373
377 void RemoveAllInputs();
378
383 vtkDataObject* GetOutputDataObject(int port);
384
389 vtkDataObject* GetInputDataObject(int port, int connection);
390
392
405 virtual void SetInputConnection(int port, vtkAlgorithmOutput* input);
406 virtual void SetInputConnection(vtkAlgorithmOutput* input);
408
410
419 virtual void AddInputConnection(int port, vtkAlgorithmOutput* input);
420 virtual void AddInputConnection(vtkAlgorithmOutput* input);
422
432 virtual void RemoveInputConnection(int port, vtkAlgorithmOutput* input);
433
437 virtual void RemoveInputConnection(int port, int idx);
438
442 virtual void RemoveAllInputConnections(int port);
443
452 virtual void SetInputDataObject(int port, vtkDataObject* data);
453 virtual void SetInputDataObject(vtkDataObject* data) { this->SetInputDataObject(0, data); }
454
460 virtual void AddInputDataObject(int port, vtkDataObject* data);
461 virtual void AddInputDataObject(vtkDataObject* data) { this->AddInputDataObject(0, data); }
462
471
476
481
486
491 vtkAlgorithm* GetInputAlgorithm(int port, int index, int& algPort);
492
496 vtkAlgorithm* GetInputAlgorithm(int port, int index);
497
502
507 vtkExecutive* GetInputExecutive(int port, int index);
508
513
522 vtkInformation* GetInputInformation(int port, int index);
523
528
537
539
542 virtual void Update(int port);
543 virtual void Update();
545
568 virtual vtkTypeBool Update(int port, vtkInformationVector* requests);
569
576
583 virtual int UpdatePiece(
584 int piece, int numPieces, int ghostLevels, const int extents[6] = nullptr);
585
591 virtual int UpdateExtent(const int extents[6]);
592
599 virtual int UpdateTimeStep(double time, int piece = -1, int numPieces = 1, int ghostLevels = 0,
600 const int extents[6] = nullptr);
601
605 virtual void UpdateInformation();
606
610 virtual void UpdateDataObject();
611
615 virtual void PropagateUpdateExtent();
616
620 virtual void UpdateWholeExtent();
621
626 void ConvertTotalInputToPortConnection(int ind, int& port, int& conn);
627
628 //======================================================================
629 // The following block of code is to support old style VTK applications. If
630 // you are using these calls there are better ways to do it in the new
631 // pipeline
632 //======================================================================
633
635
638 virtual void SetReleaseDataFlag(int);
639 virtual int GetReleaseDataFlag();
643
644 //========================================================================
645
647
654 int UpdateExtentIsEmpty(vtkInformation* pinfo, int extentType);
656
662
664
669 int* GetUpdateExtent() VTK_SIZEHINT(6) { return this->GetUpdateExtent(0); }
670 int* GetUpdateExtent(int port) VTK_SIZEHINT(6);
671 void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1, int& z0, int& z1)
672 {
673 this->GetUpdateExtent(0, x0, x1, y0, y1, z0, z1);
674 }
675 void GetUpdateExtent(int port, int& x0, int& x1, int& y0, int& y1, int& z0, int& z1);
676 void GetUpdateExtent(int extent[6]) { this->GetUpdateExtent(0, extent); }
677 void GetUpdateExtent(int port, int extent[6]);
679
681
686 int GetUpdatePiece() { return this->GetUpdatePiece(0); }
687 int GetUpdatePiece(int port);
690 int GetUpdateGhostLevel() { return this->GetUpdateGhostLevel(0); }
691 int GetUpdateGhostLevel(int port);
693
695
705 vtkGetObjectMacro(ProgressObserver, vtkProgressObserver);
707
708protected:
710 ~vtkAlgorithm() override;
711
712 // Keys used to indicate that input/output port information has been
713 // filled.
715
716 // Arbitrary extra information associated with this algorithm
718
724 virtual int FillInputPortInformation(int port, vtkInformation* info);
725
731 virtual int FillOutputPortInformation(int port, vtkInformation* info);
732
736 virtual void SetNumberOfInputPorts(int n);
737
741 virtual void SetNumberOfOutputPorts(int n);
742
743 // Helper methods to check input/output port index ranges.
744 int InputPortIndexInRange(int index, const char* action);
745 int OutputPortIndexInRange(int index, const char* action);
746
752
754
762 int GetInputArrayAssociation(int idx, int connection, vtkInformationVector** inputVector);
765
767
773 int idx, vtkInformationVector** inputVector, int& association);
775
777
785 vtkDataArray* GetInputArrayToProcess(int idx, int connection, vtkInformationVector** inputVector);
787 int idx, int connection, vtkInformationVector** inputVector, int& association);
789 vtkDataArray* GetInputArrayToProcess(int idx, vtkDataObject* input, int& association);
791
793
799 int idx, vtkInformationVector** inputVector, int& association);
801
803
812 int idx, int connection, vtkInformationVector** inputVector);
814 int idx, int connection, vtkInformationVector** inputVector, int& association);
818
827
835
837
841 vtkSetMacro(ErrorCode, unsigned long);
842 unsigned long ErrorCode;
844
845 // Progress/Update handling
846 double Progress;
848
849 // Garbage collection support.
851
852 // executive methods below
853
860 virtual void SetNthInputConnection(int port, int index, vtkAlgorithmOutput* input);
861
868 virtual void SetNumberOfInputConnections(int port, int n);
869
871
878 void SetInputDataInternal(int port, vtkDataObject* input)
879 {
880 this->SetInputDataObject(port, input);
881 }
882 void AddInputDataInternal(int port, vtkDataObject* input)
883 {
884 this->AddInputDataObject(port, input);
885 }
886
888
889private:
890 vtkExecutive* Executive;
891 vtkInformationVector* InputPortInformation;
892 vtkInformationVector* OutputPortInformation;
893 vtkAlgorithmInternals* AlgorithmInternal;
894 static void ConnectionAdd(
895 vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
896 static void ConnectionRemove(
897 vtkAlgorithm* producer, int producerPort, vtkAlgorithm* consumer, int consumerPort);
898 static void ConnectionRemoveAllInput(vtkAlgorithm* consumer, int port);
899 static void ConnectionRemoveAllOutput(vtkAlgorithm* producer, int port);
900
901private:
902 vtkAlgorithm(const vtkAlgorithm&) = delete;
903 void operator=(const vtkAlgorithm&) = delete;
904
905 double ProgressShift;
906 double ProgressScale;
907};
908
909#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.
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.
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
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)
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.
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)
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.
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()
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).
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.
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.
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 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.
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.
vtkProgressObserver * ProgressObserver
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)
~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
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: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
abstract base class for most VTK objects
Definition vtkObject.h:54
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(...)