MeVisLab Toolbox Reference
ml::Field Class Referenceabstract

Base class for all fields used in the ML. More...

#include <mlField.h>

Inheritance diagram for ml::Field:
ml::ListField< double > ml::ListField< Vector2 > ml::ListField< Vector3 > ml::ListField< Vector4 > ml::ListField< MLint > ml::MultiField< std::string > ml::MultiField< MLint32 > ml::MultiField< MLdouble > ml::MultiField< MLint > ml::MultiField< MLfloat > ml::MultiField< MLuint32 > ml::BaseField ml::BoolField ml::DoubleField ml::EnumField ml::FloatField ml::ImageVectorField ml::InputConnectorField ml::IntField ml::ListField< T > ml::MLDataTypeField ml::Matrix2Field ml::Matrix3Field ml::Matrix5Field ml::Matrix6Field ml::MatrixField ml::MultiField< DATATYPE > ml::NotifyField ml::OutputConnectorField ml::PointerField ml::SoNodeField ml::StringField ml::SubImageBoxField ml::SubImageBoxdField ml::UniversalTypeField ml::Vector10Field ml::Vector2Field ml::Vector3Field ml::Vector4Field ml::Vector5Field ml::Vector6Field

Classes

struct  Flags
 Flags for internal usage. More...
 

Public Member Functions

Initialization
 Field (const std::string &name=std::string())
 Constructor: Creates a field with name. More...
 
virtual ~Field ()
 Destructor: Destroys a field and removes all connection to fields and sensors. More...
 
Ownership
FieldContainergetFieldContainer () const
 Returns the field container of the field (which may be NULL). More...
 
Field identifiers
const std::string & getName () const
 Returns the name of field. More...
 
void setName (const std::string &name)
 Sets the name of field. Should be called only once after or while construction. More...
 
std::string getFullName () const
 Returns 'fieldContainerType(instanceName).fieldName' if field container is available, otherwise only the field name is returned. More...
 
Field annotations
bool isOutputOnly () const
 Returns whether this field is marked as a pure output field. More...
 
void setOutputOnly (bool outputOnly=true)
 Marks this field as a pure output field that is only changed by its module. More...
 
Access to field value
virtual void setStringValue (const std::string &value)=0
 Sets the field value as string value. More...
 
virtual std::string getStringValue () const =0
 Returns the value of the field as string value. More...
 
virtual MLint isValidValue ()
 Returns true (=1) if the field's value is valid; otherwise, false (=0) is returned. More...
 
void copyCStringValue (char *valueBuffer, MLint bufferSize)
 Copies the value of the field (as character string) into the specified buffer valueBuffer. More...
 
MLint getCStringValueSize ()
 Returns the length of the character string of the string value of the field. More...
 

Protected Member Functions

void attachSourceField (Field *field)
 Inserts a field as source field in this instance, i.e., from now on *this might receive values and/or notifications from that field. More...
 
void detachSourceField (Field *field)
 Removes a source field from this instance. If not found, then this call does nothing. More...
 
void detachFieldInternal (Field *field)
 Only removes the given field from the destination list. More...
 
virtual void setValueFromField (const Field &field)
 Sets the value of this field from the given field. More...
 

Protected Attributes

std::string _name
 The name of this field. More...
 
std::vector< FieldSensor * > _sensors
 List of field sensors. More...
 
std::vector< Field * > _destinationFields
 List of (target) fields that shall be set to the value of this field or that shall be notified only if this field is changed or notified. More...
 
std::vector< Field * > _sourceFields
 List of (source) fields that will notify this field or that will copy their value to this field. More...
 
FieldContainer_fieldContainer
 The owning field container. More...
 
Flags _flags
 

Static Protected Attributes

static MLint _enableNotifications
 Flag that disables the notification process of field (-sensors) globally. More...
 

Friends

class FieldContainer
 

Connecting and notification of field sensors and fields

void attachFieldSensor (FieldSensor *sensor)
 Attaches a field sensor sensor of this class instance in both directions. More...
 
void detachFieldSensor (FieldSensor *sensor)
 Detaches the field sensor sensor of this class instance in both directions. More...
 
