30#include <mlMetaProfilePtr.h>
35#define ML_ADD_FIELD(NAME_P, TYPE_P, VALUE_P) \
36(static_cast<TYPE_P##Field*> (this->addField(NAME_P, #TYPE_P, VALUE_P)));
47class ProcessAllPagesHandler;
160 friend class ModuleCalculateOutputImageHandler;
180public:
Module(
int numInputImages,
int numOutputImages);
317 CONNECTED_BUT_INVALID = 1,
318 CONNECTED_AND_VALID = 2,
319 CONNECTED_BUT_NEEDS_UPDATE = 3,
325 ALLOW_INVALID_INPUT = 2,
454 void* progressCallbackUserData =
nullptr);
464 void* progressCallbackUserData =
nullptr);
516 const std::string& errorResult=
"");
577 virtual void calculateOutputImageProperties(
int )
final {}
589 return outputSubImageBox;
672 void* progressCallbackUserData =
nullptr);
684 void* progressCallbackUserData =
nullptr);
695 void* progressCallbackUserData =
nullptr);
797private:
void setWasVisited(
bool flag) { _visitedFlag = flag; }
800private:
bool wasVisited() {
return _visitedFlag; }
809 bool _addBaseOp(Module& module);
814 MLint _removeBaseOp(Module& module);
819 std::vector <OutputConnectorField*> _outputConnectorFields;
822 std::vector <InputConnectorField*> _inputConnectorFields;
825 THREAD_SUPPORT _threadSupport;
833 MLint _handleNotificationEntryCounter;
838 bool _permitRecursiveHandleNotifications;
844 PERMITTED_TYPES _permittedTypes;
850 MLint _handleNotificationBlockCounter;
853 mutable MLMetaProfilePtr _metaProfilePtr;
856 static std::vector<Module*> _instantiatedModules;
869 const char*
getTypeNameFast()
const {
return getTypeId() ? getTypeId()->getName() :
"<unregistered_module>"; }
880 typedef void (*DiagnosisModuleStackCallback)(
void*);
884 pushModuleForDiagnosis = pushCallback;
885 popModuleForDiagnosis = popCallback;
889 static DiagnosisModuleStackCallback pushModuleForDiagnosis;
890 static DiagnosisModuleStackCallback popModuleForDiagnosis;
The strong handle of a MLMemoryBlock.
Base class for the calculation of pages of an output image (PagedImage) of a Module.
Classic ML host used internally to calculate getTile and processAllPages requests.
Defines the class FieldContainer to encapsulate a vector of fields for (see class Field).
Strength
Enumeration type describing the strength of notifications.
Base class for all fields used in the ML.
The Host is the central image processing class in the ML.
~ModuleDiagnosisStackScope()
ModuleDiagnosisStackScope(Module *module)
static void setCallbacksForDiagnosisModuleStack(DiagnosisModuleStackCallback pushCallback, DiagnosisModuleStackCallback popCallback)
Base class for an image processing module of the ML.
static void adaptPageExtent(ImageVector &pageExtent, MLDataType imageType, const ImageVector &newImgExtent, const ImageVector &oldImgExtent, const ImageVector &pageUnit=ImageVector(0), const ImageVector &minPageExtent=ImageVector(0), const ImageVector &maxPageExtent=ImageVector(0))
Adapt page size.
PagedImage * getOutputImage(MLint outputIndex=0) const
Returns output image outputIndex. The index needs to be in the range [0, getNumOutputImages()-1].
static void updateProgress(const char *info1, const char *info2)
For documentation see Host::updateProgress().
const char * getTypeNameFast() const
Macro to declare methods for the ML runtime type system (see mlRuntimeSubClass.h).
InputConnectorField * getInputImageField(MLint i) const
Returns the field representing input image i. i must be a valid index.
void handleNotificationOff()
Decreases lock counter for handleNotification calls.
bool isHandleNotificationOn()
Returns true if handleNotification calls are permitted, otherwise false.
bool isSupportedVoxelDataType(MLDataType dt) const
Check if a given data type is supported on the module as configured with setVoxelDataTypeSupport.
MLint getOutputImageInplace(MLint outputIndex=0) const
Return optimization flag: Return index of input image whose input tile is used also as output page fo...
OutputConnectorField * addOutputImage(const char *name=nullptr)
Adds a new output image with name to the module.
virtual void calculateOutputImageProperties(int outputIndex, PagedImage *outputImage)
Set properties of output image outputImage with output index outputIndex.
MLErrorCode processAllPages(ProcessAllPagesHandler &handler, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Process input images with a ProcessAllPagesHandler handler on a temporary output image (which allocat...
void setOutputImageInplace(MLint outputIndex=0, MLint inputIndex=0)
Set optimization flag: If calculating a page in calculateOutputSubImage(), the output image page of o...
InputConnectorField * addInputImage(const char *name=nullptr)
Adds a new input image with name to the module.
void touchOutputImageFields() const
Touch all output image fields to indicate that the images have changed.
~Module() override
Destructor: Destroys this module.
INPUT_HANDLE
See documentation of handleInput.
Module(int numInputImages, int numOutputImages)
Constructor: Initializes numInputImages input images and numOutputImages output images of the module.
MLErrorCode processMissingPages(int outputIndex=0, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Processes all missing pages on the given output image.
virtual void beginSaveFields()
Called before all fields data contents of this modules are saved.
static std::string getVoxelValueAsString(PagedImage *image, const ImageVector &position, MLErrorCode *errorCode=nullptr, const std::string &errorResult="")
Returns the voxel value at position position of the image image.
void setClampPagesToImageExtent(bool flag=true)
Enables/disables page clamping on all output images.
void permitRecursiveHandleNotifications(bool enable)
If this flag is set to enable =true, recursive entries in handleNotification are permitted.
INPUT_STATE
See documentation of handleInput.
INPUT_STATE getInputState(MLint index)
Returns the current state of the input connection.
void setBypass(MLint outputIndex=0, MLint inputIndex=0)
Sets the input image whose pages can also be used instead of output pages for the output image at out...
void setThreadSupport(THREAD_SUPPORT supportMode)
Pass any THREAD_SUPPORT supportMode to decide whether and what type of multithreading is supported by...
bool isInputImageField(Field *field) const
Returns if the given field is an input image field. This can be used in handleNotification(),...
static bool shouldTerminate()
For documentation see Host::shouldTerminate().
void handleNotificationOn()
Increases lock counter for handleNotification calls.
MLint getHandleNotificationEntryCounter() const
A counter returning the current number of (recursive re)entries in handleNotification.
bool areRecursiveHandleNotificationsPermitted() const
Returns if recursive entries in handleNotification are permitted.
void setVoxelDataTypeSupport(PERMITTED_TYPES permTypes)
Specifies which types this module supports.
virtual CalculateOutputImageHandler * createCalculateOutputImageHandler(PagedImage *outputImage)
Creates the CalculateOutputImageHandler for the given output image outputImage.
PERMITTED_TYPES
See documentation of setVoxelDataTypeSupport.
MLint getNumInputImages() const
Returns number of input images of this module.
MLint getNumOutputImages() const
Returns number of output images of this module.
static Module * getModule(size_t index)
Returns pointer to instantiated module index.
THREAD_SUPPORT
Enumerator deciding whether and which type of multithreading is supported by this module.
static Field * getPressedNotifyField()
For documentation see Host::getPressedNotifyField().
static MLErrorCode getTile(PagedImage *image, SubImageBox loc, MLDataType datatype, void **data, const ScaleShiftData &scaleShiftData=ScaleShiftData(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
For documentation see Host::getTile() function with same signature.
PagedImage * getUpdatedInputImage(MLint inputIndex, bool getReal=false) const
Convenience method for safe access to the input image at index inputIndex.
virtual void endSaveFields()
Called after saving all field contents of this module.
MLint getBypass(MLint outputIndex=0) const
Returns the currently bypass index or -1 if bypassing is disabled (default).
virtual void calculateOutputSubImage(SubImage *outputSubImage, int outputIndex, SubImage *inputSubImages)
Calculate page outputSubImage of output image with index outputIndex given the input image tiles in a...
static void freeTile(void *data)
For documentation see Host::freeTile().
void unsetOutputImageInplace(MLint outputIndex=0)
Clear optimization flag: output page of output at outputIndex and input tile shall use different memo...
static void destroyModule()
Destroys static allocated tables to avoid memory leaks.
THREAD_SUPPORT getThreadSupport() const
Returns the multithreading mode supported by this module, default is NO_THREAD_SUPPORT.
static MLErrorCode getTile(PagedImage *image, SubImage &subimg, const ScaleShiftData &scaleShiftData=ScaleShiftData(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
For documentation see Host::getTile() function with same signature and Module passed as reference.
static MLint findModuleIndex(Module &module)
Returns index of Module module. If not found -1 is returned.
void clearOutputImage(MLint i=0)
Clear cached output image pages of output image i.
static MLErrorCode updateImageProperties(PagedImage *image)
For documentation see Host::updateImageProperties() function with same signature.
void handleNotificationInternal(Field *field, FieldSensor::Strength strength) override
Called from FieldContainer whenever a field changes.
OutputConnectorField * getOutputImageField(MLint i=0) const
Returns field representing output image i. i must be a valid index.
virtual SubImageBox calculateInputSubImageBox(int, const SubImageBox &outputSubImageBox, int)
Called by the Host to determine which input image region (tile) of input inputIndex is required to ca...
MLErrorCode processAllPages(int outputIndex=-1, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Processes all pages of a module for easy implementation of page-based image processing of complete im...
static size_t getNumModules()
Returns number of instantiated modules.
virtual void provideCustomPage(int, const SubImageBox &, MLMemoryBlockHandle &)
This method allows a Module to provide its own pages to the Host for the outputIndex output image.
PagedImage * getInputImage(MLint inputIndex, bool getReal=false) const
Returns the output image of the module connected to input inputIndex.
virtual void handleNotification(Field *)
Called when any field data in the field container of this module is modified.
PERMITTED_TYPES getVoxelDataTypeSupport() const
Returns the current state of supported voxel data types.
MLMetaProfilePtr & getMetaProfile() const
Returns the meta profile for the base operator.
INPUT_STATE getUpdatedInputState(MLint index)
Returns the updated state of the input image by calling updateImageProperties(index) and returning ge...
virtual INPUT_HANDLE handleInput(int, INPUT_STATE) const
This method may be reimplemented to enable support for invalid input images on the module.
Field to encapsulate a pointer to an output connector which represents a module output.
Class which represents an image, which manages properties of an image and image data which is located...
@ MULTITHREADED
< The calculation of the image data can be called from multiple threads
@ IO_THREAD
< The calculation of the image data can be called from a designated IO thread
@ NO_THREAD_SUPPORT
< The image can only be calculated from the main thread
Base class for handlers that are used for the Module::processAllPages facility.
This class manages/represents a rectangular 6d image region which is organized linearly in memory.
A TileRequest either represents the input sub image that is needed by a PageRequest or if it is a roo...
#define ML_DISALLOW_COPY_AND_ASSIGN(className)
Defines basic macros.
#define ML_ABSTRACT_CLASS_HEADER(className)
Same like ML_ABSTRACT_CLASS_HEADER_EXPORTED with a non existing export symbol.
MLint32 MLDataType
MLDataType.
MLint32 MLErrorCode
Type of an ML Error code.
#define MLEXPORT
To export symbols from a dll/shared object, we need to mark them with the MLEXPORT symbol.
void MLRequestProgressCB(void *usrData, double progress)
MLint64 MLint
A signed ML integer type with at least 64 bits used for index calculations on very large images even ...
TScaleShiftData< MLdouble > ScaleShiftData
Double version of TScaleShiftData for maximum reasonable precision.
TSubImageBox< MLint > SubImageBox
Define the standard SubImageBox type used in the ML. Its size varies with the size of the MLint type.
TImageVector< MLint > ImageVector
Defines the standard ImageVector type which is used by the ML for indexing and coordinates.