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)));
47 class ProcessAllPagesHandler;
160 friend class ModuleCalculateOutputImageHandler;
179 public:
Module(
int numInputImages,
int numOutputImages);
316 CONNECTED_BUT_INVALID = 1,
317 CONNECTED_AND_VALID = 2,
318 CONNECTED_BUT_NEEDS_UPDATE = 3,
324 ALLOW_INVALID_INPUT = 2,
453 void* progressCallbackUserData =
nullptr);
463 void* progressCallbackUserData =
nullptr);
515 const std::string& errorResult=
"");
584 return outputSubImageBox;
667 void* progressCallbackUserData =
nullptr);
679 void* progressCallbackUserData =
nullptr);
690 void* progressCallbackUserData =
nullptr);
793 private:
void setWasVisited(
bool flag) { _visitedFlag = flag; }
796 private:
bool wasVisited() {
return _visitedFlag; }
805 bool _addBaseOp(Module& module);
810 MLint _removeBaseOp(Module& module);
815 std::vector <OutputConnectorField*> _outputConnectorFields;
818 std::vector <InputConnectorField*> _inputConnectorFields;
821 THREAD_SUPPORT _threadSupport;
829 MLint _handleNotificationEntryCounter;
834 bool _permitRecursiveHandleNotifications;
840 PERMITTED_TYPES _permittedTypes;
846 MLint _handleNotificationBlockCounter;
852 static std::vector<Module*> _instantiatedModules;
865 const char*
getTypeNameFast()
const {
return getTypeId() ? getTypeId()->getName() :
"<unregistered_module>"; }
876 typedef void (*DiagnosisModuleStackCallback)(
void*);
880 pushModuleForDiagnosis = pushCallback;
881 popModuleForDiagnosis = popCallback;
885 static DiagnosisModuleStackCallback pushModuleForDiagnosis;
886 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 (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.
static void updateProgress(const char *info1, const char *info2)
For documentation see Host::updateProgress().
MLMetaProfilePtr & getMetaProfile() const
Returns the metaprofile for the base operator.
void handleNotificationOff()
Decreases lock counter for handleNotification calls.
bool isHandleNotificationOn()
Returns true if handleNotification calls are permitted; otherwise, it returns false.
bool isSupportedVoxelDataType(MLDataType dt) const
Checks whether a given data type is supported on the module as configured with setVoxelDataTypeSuppor...
MLint getOutputImageInplace(MLint outputIndex=0) const
Returns the optimization flag: returns the index of input image whose input tile is used also as outp...
MLErrorCode processAllPages(ProcessAllPagesHandler &handler, SubImageBox region=SubImageBox(), MLRequestProgressCB *progressCallback=nullptr, void *progressCallbackUserData=nullptr)
Processes input images with a ProcessAllPagesHandler handler on a temporary output image (which alloc...
virtual void calculateOutputImageProperties([[maybe_unused]] int outputIndex, [[maybe_unused]] PagedImage *outputImage)
Set properties of output image outputImage with output index outputIndex.
void setOutputImageInplace(MLint outputIndex=0, MLint inputIndex=0)
Sets the optimization flag: if calculating a page in calculateOutputSubImage(), the output image page...
void touchOutputImageFields() const
Touches 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.
static Module * getModule(size_t index)
Returns a pointer to instantiated module index.
OutputConnectorField * addOutputImage(const char *name=nullptr)
Adds a new output image with name to the module.
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)
Passes any THREAD_SUPPORT supportMode to decide whether and what type of multithreading is supported ...
bool isInputImageField(Field *field) const
Returns whether the given field is an input image field.
static bool shouldTerminate()
For documentation see Host::shouldTerminate().
virtual CalculateOutputImageHandler * createCalculateOutputImageHandler(PagedImage *outputImage)
Creates the CalculateOutputImageHandler for the given output image outputImage.
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 whether recursive entries in handleNotification are permitted.
const char * getTypeNameFast() const
Macro to declare methods for the ML runtime type system (see mlRuntimeSubClass.h).
void setVoxelDataTypeSupport(PERMITTED_TYPES permTypes)
Specifies which types this module supports.
PERMITTED_TYPES
See documentation of setVoxelDataTypeSupport.
MLint getNumInputImages() const
Returns the number of input images of this module.
PagedImage * getOutputImage(MLint outputIndex=0) const
Returns the output image outputIndex. The index needs to be in the range [0, getNumOutputImages()-1].
MLint getNumOutputImages() const
Returns the number of output images of this module.
PagedImage * getInputImage(MLint inputIndex, bool getReal=false) const
Returns the output image of the module connected to input inputIndex.
OutputConnectorField * getOutputImageField(MLint i=0) const
Returns the field representing output image i. i must be a valid index.
THREAD_SUPPORT
Enumerator deciding whether and which type of multithreading is supported by this module.
InputConnectorField * addInputImage(const char *name=nullptr)
Adds a new input image with name to the module.
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.
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 if disabled (default).
virtual void calculateOutputSubImage(SubImage *outputSubImage, int outputIndex, SubImage *inputSubImages)
Calculates page outputSubImage of output image with index outputIndex given the input image tiles in ...
static void freeTile(void *data)
For documentation see Host::freeTile().
void unsetOutputImageInplace(MLint outputIndex=0)
Clears the optimization flag: output page of output at outputIndex and input tile shall use different...
static void destroyModule()
Destroys static allocated tables to avoid memory leaks.
PagedImage * getUpdatedInputImage(MLint inputIndex, bool getReal=false) const
Convenience method for a safe access to the input image at index inputIndex.
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.
InputConnectorField * getInputImageField(MLint i) const
Returns the field representing input image i. i must be a valid index.
static MLint findModuleIndex(Module &module)
Returns the index of Module module. If not found, -1 is returned.
void clearOutputImage(MLint i=0)
Clears 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.
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 the 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.
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 datatypes.
static Field * getPressedNotifyField()
For documentation see Host::getPressedNotifyField().
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.
The class PagedImage, representing a fragmented image that manages properties and data of an image lo...
@ 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 I/O 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 that is organized linearly in memory.
A TileRequest either represents the input subimage that is needed by a PageRequest or if it is a root...
#define ML_DISALLOW_COPY_AND_ASSIGN(className)
Defines basic macros.
#define ML_ABSTRACT_CLASS_HEADER(className)
Similar to 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
Defines 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 that is used by the ML for indexing and coordinates.