void detachFieldSensors ()
 Detaches all field sensors of this class instance in both directions. More...
 
void attachField (OutputConnectorField *targetField)
 This calls attachField(targetField, false). More...
 
void attachField (BaseField *targetField)
 
void attachField (SoNodeField *targetField)
 
void attachField (NotifyField *targetField)
 
void attachField (Field *targetField, bool propagateValueOnConnect)
 Connects this class instance with the target field targetField. More...
 
void detachField (Field *targetField)
 Disconnects connections between the target field targetField and this instance. More...
 
void detachSourceFields ()
 Disconnects all source fields of this instance in both directions. More...
 
void detachDestinationFields ()
 Disconnects all target fields of this instance in both directions. More...
 
void detachAllFields ()
 Disconnects all source and target fields of this instance in both directions. More...
 
size_t getNumDestinationFields ()
 Returns the number of destination fields that could receive notifications or value sets. More...
 
FieldgetDestinationField (size_t index)
 Returns the destination field at index. Returns NULL if index is out of range. More...
 
size_t getNumSourceFields ()
 Returns the number of source fields that could send notifications or value sets. More...
 
FieldgetSourceField (size_t index)
 Returns the source field at index. Returns NULL if index is out of range. More...
 
virtual void touch (FieldSensor::Strength strength=FieldSensor::CHANGED)
 Notifies all connected fields and field sensors. More...
 
void enableNotifications (bool flag)
 Enables or disables notification of attached fields and field sensors when the field value is set or notified (by notifyAttachments() or set*Value() -methods), depending on the parameter flag. More...
 
bool areNotificationsEnabled ()
 Returns whether the notification mechanism for this field (e.g., when field values are set) is enabled (see enableNotifications(bool) ). More...
 
static void enableNotificationsGlobally (bool flag)
 Enables or disables globally the notification mechanism for all fields and field sensors when field values are set or notified (by notifyAttachments() or set*Value() methods), depending on the parameter flag. More...
 
static bool areNotificationsEnabledGlobally ()
 Returns whether the notification mechanism for all fields (e.g., when field values are set) is enabled (see enableNotificationsGlobally(bool) ) Usually it is false (=0) within all calls of Module::calc* methods to avoid that field changes within these methods recursively start the calculation process of the ML. More...
 
static MLintenableNotificationsCounterState ()
 Provides read/write access to the current counter state (see enableNotificationsGlobally(bool) ). More...
 

Detailed Description

Base class for all fields used in the ML.

Thread-safety: This class is not thread-safe and should only be used from the main thread.

This class is used to encapsulate image processing parameters in so-called fields. There are many derived classes for the different specialized parameter types. Usually, the derived classes have the names of the types they encapsulate, e.g., IntField, EnumField, or StringField. The management of parameters as fields has the following advantages:

  • Fields force a standardized access to the parameters and can be read/set as string values and as normal typed values. This way, different fields can interchange their values via strings and no type casting is necessary
  • Since the value access goes via access methods, parameter changes and accesses can be detected and user defined action can be executed. For example, on a field change
    • user defined callback methods can be executed
    • the value can be propagated to another attached field

In detail, a field is a container for

  • an individual field name (parameter name)
  • a value (access also via strings string)
  • a type identification for the value
  • test code to check whether the value is in the correct range
  • a list of elements of the class FieldSensor that contains callback functions called when the parameter is changed
  • a list of elements of the class Field that shall be notified or updated in the case that the parameter is changed

Definition at line 72 of file mlField.h.

Constructor & Destructor Documentation

◆ Field()

ml::Field::Field ( const std::string &  name = std::string())

Constructor: Creates a field with name.

◆ ~Field()

virtual ml::Field::~Field ( )
virtual

Destructor: Destroys a field and removes all connection to fields and sensors.

Member Function Documentation

◆ areNotificationsEnabled()

bool ml::Field::areNotificationsEnabled ( )

Returns whether the notification mechanism for this field (e.g., when field values are set) is enabled (see enableNotifications(bool) ).

◆ areNotificationsEnabledGlobally()

