VTK  9.0.1
vtkThreadedImageAlgorithm.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkThreadedImageAlgorithm.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 =========================================================================*/
28 #ifndef vtkThreadedImageAlgorithm_h
29 #define vtkThreadedImageAlgorithm_h
30 
31 #include "vtkCommonExecutionModelModule.h" // For export macro
32 #include "vtkImageAlgorithm.h"
33 
34 class vtkImageData;
35 class vtkMultiThreader;
36 
37 class VTKCOMMONEXECUTIONMODEL_EXPORT vtkThreadedImageAlgorithm : public vtkImageAlgorithm
38 {
39 public:
41  void PrintSelf(ostream& os, vtkIndent indent) override;
42 
49  virtual void ThreadedRequestData(vtkInformation* request, vtkInformationVector** inputVector,
50  vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData,
51  int extent[6], int threadId);
52 
53  // also support the old signature
54  virtual void ThreadedExecute(
55  vtkImageData* inData, vtkImageData* outData, int extent[6], int threadId);
56 
58 
61  vtkGetMacro(EnableSMP, bool);
62  vtkSetMacro(EnableSMP, bool);
64 
66 
69  static void SetGlobalDefaultEnableSMP(bool enable);
72 
74 
78  vtkSetVector3Macro(MinimumPieceSize, int);
79  vtkGetVector3Macro(MinimumPieceSize, int);
81 
83 
89  vtkSetMacro(DesiredBytesPerPiece, vtkIdType);
90  vtkGetMacro(DesiredBytesPerPiece, vtkIdType);
92 
94 
101  vtkSetClampMacro(SplitMode, int, 0, 2);
102  void SetSplitModeToSlab() { this->SetSplitMode(SLAB); }
103  void SetSplitModeToBeam() { this->SetSplitMode(BEAM); }
104  void SetSplitModeToBlock() { this->SetSplitMode(BLOCK); }
105  vtkGetMacro(SplitMode, int);
107 
109 
113  vtkSetClampMacro(NumberOfThreads, int, 1, VTK_MAX_THREADS);
114  vtkGetMacro(NumberOfThreads, int);
116 
120  virtual int SplitExtent(int splitExt[6], int startExt[6], int num, int total);
121 
122 protected:
125 
128 
129  bool EnableSMP;
131 
133  {
134  SLAB = 0,
135  BEAM = 1,
136  BLOCK = 2
137  };
138 
140  int SplitPath[3];
142  int MinimumPieceSize[3];
144 
149  int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
150  vtkInformationVector* outputVector) override;
151 
158  virtual void SMPRequestData(vtkInformation* request, vtkInformationVector** inputVector,
159  vtkInformationVector* outputVector, vtkImageData*** inData, vtkImageData** outData,
160  vtkIdType begin, vtkIdType end, vtkIdType pieces, int extent[6]);
161 
168  virtual void PrepareImageData(vtkInformationVector** inputVector,
169  vtkInformationVector* outputVector, vtkImageData*** inDataObjects = nullptr,
170  vtkImageData** outDataObjects = nullptr);
171 
172 private:
174  void operator=(const vtkThreadedImageAlgorithm&) = delete;
175 
176  friend class vtkThreadedImageAlgorithmFunctor;
177 };
178 
179 #endif
Generic algorithm superclass for image algs.
topologically and geometrically regular array of data
Definition: vtkImageData.h:42
a simple class to control print indentation
Definition: vtkIndent.h:34
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
A class for performing multithreaded execution.
Generic filter that has one input.
virtual void SMPRequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector, vtkImageData ***inData, vtkImageData **outData, vtkIdType begin, vtkIdType end, vtkIdType pieces, int extent[6])
Execute ThreadedRequestData for the given set of pieces.
~vtkThreadedImageAlgorithm() override
virtual void ThreadedExecute(vtkImageData *inData, vtkImageData *outData, int extent[6], int threadId)
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
This is called by the superclass.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual int SplitExtent(int splitExt[6], int startExt[6], int num, int total)
Putting this here until I merge graphics and imaging streaming.
virtual void PrepareImageData(vtkInformationVector **inputVector, vtkInformationVector *outputVector, vtkImageData ***inDataObjects=nullptr, vtkImageData **outDataObjects=nullptr)
Allocate space for output data and copy attributes from first input.
virtual void ThreadedRequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector, vtkImageData ***inData, vtkImageData **outData, int extent[6], int threadId)
If the subclass does not define an Execute method, then the task will be broken up,...
static bool GetGlobalDefaultEnableSMP()
static void SetGlobalDefaultEnableSMP(bool enable)
Global Disable SMP for all derived Imaging filters.
@ extent
Definition: vtkX3D.h:351
int vtkIdType
Definition: vtkType.h:338