MeVisLab Toolbox Reference
mlModuleBackgroundTask.h
Go to the documentation of this file.
1 /*************************************************************************************
2 **
3 ** Copyright 2009, MeVis Medical Solutions AG
4 **
5 ** The user may use this file in accordance with the license agreement provided with
6 ** the Software or, alternatively, in accordance with the terms contained in a
7 ** written agreement between the user and MeVis Medical Solutions AG.
8 **
9 ** For further information use the contact form at https://www.mevislab.de/contact
10 **
11 **************************************************************************************/
12 
13 #ifndef ML_MODULE_BACKGROUND_TASK_H
14 #define ML_MODULE_BACKGROUND_TASK_H
15 
16 // Local includes
18 
20 
21 ML_START_NAMESPACE
22 
23 class ProcessAllPagesHandler;
24 
27 public:
29  PagedImageProperties(const PagedImage& pagedImage):
30  MedicalImageProperties(pagedImage),
31  _pageExtent(pagedImage.getPageExtent())
32  {
33  // Clear the image properties, since they are not thread-safe!
35  }
36 
38  const ImageVector& getPageExtent() const { return _pageExtent; }
39 
40 protected:
42 };
43 
44 //----------------------------------------------------------------------------------------------------
45 
51 {
52 public:
53  ModuleBackgroundTask(Module* module, FloatField* progressField = nullptr, StringField* statusField= nullptr);
54 
56 
59  void setProgressField(FloatField* field) { _progressField = field; }
60 
63  void setStatusField(StringField* field) { _statusField = field; }
64 
67  bool hasProgressField() { return !_progressField.isNull(); }
68 
71  bool hasStatusField() { return !_statusField.isNull(); }
72 
75  void setStatusString(const std::string& status) override;
76 
79  void setProgress(float progress) override;
80 
83  AsyncTileRequest requestTile(int inputImageIndex, const SubImageBox& box, MLDataType type, const ScaleShiftData& shift = ScaleShiftData(),
84  int getTileFlags = ImagingBackgroundTask::UseMemoryManager);
85 
92  AsyncTileRequest requestTileWithExternalBuffer(int inputImageIndex, const SubImageBox& box, MLDataType type, const ScaleShiftData& shift,
93  ManagedSubImage* externalBuffer, int getTileFlags = ImagingBackgroundTask::ExternalBuffer);
94 
98 
116 
123 
130  virtual bool shouldCancelOnInputImageChange(int /*inputIndex*/) const { return true; }
131 
133  ImageVector getInputImageExtent(int index = 0) const;
134 
136  ImageVector getInputImagePageExtent(int index = 0) const;
137 
139  MLDataType getInputImageDataType(int index = 0) const;
140 
142  double getInputImageMinVoxelValue(int index = 0) const;
143 
145  double getInputImageMaxVoxelValue(int index = 0) const;
146 
148 
152  const MedicalImageProperties& getInputImageProperties(int index = 0) const;
153 
155  bool hasValidInputImage(int index = 0) const;
156 
158  int getNumInputImages() const { return _numInputImages; }
159 
160 private:
161 
162  Module* _module;
163  DistantObject<FloatField> _progressField;
164  DistantObject<StringField> _statusField;
165 
166  int _numInputImages;
167  PagedImageProperties** _inputImageProperties;
168 };
169 
170 ML_END_NAMESPACE
171 
172 #endif
173 
174 
#define MLBACKGROUNDTASKS_EXPORT
A DistantObject stores the pointer to an object of type T and forbids direct access to the stored poi...
Field to encapsulate a float value.
Definition: mlFields.h:389
void clear()
Removes all entries from the container.
An asynchronous tile request. This is copyable!
An asynchronous process all pages request. This is copyable!
ManagedSubImage is derived from SubImage and frees its allocated memory automatically when it is dest...
This class encapsulates basic medical image properties:
ImagePropertyExtensionContainer & getImagePropertyContainer()
Permits access to the container for user image properties.
ModuleBackgroundTask extends the ImagingBackgroundTask with several useful methods that allow asynchr...
double getInputImageMinVoxelValue(int index=0) const
Returns the minimum voxel value of the input image at index.
~ModuleBackgroundTask() override
void setStatusString(const std::string &status) override
Updates the status string while processing.
void setProgressField(FloatField *field)
Sets the progress field.
MLDataType getInputImageDataType(int index=0) const
Returns the data type of the input image at index.
const MedicalImageProperties & getInputImageProperties(int index=0) const
Returns the image properties of the input image at index.
AsyncTileRequest requestTile(int inputImageIndex, const SubImageBox &box, MLDataType type, const ScaleShiftData &shift=ScaleShiftData(), int getTileFlags=ImagingBackgroundTask::UseMemoryManager)
Asynchronously request the tile.
ModuleBackgroundTask(Module *module, FloatField *progressField=nullptr, StringField *statusField=nullptr)
void setProgress(float progress) override
Updates the progress while processing.
ProcessAllPagesRequest requestProcessAllPages(ProcessAllPagesHandler *handler, const SubImageBox &box=SubImageBox())
Asynchronously request a processing of pages using the given handler.
bool hasValidInputImage(int index=0) const
Returns whether the input image at index is valid and thus its properties can be requested.
ImageVector getInputImagePageExtent(int index=0) const
Returns the page extent of the input image at index.
double getInputImageMaxVoxelValue(int index=0) const
Returns the maximum voxel value of the input image at index.
ProcessAllPagesRequest requestProcessAllPages(const SubImageBox &box=SubImageBox())
Asynchronously request a processing of pages and running Module::processAllPages(-1).
void setStatusField(StringField *field)
Sets the status field.
bool hasStatusField()
Returns whether this task has a status field.
virtual bool shouldCancelOnInputImageChange(int) const
Returns whether the task should be canceled when the given input image has changed.
AsyncTileRequest requestTileWithExternalBuffer(int inputImageIndex, const SubImageBox &box, MLDataType type, const ScaleShiftData &shift, ManagedSubImage *externalBuffer, int getTileFlags=ImagingBackgroundTask::ExternalBuffer)
Asynchronously request the tile.
ImageVector getInputImageExtent(int index=0) const
Returns the extent of the input image at index.
bool hasProgressField()
Returns whether this task has a progress field.
int getNumInputImages() const
Returns the number of input images.
Base class for an image processing module of the ML.
Definition: mlModule.h:151
PagedImageProperties extends the MedicalImageProperties with the page extent.
const ImageVector & getPageExtent() const
Returns the page extent.
PagedImageProperties(const PagedImage &pagedImage)
The class PagedImage, representing a fragmented image that manages properties and data of an image lo...
Definition: mlPagedImage.h:66
Base class for handlers that are used for the Module::processAllPages facility.
Field to encapsulate a string value.
Definition: mlFields.h:553
MLint32 MLDataType
MLDataType.
Definition: mlTypeDefs.h:596
TScaleShiftData< MLdouble > ScaleShiftData
Double version of TScaleShiftData for maximum reasonable precision.
TSubImageBox< MLint > SubImageBox
Defines the standard SubImageBox type used in the ML. Its size varies with the size of the MLint type...