static bool ml::Field::areNotificationsEnabledGlobally ( )
static

Returns whether the notification mechanism for all fields (e.g., when field values are set) is enabled (see enableNotificationsGlobally(bool) ) Usually it is false (=0) within all calls of Module::calc* methods to avoid that field changes within these methods recursively start the calculation process of the ML.

Outside those methods, it usually will be true.

◆ attachField() [1/5]

void ml::Field::attachField ( BaseField targetField)

◆ attachField() [2/5]

void ml::Field::attachField ( Field targetField,
bool  propagateValueOnConnect 
)

Connects this class instance with the target field targetField.

If propagateValueOnConnect is true, the field value is immediately set on targetField; otherwise, the value is only propagated on later field changes.

◆ attachField() [3/5]

void ml::Field::attachField ( NotifyField targetField)

◆ attachField() [4/5]

void ml::Field::attachField ( OutputConnectorField targetField)

This calls attachField(targetField, false).

Attaching without a second parameter is allowed only for OutputConnectorFields, BaseFields, NotifyField, and SoNode fields. If you encounter code that does not build because a different Field class is passed, then change your code to handle field changes in Module::handleNotification() instead.

◆ attachField() [5/5]

void ml::Field::attachField ( SoNodeField targetField)

◆ attachFieldSensor()

void ml::Field::attachFieldSensor ( FieldSensor sensor)

Attaches a field sensor sensor of this class instance in both directions.

◆ attachSourceField()

void ml::Field::attachSourceField ( Field field)
protected

Inserts a field as source field in this instance, i.e., from now on *this might receive values and/or notifications from that field.

◆ copyCStringValue()

void ml::Field::copyCStringValue ( char *  valueBuffer,
MLint  bufferSize 
)

Copies the value of the field (as character string) into the specified buffer valueBuffer.

The maximum bufferSize is considered and the value is copied only partially if necessary.

◆ detachAllFields()

void ml::Field::detachAllFields ( )

Disconnects all source and target fields of this instance in both directions.

◆ detachDestinationFields()

void ml::Field::detachDestinationFields ( )

Disconnects all target fields of this instance in both directions.

◆ detachField()

void ml::Field::detachField ( Field targetField)

Disconnects connections between the target field targetField and this instance.

◆ detachFieldInternal()

void ml::Field::detachFieldInternal ( Field field)
protected

Only removes the given field from the destination list.

◆ detachFieldSensor()

void ml::Field::detachFieldSensor ( FieldSensor sensor)

Detaches the field sensor sensor of this class instance in both directions.

◆ detachFieldSensors()

void ml::Field::detachFieldSensors ( )

Detaches all field sensors of this class instance in both directions.

◆ detachSourceField()

void ml::Field::detachSourceField ( Field field)
protected

Removes a source field from this instance. If not found, then this call does nothing.

◆ detachSourceFields()

void ml::Field::detachSourceFields ( )

Disconnects all source fields of this instance in both directions.

◆ enableNotifications()

void ml::Field::enableNotifications ( bool  flag)

Enables or disables notification of attached fields and field sensors when the field value is set or notified (by notifyAttachments() or set*Value() -methods), depending on the parameter flag.

◆ enableNotificationsCounterState()

static MLint& ml::Field::enableNotificationsCounterState ( )
static

Provides read/write access to the current counter state (see enableNotificationsGlobally(bool) ).

Please use this only if you have a detailed understanding of the internal ML programming!

◆ enableNotificationsGlobally()

static void ml::Field::enableNotificationsGlobally ( bool  flag)
static

Enables or disables globally the notification mechanism for all fields and field sensors when field values are set or notified (by notifyAttachments() or set*Value() methods), depending on the parameter flag.

Calls can be nested since an internal counter is used for enabling/disabling. Please use this only if you have a detailed understanding of the internal ML programming!

◆ getCStringValueSize()

MLint ml::Field::getCStringValueSize ( )
inline

Returns the length of the character string of the string value of the field.

Definition at line 153 of file mlField.h.

◆ getDestinationField()

Field* ml::Field::getDestinationField ( size_t  index)

Returns the destination field at index. Returns NULL if index is out of range.

◆ getFieldContainer()

FieldContainer* ml::Field::getFieldContainer ( ) const
inline

Returns the field container of the field (which may be NULL).

Definition at line 94 of file mlField.h.

◆ getFullName()

std::string ml::Field::getFullName ( ) const

Returns 'fieldContainerType(instanceName).fieldName' if field container is available, otherwise only the field name is returned.

This is mainly useful for debugging/error prints.

◆ getName()

const std::string& ml::Field::getName ( ) const
inline

Returns the name of field.

Definition at line 103 of file mlField.h.

◆ getNumDestinationFields()

size_t ml::Field::getNumDestinationFields ( )

Returns the number of destination fields that could receive notifications or value sets.

◆ getNumSourceFields()

size_t ml::Field::getNumSourceFields ( )

Returns the number of source fields that could send notifications or value sets.

◆ getSourceField()

Field* ml::Field::getSourceField ( size_t  index)

Returns the source field at index. Returns NULL if index is out of range.

◆ getStringValue()

◆ isOutputOnly()

bool ml::Field::isOutputOnly ( ) const

Returns whether this field is marked as a pure output field.

◆ isValidValue()

virtual MLint ml::Field::isValidValue ( )
inlinevirtual

Returns true (=1) if the field's value is valid; otherwise, false (=0) is returned.

The default implementation always returns 1 (=true). Must be overloaded in derived class if the value is not always valid.

Reimplemented in ml::UniversalTypeField, ml::InputConnectorField, and ml::OutputConnectorField.

Definition at line 144 of file mlField.h.

◆ setName()

void ml::Field::setName ( const std::string &  name)
inline

Sets the name of field. Should be called only once after or while construction.

Definition at line 106 of file mlField.h.

◆ setOutputOnly()

void ml::Field::setOutputOnly ( bool  outputOnly = true)

Marks this field as a pure output field that is only changed by its module.

◆ setStringValue()

◆ setValueFromField()

virtual void ml::Field::setValueFromField ( const Field field)
protectedvirtual

◆ touch()

virtual void ml::Field::touch ( FieldSensor::Strength  strength = FieldSensor::CHANGED)
virtual

Notifies all connected fields and field sensors.

First for all callback methods of connected field sensors are called, and then all notify methods of all connected fields. Note: Fields connected to connected fields are also recursively updated. The cyclic notifications that can occur in this case are suppressed by temporary flags within fields. Fields that are already within a chain of notified fields are not notified again. The parameter strength indicates how strong the primary notification starting from this field is. The default is CHANGED which means that the observed subject has been changed. Using NO_CHANGE, e.g., means that only a notification is desired but no change which, e.g., means that output fields of Modules are not reset. Note that strength has nothing to do with value transfer to attached fields!

Reimplemented in ml::OutputConnectorField.

Friends And Related Function Documentation

◆ FieldContainer

friend class FieldContainer
friend

Definition at line 302 of file mlField.h.

Member Data Documentation

◆ _destinationFields

std::vector<Field*> ml::Field::_destinationFields
protected

List of (target) fields that shall be set to the value of this field or that shall be notified only if this field is changed or notified.

Definition at line 279 of file mlField.h.

◆ _enableNotifications

MLint ml::Field::_enableNotifications
staticprotected

Flag that disables the notification process of field (-sensors) globally.

Definition at line 299 of file mlField.h.

◆ _fieldContainer

FieldContainer* ml::Field::_fieldContainer
protected

The owning field container.

Definition at line 286 of file mlField.h.

◆ _flags

Flags ml::Field::_flags
protected

Definition at line 296 of file mlField.h.

◆ _name

std::string ml::Field::_name
protected

The name of this field.

Definition at line 272 of file mlField.h.

◆ _sensors

std::vector<FieldSensor*> ml::Field::_sensors
protected

List of field sensors.

Definition at line 275 of file mlField.h.

◆ _sourceFields

std::vector<Field*> ml::Field::_sourceFields
protected

List of (source) fields that will notify this field or that will copy their value to this field.

Definition at line 283 of file mlField.h.


The documentation for this class was generated from the following file: