MeVisLabToolboxReference
Release Notes

Release notes MeVisLab 2.3

MLLinearAlgebra

  • Matrix types got an additional constructor with a single scalar argument, which is taken for the diagonal values, while all other values will be set to zero

MLUtilities

  • Removed exception handling from ML_DELETE and ML_DELETE_ARRAY
  • Fixed crash in class CPUInfo under WinXP 64bit
  • Added mlrange_cast functions in mlRangeCast.h
  • Added MLCreateDirectory() function
  • The TimeCounter class now uses MLdouble instead of MLldouble
  • The carrier types have been removed, see CarrierTypes removed
  • MLldouble isn't a supported voxel type anymore
  • Assigned a static type ID to all registered types provided by MLTypeExtensions library
  • Minimum and maximum values are now represented with MLdouble instead of MLldouble
  • The operations table in MLTypeInfos has been condensed
  • Registered types now belong to an abstract type group; the predefined type groups are MLNoTypeGroup, MLScalarTypeGroup, MLVectorTypeGroup and MLMatrixTypeGroup (this information is used for type promotion)
  • reading and writing of files is now done in chunks with a maximum size of 1GB
  • The ML version has been updated to 2.2

ML

Release notes MeVisLab 2.2

ML

  • Field, FieldContainer and FieldSensor reimplementation
    • Fields now know their owning FieldContainer and call it for handleNotification
    • Fields no longer support a "touch only" connection, thus Base->Base and SoNode->SoNode touch-only connections are no longer possible
    • Field::attachField still works touch only when attaching any field to a Base, SoNode, OutputConnector or NotifyField
  • MLFieldConnectFrom no longer touches Notify fields when connecting, to streamline ML connection behaviour with MeVisLab and OpenInventor
  • Module is now derived from FieldContainer instead of aggregating it and FieldContainer is derived from Base
    • using getFieldContainer() thus is not longer necessary to add fields to a module
    • the FieldContainer API was cleaned up and duplicate functionality was merged with the Module API
    • several seldom used FieldContainer methods have been removed
  • Added facility to specify allowed Base types for ML/Inventor Base fields, see BaseField::addAllowedType()
  • Removed deprecated SoNode/Base fields with external data pointer
  • Added RefCountedBase class that offers intrusive reference counting for Base classes
  • Removed mlRefCounting.h/.cpp, which was only used in deprecated MLDicomTags library
  • Added support for removal of FieldSensor or Field detachment while being inside of touch()
  • Added support for reordering color planes to interleaved format to copySubImage and getTile by adding a reordering mode to ScaleShiftData
  • Added FieldContainer::add* overloads that take the initial field value to avoid an extra set*Value() call
  • Deprecated FieldContainer::add* methods that take an external data pointer are now renamed to addDeprecated* to enforce porting of the code
  • Deprecated FieldContainer::addToogle has been renamed to addDeprecatedToggle. Please replace with addBool() and a BoolField instead.

Release notes MeVisLab 2.1

ML

  • ML API deprecation
    • The ML API has been revised and its version number has been set to 2.0.
    • Added support for ML_WARN_DEPRECATED and ML_DISABLE_DEPRECATED to warn about or disable the deprecated ML API
    • See Deprecated List for a complete list of renamed methods
    • The class names in the release notes have been renamed accordingly, to allow correct links into doxygen documentation
  • Added new mlFatalError(), mlError(), mlWarning() and mlInfo() logging macros which allow streaming diagnosis info into them.
  • Module::getTile() now takes PagedImage instead of Module and output index. The old methods are still available but marked as deprecated.
  • Module::updateImageProperties() now takes PagedImage instead of Module and output index.
  • MLGetPhysicalDataTypeFromPtr function has been removed
  • New TypeTraits class for compile time information about types (see mlTypeTraits.h)
  • mlTemplateSupport.h has been cleaned up to make use of TypeTraits
  • CarrierXIn types now have physical type ids (CarrierXInType)
  • TSubImage no longer handles invalid boxes in getImagePointer etc., the previous implementation did a ImageVector::compMin(v1, v2) call, to swap box components that where v1.[xyzctu] was bigger than v2.[xyzctu].
  • TSubImage has been cleaned-up and modified to avoid the overloaded _data pointers and various overloads of SubImage.
  • TSubImage no longer contains a cursor. To keep legacy code working, you can use the new class TSubImageWithCursor to get access to the old cursor behavior.
  • TSubImageCursor and ConstTSubImageCursor are new cursor classes, which replace the old cursor API of TSubImage and which support an unlimited number of cursors on a TSubImage with correct const semantics.
  • Now all ML interfaces and macros also support the MLuint64 voxel type, handled as MLuint64Type enumerator and with type component code '9'. Its MLuint64Type enumerator has been inserted between MLint64Type and MLCarrier4Type.
  • Changed Module::processAllPages to really not allocate data for output subimages. The old implementation allocated blocks of size 0 and stored them in the temporary PagedImage.
  • Added CalculateOutputImageHandler baseclass
  • Added UserThreadData baseclass
  • Added CalculateOutputImagePropertiesCB to be set on a PagedImage to override the default routing to Module::calculateOutputImageProperties.
  • Added SubImage::setSourceImageExtent, SubImage::getSourceImageExtent
  • Added SubImage::getValidRegion, which returns the box of the subimage intersected with the source image extent. This is very useful in calculateOutputSubImage to avoid (error-prone) manual intersecting.
  • Removed ThreadInfo and support for it.
  • The following Module methods have been modified:
      void        calculateOutputImageProperties(int outIndex, PagedImage* outImg);
      MLErrorCode processAllPages(int outIdx  = -1, SubImageBox region  = SubImageBox());
    
    • The outImg parameter has been added to avoid calling getOutputImage() multiple times in the code and to allow passing temporary PagedImage instances when using processAllPages(-1).
    • The Module::processAllPages() method no longer has an inIndex. If you passed -1 or 0, just remove that parameter. If your code passed a value >0, you will need to implement the calculateOutputImageProperties method and handle the outIndex==-1 case.
    • A processAllPages(-1) call now calls Module::calculateOutputImageProperties with outIndex=-1 and a temporary output image. This allows to specify additional properties of the temporary input image, e.g. the page size, the image size itself or the datatypes of the input subimages, which was not possible before. Make sure that you handle the outIndex=-1 case and make use of the outImg that is passed to calculateOutputImageProperties, since getOutImage(-1) will not work to get the temporary image. If you want to get the image properties of a different input image for the temporary output, you can the following in calculateOutputImageProperties
          if (outIndex<0) {
            // Copy the properties of input image to the temporary output image.
            outImg->setImageProperties(*getInputImage(someIndex));
          }
      
  • The following Module methods have been removed:
    virtual void notifyFirstCalcOutSubImage(int  outIndex, bool calledByProcessAllPages){}
    virtual void calcInSubImageProps(int inIndex, InSubImageProps &props, int outIndex)
    virtual void calculateOutputSubImage(SubImage *outSubImg, int outIndex, SubImage *inSubImgs, ThreadInfo & threadInfo)
    MLint        connectInput(MLint inIndex, Module& op, MLint outIndex)
    
  • SubImage is no longer derived from ImageProperties and thus loses:
    • the isValid/isOutOfDate/setInvalid/setValid API, this flag was never used by the ML API itself and was "misused" as a general purpose flag by various SubImage users.
    • getMinVoxelValue/getMaxVoxelValue, which where sometimes set correctly and sometimes not and can better be requested via the PagedImage of a Module.
  • The MemoryImage (see PagedImage) now makes use of the MLMemoryManager, which means that the large images stored in the memory image are now part of the ML Cache. This might require to increase the ML cache size in some existing applications that make use of modules which use the MemoryImage (e.g. MemCache, Reformat, ...).
  • The new PagedImage::setInputSubImageIsReadOnly method allows to specify that input subimages are used read-only in calculateOutputSubImage, which allows some Host optimizations if set by a module.
  • ImageProperties no longer has isValid/isOutOfDate/setInvalid/setValid, which have been moved down to PagedImage because they are used by the ML with respect to the validity of the PagedImage.
  • Classes that are known to be reentrant (which means that different instances of the class can be used from different threads) have been marked as such in the doxygen documentation

Release notes MeVisLab 2.0

General

  • New ML version number 1.11.75.23.93 in MLUtilities, describing C-API updates and a C++-API changes.
  • Augias refactoring of the MeVisLab and ML repository.

mlUtils/MLUtilities

  • mlUtils renamed to MLUtilities.
  • Epsilon zero comparison in matrix inversion replaced by MLValueIs0WOM, because the sometimes used epsilon value was unsafe in some cases.
  • mlUtilsAPI::MLStringToPtr has been improved to support strings in hexadecimal notation

ML

  • Platform dependent snprintf statement replaced by platform independent one in void FieldContainer::setValue(const std::string &name, MLint value). This could cause trouble on non windows platforms.
  • mlFields:
  • mlTSubImage.h:
    • Fix in fillBordersWithInputValues function which copied invalid regions from the input subimage if the input region was smaller than the written output region. This sometimes caused crashes in kernel based modules using the PadDstFillWithOrig border handling.
  • MLAPI: Cache size values now handled as MLuint64 values for full 64 bit compatibility.
  • Some String definitions moved from mlInitSystemML to mlUtilsSystemC.h
  • Completely removed DicomTagList from MedicalImageProperties, since it was deprecated for a long time and always contained NULL since MeVisLab 1.6

Other projects

  • Module PageView3d revised, renamed to PageView3D and moved MiscModulesInv project.

Release Notes for MeVisLab 1.6RC.

General

  • New ML version number 1.8.67.23.85, describing a C-API update and a C++-API change.

Bug fixes:

  • Senseless return values of InvNodeGetValues and InvNodeGetFieldValue fixed.
  • Some incorrect uses of signed or signless types replaced by correct ones to avoid invalid range uses.
  • Some prints and print formats fixed where data types change on platforms.
  • New version of stored ListTemplates introduced to make 32 and 64 bit versions compatible as long as list smaller than 2^32 elements are loaded.

Change notes:

  • Many old ILAB4 code fragments and .pro file entries removed.
  • Many int types changed to signed MLssize_t which changes to 64 bit type on 64 bit platforms.
  • Many .pro files enable 64 bit and coding style warnings on vc8 and gcc compilers.
  • A number of casts removed which endanger detection of 64 warnings.
  • SoSFMLImage::getType, InvCreateSceneFromBuffer, InvWriteActionGetBuffer, InvNodeGetValuesSize, InvNodeGetValues, InvNodeGetFieldValue, InvFieldGetValueSize, InvFieldgetValue, InvMFieldGetValueSize, InvMFieldGetValue,

now require reference or pointer to size_t "size" parameters instead of integer type.

  • Many syntax errors in comments fixed.
  • Many coding standard violations fixed, such as missing braces, missing initializations of variables.
  • Many c-casts changed to c++ casts.
  • Many non constant local variables changed to const.
  • Return values of
    • InvOutputGetType,
    • InvEngineGetOutputputName,
    • InEngineGetIndexedOutputName, changed from char* to const char * to avoid dangerous manipulations of returned values.
  • Some expensive casts to values and value copies replaced by mlSetSegmentValues.cpp.
  • Some variable scopes reduced where appropriate.
  • Some variable types changed to cause warnings such that problematic implicit conversions become visible.
  • Many potential abort, assert and exit statements removed from e.g. SoRL.
  • Some useless casts removed.
  • Many invalid uses of 0 replaced by NULL.
  • Some unused statements removed, because they only produced warnings.
  • Some old change comments removed.

mlUtils/MLUtilities

  • Missing traits, definitions, and constants for MLuint64 type added to mlTypeDefs.h and mlTypeDefsTraits.h.
  • MLErrorCode description for ML_RESULT_OK renamed from MLOk to Ok for naming consistency and in ML the PagedImage now initializes _stateInfoString and _stateInfoErrorCode to ML_NO_IMAGE_PROPS and its corresponding error code description. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=2180).
  • Many constants in mlLinearAlgebraDefs.h were inconsistently named and repeated definitions of (c)math includes. They have been removed or renamed and moved to mlTypeDefs.h. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=2712). The following constants have been removed:
        # define M_E            2.7182818284590452354
        # define M_LOG2E        1.4426950408889634074
        # define M_LOG10E       0.43429448190325182765
        # define M_LN2          0.69314718055994530942
        # define M_LN10         2.30258509299404568402
        # define M_PI           3.14159265358979323846
        # define M_PI_2         1.57079632679489661923
        # define M_PI_4         0.78539816339744830962
        # define M_1_PI         0.31830988618379067154
        # define M_2_PI         0.63661977236758134308
        # define M_2_SQRTPI     1.12837916709551257390
        # define M_SQRT2        1.41421356237309504880
        # define M_SQRT1_2      0.70710678118654752440
        # define mlTOLER 0.000001
        # define mlISDOUBLE_EQ(a,b) ((MLAbs((a)-(b)) >= static_cast<double>(mlTOLER)) ? 0 : 1)
        # define FAST_SWAP(a,b)  { a^=b; b^=a; a^=b; }
    
    • The following constants have been renamed and moved to mlTypeDefs.h:
      •       # define LERP(a,l,h) ((l)+(((h)-(l))*(a)))
        
        Use corresponding version with ML_ prefix now.
      •       # define CLAMP(v,l,h)  ((v)<(l) ? (l) : (v) > (h) ? (h) : (v))
        
        Use corresponding version with ML_ prefix now.
      •       # define ABS(a) ((a) < 0 ? ((a) * -1) : (a))
        
        Use corresponding version with ML_ prefix now.
      •       # define MIN(A,B) ((A) < (B) ? (A) : (B))
        
        Use corresponding version with ML_ prefix now.
      •       # define MAX(A,B) ((A) > (B) ? (A) : (B))
        
        Use corresponding version with ML_ prefix now.
      •        enum { VX=0, VY=1, VZ=2, VW=3, VC=3, VT=4, VU=5 };
        
        is now available as
               typedef enum { ML_VX=0, ML_VY=1, ML_VZ=2, ML_VW=3, ML_VC=3, ML_VT=4, ML_VU=5 } MLArrayIndex;
        
      •        typedef enum { mlZERO, mlNEGATIVE, mlPOSITIVE } mlSIGN;
        
        is now available as
      •        typedef double (*V_FCT_PTR)(double);
        
        is now available as
               typedef double (*MLDblFuncPtr)(double);
        
  • New message type ML_INFORMATION added to ML Error handler and all related software components (diagnosis, tester modules and MeVisLab console). To be used only as pure information message without warning, debug or error relevance. It should be used only for stuff to be printed into the MeVisLab log file which might be useful to understand how the system operates. It should be used sparsely to avoid that it overwhelms log outputs with redundant or information of minor interest. Related modules in MLDiagnosis etc. have been adapted, too. (See feature request http://bugzilla.mevis.de//show_bug.cgi?id=2708).
  • Instance counting of constructors and destructors in Base objects added.
  • Support for final ML checks added, e.g. checking of instance counting==0 at Runtime system finish (to Control and MeVisLab prefs).
  • New ML ErrorCodes added to mlTypeDefs.h: ML_LIBRARY_UNLOAD_ERROR ML_LIBRARY_UNLOAD_EXCEPTION ML_NOT_SUPPORTED_ON_THIS_SYSTEM ML_OBJECT_STILL_REFERENCED MLNumDefaultErrorCodes
  • mlUtilsAPI:
    MLGetCheckBitMask and MLSetCheckBitMask functions added which enable/disable runtime and final checks in ML and mlUtils.
  • RuntimeType has and instance counter now.
  • RuntimeType uses an MLint for ids now instead of normal int.
  • It is implemented as modifiable reference in typeInstanceCounter() function in ML_CLASS_HEADER and SOURCE macros.
  • In RuntimeDict the clear method can apply final checks from now on.
  • RuntimeDict and Runtime have new functionality:
    • destroyRuntimeTypesOfDll
    • getAllDerivedFrom support flag to get only types from different dlls
    • getAllRuntimeTypesOfDll returns all types installed by a dll.
    • getNumInstancesDependentOnDll returns number of instances of Runtime types dependent on a dll which are still instantiated.
  • mlErrorMacros.h now provides convenience macro ML_PRINT_INFO for shorter information printing. (Enhancement request http://bugzilla.mevis.de//show_bug.cgi?id=2756).
  • Base objects now count their number of instances in a new counter in their related RuntimeType.
  • Library destruction functionality in mlUtils added.
  • New enumerator type MLCheckBits added to mlTypeDefs.h.

ML

Other projects

  • MLTools, BitImage:
  • MLMiscModules:
  • MLBase:
    • MLBase Doxygen revision:
      • Doxygen project page with introductions and overview documentation created and added to global software reference.
      • Doxygen revision of entire projects to remove warnings and add/activated many missing stuff, project now builds complete and warn free.
      • cfg file updated to new doxygen version and modern doxygen style settings applied.
    • MLBase Project refactored:
      • Related files added to .pro: MLBaseDoc.h, MLBase.cfg, MLBase.def.
      • Classes BaseItem (from ListBase), CurveData, CurveList (from DiagramData), ParserBase, BaseItemParser (from ListParser) extracted and implemented in their own classes, because it was quite difficult to find them and coding standard requires one class per file. Many files still contain many classes.
      • Some header implementations moved .cpp files to remove cyclic header file/class dependencies.
    • Source code revision:
      • Revision that it uses 64 bit types from now on.
      • Old c-style void function arguments replaced by empty braces to improve readability and to clean up inconsistent use.
      • Modifiable const char * tables now const char * const.
      • Some missing ML_TRACE_IN statements added.
      • Missing variable initializations added.
      • Missing boolean expression now use brackets.
      • Some GCC-Warnings removed.
      • Old-Style c-casts revised to c++ casts.
      • Old and unused ML_VECTOR_ACCESS_OVERLOAD definitions and documentations completely removed from entire project.
        • Many separator lines added for more unique and improved source code readability.
        • BaseItem does not provide public access to its id any more; now getId() and setId() should be used.
        • Some mlDebugPrint and std::cerr error messages converted to ML_PRINT_ERROR posts.
        • Some missing runtime type checks added to public methods (DecomposeBaseList, ExtractObjectFromlist, ListContainer)
        • Some shadowing warnings removed. (BaseTest.cpp, BaseItem constructor)
        • Const removed from non constant method; for constant access use new getContItemAt method ( for non const ListBase::getItemAt())
        • Missing case switches added (ListBase.cpp, MergeLists)
        • Useless >=0 comparisons on unsigned vars removed (Listbase).
        • Unsafe floating point comparisons use helper functions now.
        • A few strange c-casts for future analysis left in MLBase which I do not understand completely.
  • MLBasicModules and MLCoordUtils:
    • Symbol collision between internal string tables and constants fixed.
  • MLModuleTests:
    • New test module for mlAPI tests added to MLModuleTests.
  • MLBitImageTools:
    Example networks and documentation revised. BitImageSave and BitImageToML now allow the specification of the BitImage source box in different ways. BitImageToML provides option to create BitImage at its source box location from now on. (Bug request http://bugzilla.mevis.de//show_bug.cgi?id=2747).
  • MLDiagnosis:
    Compare module should have an extra boolean "testPassed". (Bug request http://bugzilla.mevis.de//show_bug.cgi?id=2723).

Release Notes for MeVisLab 1.6RC, Porting notes for 32 to 64 bit migration and other changes.

General

  • New version number 1.7.59.19.76. MeVisLab Core, ML C++ and C-APIs have changed and require complete source and installer updates.
  • Many optimizations have been added to many projects.
  • Many comments have been revised and many have been removed for better readability of texts.

mlUtils
ENH:

  • New version number 1.7.59.19.76.
  • FilePos settings formerly providing signed integers now only accept unsigned integers. (Binary interface change!). See changed interfaces MLFileWriteBinaryDataAt and MLFileSetBytePos. New function MLFileGetBytePos added.
  • New function MLStringToPtr for 32/64 bit string parsing to pointer added used at some places where especially string values need to be parsed and converted to pointers.
  • MemoryManagement routines now provide full 64 bit sized arguments even on 32 bit systems even at API.
  • DebugEnvName numbering is now done in size_t type, not in 32 bit type any more.
  • 64 bit warnings on VC8 activated.
  • All warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.
  • Minor change in system file to force recompilation of entire project.
  • FileName length limited to 2^32-1 because windows seems not to provide 64 bit interfaces for unicode conversions. Some checks and error returns added for those cases.
  • Old style ILAB4 stuff removed from .pro file.
  • Revision of multithreading interface:
    • New classes/files Mutex and ThreadHandle.
    • Critical section have been renamed to Mutex.
    • Incorrect ml or ML prefixes inside of ML namespace removed.
    • ThreadHandle and CriticalSections/Mutex are classes now.
    • All occurrences in Host, Cache and CachedBuffer have been replaced by new concept.
    • ErrorOutput class now uses a static mutex for error handling now.
    • mlTypeDefs now checks for correct __GNUC__ definition before comparing it.
    • Old-style .dsw file removed.
    • thread includes removed from system headers.
    • ThreadSafeAdd, ThreadSafeIn/Decrement have been renamed correctly and get referenced parameters from now on.
    • The following stuff has been renamed or replaced:
      • mlCriticalSection THREAD_BLOCKER; -> Mutex THREAD_BLOCKER;
      • mlInitializeCriticalSection(&THREAD_BLOCKER); -> done automatically in constructor of THREAD_BLOCK.
      • mlDeleteCriticalSection(&THREAD_BLOCKER); -> done automatically in destructor of THREAD_BLOCK.
      • mlEnterCriticalSection(&THREAD_BLOCKER); -> THREAD_BLOCK.lock();
      • mlLeaveCriticalSection(&THREAD_BLOCKER); -> THREAD_BLOCK.unlock();
      • mlThreadHandle tHandle; -> ThreadHandle tHandle;
      • tHandle = ML_INVALID_THREAD_HANDLE; -> tHandle.invalidate(); (= default initialization of ThreadHandle)
      • tHandle = mlBeginThread(_mtFunc, 0, &dataPtr); -> tHandle.startThread(_mtFunc, 0, &dataPtr); or StartThread(_mtFunc, 0, &dataPtr);
      • mlEndThread(); -> EndThread();
      • mlThreadSaveIncrement(long *value); -> ThreadSafeIncrement(long &value);
      • mlThreadSaveDecrement(long *value); -> ThreadSafeDecrement(long &value);
      • mlThreadSaveAdd(long *value, long addVal); -> ThreadSafeAdd(long &value, long addVal);
    • Naming of structures for Pushing and popping type information has changed:
      • MLTypePushInfo -> MLTypePushdDoubleInfo or MLTypePushSingleInfo
      • New MLTypePushSingleInfo struct in MLTypeDefs.h
      • New MLPushType enum in MLTypeDefs.h to describe what and how a type information is pushed on a stack.
      • See also changes of ML and new enum type in mlTypeDefs.h:
                typedef enum {
                  ML_NO_PUSH = 0,          
                  ML_CARRIER_TYPE_PUSH,    
                  ML_CARRIER_IN_TYPE_PUSH, 
                  ML_NO_PUSH_BUT_COUNT     
                } MLPushType;
        
    • New function in mlUtilsAPI:
    • TimeCounter fix in time units etc. lead to revision of interface. Interface was not clear enough and I revised the class completely and it is not compile compatible any more and requires revision of the places of use. See header or SDK documentation for new interfaces. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=2329).

mlLinearAlgebra
ENH:

  • 64 bit warnings on VC8 activated.
  • All warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.
  • Index operators accept size_t instead of unsigned int now.
  • Minor change in system file to force recompilation of entire project.
  • Old style ILAB4 stuff removed from .pro file.
  • Indexes replaced by indexes.

MLDataCompressors
ENH:

  • 64 bit warnings on VC8 activated.
  • virtual functions getVoxelSize and setVoxelSize parameters in DataCompressor class now use size_t instead of MLDataType now.
    IMPORTANT: THIS REQUIRES UPDATES OF DERIVED CLASSES WHICH OVERLOAD THESE ROUTINES!

MLDicomTreeImagepropertyExtension
ENH:

  • 64 bit warnings on VC8 activated.

ML
ENH:

  • 64 bit warnings on VC8 activated.
  • All warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.
  • Minor change in system file to force recompilation of entire project.
  • Some comments improved and more specific now.
  • Module: New convenience routine PagedImage *getNonDummyUpdatedInImg(int inIndex); added to simplified request of pure and valid input images.
  • Fields:
    • Some setStringValue routines reimplemented and now located in .cpp file.
    • All pointer field conversions from and to strings are performed with unsigned 64 bit arithmetics even on 32 bit systems and out of range checks are applied on 32 bit systems. Formerly too small integer arithmetic was used. (BaseField, PointerField, SoNodeField and DicomTagListField).

EnumField changes:

  • Maximum number of enum items is limited to 2^31-1 now.
  • Default constructor of EnumField now private because usage makes no sense and will lead to errors.
  • Enum indexing is done with unsigned size_t instead of int now.

Number of potentially registered data types limited to 2^31-1, because MLDataType is managed as 32 bit signed integer for enum compatibility.

  • Some constant temporary and local variables use const specifier now.
  • Some missing variable initializations added.
  • In Host some signed types have been replaced by more appropriate unsigned types and some other types have been replaced by large versions to prepare safer operations on 64 bit systems.

Binary interface changes on mlAPI:

  • MLFieldGetNumEnums and MLModuleGetNumFields now return a size_t instead of an MLint32.
  • MLImageGetType now requires a size_t as data size parameter instead of an MLint32.
  • MLNumDataTypes returns a size_t instead of an MLint32 now.
  • MLGetNumRegisteredTypeInfos and MLTypeNumComponents return a size_t instead of an MLuint32 now.
  • MLGetCarrierTypeForSize and MLTypeInfosAtIndex now require a size_t instead of an MLuint32 argument.
  • MLTypeInfosPushAndSetInput() and MLTypeInfosPushAndSetOutput() return MLTypePushSingleInfo objects and not an MLTypePushDoubleInfo (formerly called MLTypePushInfo) object any more. They require MLTypeInfoPop() instead of MLTypeInfosPop() as symmetric cleanup function now.
  • MLTypePushdDoubleInfo (formerly called MLTypePushInfo) consists of two MLTypePushSingleInfo objects now. Also the semantics of former wasPushed member has changed to MLPushType semantics.
  • Internal handling and pushing/popping type information onto a stack has changed. Now different stacks are used for input and normal carrier types. Also number of pushes and pops and the size of the data structures have been optimized.
  • Many implementation of CarrierTypes have been optimized and are significantly faster in some situations.
  • Referencing of NULL-pointer to access static members has been revised and uses direct Class::member syntax now to be sure that it works on all compilers.
  • Changes in behavior of multithreaded execution of calculateOutputSubImage methods in Module modules:
    • This is also possible for non scalar/registered/carrier voxel types with limitations from now on. See corresponding section in ML Programming Guide for details before using this feature.
    • While using multiple threads for processing calculateOutputSubImage methods in parallel the ML sets the isMultithreadingActive flag from now on which can be checked with MLIsMultithreadingActive() from mlUtilsAPI.
    • Waiting for finishing of threads during page calculation and updating the busy cursor has been optimized a bit.
    • Activation of multithreading for a module now uses another parameters for setThreadSupport:
      •       enum THREAD_SUPPORT {
                NO_THREAD_SUPPORT                 = 0, 
                CALC_OUTSUBIMAGE_ON_STD_TYPES     = 1, 
                CALC_OUTSUBIMAGE_ON_CARRIER_TYPES = 2, 
                CALC_OUTSUBIMAGE_ON_ALL_TYPES     = 3, 
              };
        
  • The Module class supports bypassing of pages to the output without recalculating them in certain configurations: The corresponding changes in the PagedImage have also been added, either as new method parameters/options.
    
    
        Module: protected: void setBypass(MLint outIndex=0, MLint inIndex=0);
    
        Module: public:    MLint getBypass(MLint outIndex=0) const;
    
        inline void setBypassIndex(MLint index) { _bypassIndex = index; }
    
        inline MLint getBypassIndex() const     { return _bypassIndex;  }
    
  • The Host, PagedImage, Cache and CachedBuffer classes in the ML have been revised and optimized for bypassing, multithreading and certain optimizations in page caching. New functionality also has been added for that:
        void Cache::changePriorityList(std::list<CachedBuffer*>::iterator buffer,
                                     MLuint targetPriority);
        void PagedImage::removePage(MLint pageID, bool removeAlsoIfLocked);
    

MLMiscModules
ENH:

  • 64 bit warnings on VC8 activated.
  • All warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.
  • Some string prints always print 64 bits instead of unsigned long now to have warn free and same print formats for types changing on platforms and type sizes.
  • Replace function in stringUtils revised, a bit documented, simplified and changes for 64 bit.
  • Old ILAB4 stuff removed from .pro file.
  • Minor change in system file to force recompilation of entire project.

MLImageFormat
BUG:

  • MLImageFormatTagList::save: Invalid comment about allowed usage of negative filePos fixed. Negative filePos is and was not allowed. Now filePos has no sign any more and is also an MLuint.

ENH:

  • 64 bit warnings on VC8 activated.
  • All warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.
  • Minor change in system file to force recompilation of entire project.
  • Some string prints always print 64 bits instead of unsigned long now to have warn free and same print formats for types changing on platforms and type sizes.
  • Some MLint return parameters or function arguments changed to MLuint because negative value were senseless.
  • A few comments added.
  • MLImageFormatTagList::extractSpecialTags now returns an error code with is also checked at caller positions. Potential errors are only handled as error and loading continues to be able to restore as much data as possible.

MLKernel
ENH:

  • 64 bit warnings on VC8 activated.
  • All warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.
  • Minor change in system file to force recompilation of entire project.
  • indexTabSize always uses size_t now.
  • Some calcRow functions adopted to size_t and int usage instead of unsigned int and MLint32.
  • Printing of number of kernel element now warn free on all platforms and on 32/64 bit systems.
  • NOTE: Some aspects in kernel element indexing is still a TODO, because indexes are still of type int.

MLTools
ENH:

  • 64 bit warnings on VC8 activated.
  • All warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.
  • Minor change in system file to force recompilation of entire project.
  • Printing of unsigned integer, -long or size arguments is now warn free on all platforms and on 32/64 bit systems.

MLTypeSupport
ENH:

  • 64 bit warnings on VC8 activated.

MLDiagnosis
ENH:

  • 64 bit warnings on VC8 activated.
  • All warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.

MLBase
ENH:

  • 64 bit warnings on VC8 activated.
  • Some warnings removed, many unsigned, long and int vars replaced by size_t for 64 bit safety.

Other (MeVis) Projects

  • MLModuleTests: New tests added for SoVirtualVolume, ML Fields and StringConversionTests revised.
  • New project MLBinaryTree to store and reload binary trees, TreeNode-trees and BaseObjects. It can be used as an alternative for the XMLParser and XMLTreeNode management, especially to be independent of an XML third party library.

Release Note Overview for MeVisLab1.5 RC to MeVisLab1.5

  • Fixed: MLImageFormat modules could not load read-only modules.
  • Fixed: MLImageFormat save/load worked without checksums on data and could load corrupted data pages.
  • Fixed: Adding/casting of vector typed images was limited, e.g. Vector3 was not considered compatible to Vector3f.
  • Fixed: Adding/casting of matrix typed images was limited, e.g. Matrix3 was not considered compatible to Matrix3f.
  • Fixed: Stream output of DCMTree could not be read with stream input and caused crashes and unloadable MLImageFormat files when they stored DCMTree information. Older files with dicom information now can still be read with luck (only in release mode) to recover data, however dicom information in them will be unusable.
  • Fixed: Some incorrect documentation issues in ML guide and class documentation.
  • Fixed: Rare crash of multithreaded operations on non scalar voxel types in mlHost.

ITK- & VTK Modules:

  • Fixed: MLToVTKImage conversion of non scalar ML voxel types to vtkImageData.
  • Fixed: Handling of missing voxel spacing on conversion from vtk to ML data in VTKToMLImage.
  • Fixed: Too large panels in vtk and itk modules.
  • Enhances: Spacing now shown in vtkInputInfos.
  • Known issue: vtk Book Data references should be removed from examples and replaced by other data.

Release Note Overview for MeVisLab1.5 RC.

General

  • New modes WARN=MAXIMUM and WARN=EXTREME in .pro files for MacOSX and Linux platforms.

ML, mlUtils, mlLinearAlgebra, misc

  • Many Quality control checks, high-level warning removals, adoptions to new gcc compiler versions, coding standard compliance and revisions applied. A number of minor bugs fixed.
  • Port to MacOsX, VC7 and VC8 compilers.
  • Quaternion support added to mlLinearAlgebra and as new voxel type to MLTypeExtensions.
  • Numeric support for min/max/epsilon handling added mlUtils.
  • New classes ImagePropertyExtension, ImagePropertyExtensionContainer and MLDicomTreeImagePropertyExtension added to ML, mlUtils and misc. The container is member of class MedicalImageProperties now to allow for adding extensions of image properties.
  • DataCompressor classes and factory added as well as specializations for BZip2 and ZLib data compressors. User implemented compressors are supported.
  • mlFileSystem in mlUtils has new functions and platform independent support for very large files even on 32 bit systems.
  • A number of new error codes and tool functions added.
  • Fields Vector2, Vector3, Vector4, SubImageBoxd and long double use correct precisions in string representation now.

Projects

  • New project MLImageFormat added to support dedicated ML Image File Format with support for 6D, (user defined) compression, extended voxel types, user tags and files > 4GB even on 32 bit systems. It also provides a file caching module analog to the MemCache module.
  • New project MLBitImageTools to store/load BitImage objects and to provide them as Base objects.
  • ImageIterator modules now support file caching.
  • New module TransformEdit in MLMiscModulesInv.
  • New Projects in MLPublicSources:
    • misc/MLDataCompressors/MLDataCompressor
    • misc/MLDataCompressors/MLBZip2DataCompressor
    • misc/MLDataCompressors/ZLibDataCompressor
    • misc/MLDicomTreeImagePropertyExtension
    • std/ML/MLImageFormat
    • std/ML/MLImageIterator
    • std/ML/MLBitImageTools
    • std/ML/MLTypeExtensions
    • std/AddOns/VTK/VTKAdapters
    • std/AddOns/VTK/WEMVTKAdapters
  • Wrapper code generator for itk and vtk classes no available as additional SDK installer.

Changes before 10.07.2007

ML

  • Revision of ML doxygen documentation. Many examples and paragraphs activated which formerly were skipped because of incorrect formatting of doxygen paragraphs and code tags.
  • Usage of backslash-c completely removed from doxygen documentation of the ML, because it was not used consequently; either too many or too few vars and classes were marked.

Changes before 10.05.2007

General

ML

Projects

Changes before 31.01.2007

General

  • Version change to 1.5.50.14.65 in mlVersion.h in mlUtils.
  • Application of QA review comments for OncoCare project.
  • Many comments improved and fixed in many classes.
  • Many C-casts changed to static casts.
  • Old, unused and senseless code fragments cleaned up, e.g. in ErrorOutput and DateTime classes as well as in ErrorMacros.h.
  • Some better fitting data types used in a few cases, e.g. mlRuntimeDict.
  • More constants introduced, e.g. in mlFilesystem.cpp.
  • Better error analysis added, e.g. in mlFilesystem.cpp.
  • Compiler switch indentation improved in many places.
  • MLErrorCode and MLDataType are MLint32 from now on and not enums any more, because it required too many cast and too many problem to handle invalid data types or error codes with value -1. Also ML_INVALID_DATA_TYPE and ML_INVALID_ERROR_CODE defines added. (mlTypeDefs.h) These new constants are now applied at many placed where formerly -1 had been used.

mlUtils

  • Error handling system and related function now traced with special macros. They are not traced any more unless a special compiler switch is activated. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=1783).
  • mlUtilsAPI:
    • Throwing of exception removed because on C-functions exceptions are not always legal. Now non rethrowing macros are used. Became necessary because VC8 complaint about that.
  • mlErrorOutput.cpp
    • Function refactored.
  • ConvertUTF and mlUnicode:
    • Casts and parameter types revised, old and buggy routine removed, indentations updated, unused Boolean types and related definitions removed.
  • Older inline expression returning an always false value in mlErrorMacros has been replaced by a non constant variable which is always false. This became necessary because newer compiler detected that the former inline expression was constant which resulted to thousands of warnings in all catch expressions using the former inline call.

ML

  • TSubImage.h: Missing NULL-Pointer checks handled with errors from now on.
  • TemplateSupport.h: Constant Pointers can also be checked now.
  • mlDataTypes: MLTypegetNumComponents return correct unsigned type now. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=1719).
  • mlDataTypes:
    • Many comments fixed.
    • Throwing of exception removed because on C-functions exceptions are not always legal. Now non rethrowing macros are used. Became necessary because VC8 complaint about that.
  • CachedBuffer:
    • Iterators are initiatized with default constructors now, because pointer initialization is illegal and works only on old compiler versions.

mlLinearAlgebra

  • Complete revision due to code review. Quite a number of changes have been applied, especially missing tracing and try/catch macros added, comments fixed, potential divisions by zero checked etc. Multiply implemented code is now implemented as template in mlLinearAlgebraTools.h. The most important changes are that many constructors are explicit now, thus they cannot be used implicitly any more. This causes many compile problems mostly when using scalar values instead of vectors or subimage boxes. The reason for these changes are that the formerly used constructors allowed the usage of scalars instead of vectors which caused a number of accidentally uses of vectors where only scalars were intended. Now the vector constructors must be written explictly, for example ImageVector(17) instead of only 17. Note that all former constructors still exist. Here are some examples of now failing codes and how they can be fixed:
        Example 1:
          OLD:
          ImageVector a;
          a = 0;
    
          NEW:
          ImageVector a(0);  or
    
          ImageVector a;
          a.set(0);     or
    
          ImageVector a;
          a = ImageVector(0); or
    
          ImageVector a(0,0,0,0,0,0); or
    
          ImageVector a;
          a.set(0,0,0,0,0,0);
    
    
        Example 2:
          Especially be careful when fixing SubImageBox statements,
          because a box of two vectors v1 and v2 include both
          corners, v1 and v2.
          Thus a box
          SubImageBox(2) =
          SubImageBox(ImageVector(2)) =
          SubImageBox(ImageVector(0), ImageVector(2)) contains
          3x3x3x3x3x3 voxels.
          To build an empty box use the default constructor SubImageBox().
    
          OLD:
          SubImageBox box(10);
    
          NEW:
          SubImageBox box(ImageVector(10));  or better:
    
          SubImageBox box(ImageVector(0), ImageVector(10));
    
    
        Example 3:
          OLD:
          Vector3 v = 0;
    
          NEW:
          Vector3 v(0);  or
    
          Vector3 v;
          v = Vector3(0); or
    
          Vector3 v(0,0,0); or
    
          Vector3 v;
          v = Vector3(0,0,0);
    

Changes before 09.11.2006

General

  • Version change to 1.5.36.9.49 in mlVersion.h in mlUtils.

mlUtils

  • From now on the RuntimeType system specifies correct binary names with new compiler switch MEVIS_TARGET. Its definition is checked in mlUtilsSystem and is st in systemPackagedInit.pro. This is required to be able to load modules or libraries for runtime types if they are still not loaded. Therefore the correct DLL name if necessary.
  • Recently loaded dll name function does not remove terminating "init" strings, because dll name is not determined from init function any longer but from compiler definition generated in .pro file.
  • Each RutimeType has a creation id which indicates its place in creation order.
  • In mlTypedefs the new macro ML_QUOTE has been added.
  • In MLUtilsInitiialize the necessary initializations of Base and Runtime type system are performed; former versions did that still in ML which was too late.
  • mlUtilsSystem.h now checks for valid definition of MEVIS_TARGET compiuler definition which must contain the name of the compiled binary. It is used to create the dll name for registered RuntimeTypes from now on.

ML

MLImageFormat

  • Saving/storing of ImagePropertyExtensions corrected and DLL load of runtime types fixed.
  • Buggy handling of empty file names fixed in load, save and info module.

Changes before 20.10.2006

General

  • Version change to 1.5.35.9.45 in mlVersion.h in mlUtils.

mlLinearAlgebra

MLTypeExtensions

  • New image voxel types for quaternions added.

ML

Other changes/New standard projects

  • MLImageFormat also stores/reloads ImagePropertyExtensions now.
  • MLDicomtreeImagePropertyExtension added.

Changes before 20.10.2006

General

  • Version change to 1.5.34.9.47 in mlVersion.h in mlUtils.

mlUtils

  • mlFileSystem functionality not in ML namespace any more, because it is considered part of the C-API of mlUtils.
  • Some header documentations improved.

ML

  • SubImage: New method compare for subimage comparison.
  • Some header documentations improved.
  • A number of doxygen fixes.

Other/New standard projects

Changes before 30.08.2006

General

  • Version change to 1.5.33.9.46 in mlVersion.h in mlUtils.

mlUtils

ML

-mlHost & mlBaseOp:

  • Undocumented catching of string exceptions removed.
  • Still undocumented behavior for catching MLErrorCode implemented to prepare future interruption and controlled handling of MLErrorCode exceptions.

mlHost:

  • Memory allocation/free/reallocation mismatch fixed.
  • Robustness and handling of exceptions in threads improved.

Other/New standard projects

  • MLImageFormat and dependent modules/classes:
    • Documentation enhanced.
    • Error handling enhanced.
    • File removal in case of save errors fixed.
    • Update modes fixed.
    • Some new tags added to describe data type size and structure.
  • MLBZip2DataCompressor class added.
  • MLDataCompressor base class:
    • New data optimization function for enhanced compression ratios.
    • Documentation and error handling enhanced.
    • New methodology added for additional compressor information and hints which provides automatic detectability.

Changes before 23.08.2006

General

  • Version change to 1.4.32.8.45 in mlVersion.h in mlUtils.

mlUtils

  • New project, directories and classes added:
    • MLDataCompressor
    • MLDataCompressorFactory
    • MLZLibDataCompressor See MLDataCompressor.h for details about usage and derivation of new classes.

ML

-mlFields and mlFieldContainer:

Other/New standard projects

  • BasicModules: ConstImg and TestPattern: Memory leaks removed.
  • MLImageFormat project and classes added.
  • MLImageFormatInfo, -Load, and Save modules added.
  • Code generators and generated VTK and ITK modules:s
    • EnvVarSource field added for relocatable generation of source code generation of trees.
    • Unused RuntimeType parameter for backward compatibility readded to some functions.
    • CoordinateSystem handling improved in metrics.

MeVis projects:

Changes before 23.08.2006

General

  • Version change to 1.3.30.7.42 in mlVersion.h in mlUtils.
  • Some adoptions to new and stricter gcc compilers.

mlUtils

  • Debug output now also send correctly to registered outputs if fulldebugging is enabled but symbol controlled debugging is off. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=1595).
  • mlApplicationProperties:
    • Coding Standards applied.
    • Tracing/Try/Cacthing applied.
    • Documentation improved.
  • ErrorOutput:
    • Assignment operators and copy constructor functional now.
    • Stream output added.
    • destroy() function added.
  • Notify: Copy constructor, assignment operator and stream output added.
  • mlTypeDefs.h:
    • New error codes added:
      • ML_TOO_MANY_PUSHES_OR_ADDS
      • ML_TOO_MANY_POPS_OR_REMOVES
      • ML_STACK_TABLE_OR_BUFFER_EMPTY
      • ML_STACK_TABLE_OR_BUFFER_NOT_EMPTY
      • ML_ELEMENT_NOT_FOUND
  • API & mlTypeDefs.h:
    • EventFilter, ApplicationProperty etc. structs and callbacks moved from UtilsAPI to mlTypeDefs.h now.
    • New error codes added. See mlTypeDefs.h.

mlLinearAlgebra

  • mlLinearAlgebraTraits.h with typeRangeMin() and typeRangeMax() added which are useful to determine minimum and maximum values of template types.

ML

  • Some backward compatibility stuff to ILAB4 removed.
  • ML:
    • API: MLPushState() and MLPopState() functions added.
    • API: A few documentation errors fixed.
    • New class State added to push and pop the current ML state.
    • Class Module provides friend access for State class.
    • Class Field has new method enableNotificationCounterState.
    • Class Some missing issues documented.
    • Class Host has stream output now.
    • Class Host provides push and pop for defaultHost instance now.
    • Class Cache class has improved strem output now.
    • initSystemML: destroyML and MLdestroy exist symmetrically to init functions now.

MLTools

MLStreamSupport

  • Redirctions of std::cerr and std::cout improved. Outputs of cerr in newline in MeVisLab console not done any more on each part; buffer is flushed on newlines, on flushes, or on a sufficiently large buffer now. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=501).

MLModuleTests

Changes before 12.05.2006

General

  • Version change to 1.3.29.6.40 in mlVersion.h in mlUtils.

ML, MLUtils, mlLinearAlgebra

  • mlSubImg.cpp, Bugfix: Usage of setData also sets virtually members of derived classes when allocating data. Former version did not work in TSubImage classes.

Changes before 12.05.2006

General

  • Version change to 1.3.29.6.40 in mlVersion.h in mlUtils.

ML, MLUtils, mlLinearAlgebra

  • mlSubImg.cpp, Bugfix: Usage of setData also sets virtually members of derived classes when allocating data. Former version did not work in TSubImage classes.

Changes before 12.05.2006

General

  • Version change to 1.3.29.6.39 in mlVersion.h in mlUtils.

ML, MLUtils, mlLinearAlgebra

  • mlKernel.h: Linux warnings removed, casts and documentation added.
  • mlScalarVectorTemplate: Documentation about integer instantiations added.

Changes before 11.05.2006

General

ML, MLUtils, mlLinearAlgebra

  • mlMat6.h: Senseless cast operations in combination with warnings on linux fixed.
  • mlScalarVectorTemplate: Incorrect integer abs and sqrt operations fixed for linux case.
  • mlCarrierTypes.h: Now macros are available for compile time determination of carrier types from byte sizes or other types.
  • mlDataTypes.h: New functions
    • MLTypeGetNumComponents
    • MLTypeGetStructInfoString
    • MLTypeGetBestScalarTypeForTypeComponentChars
    • MLTypeGetBestScalarTypeForTypeComponents added.

mlKernel

  • mlKernel.h: Some documentation changed and many warnings removed for the case of compilation with integer types. Operations are applied as casts then as documented.

mlKernel

mlTestsAndChecks

  • Some simple tests added (Stream output of DateTime, CarrierType macros)

Changes before 31.01.2006

General

ML

  • New ModuleTools class for tool functions related to Module programming. Currently it only provides the adaptPageExtent functionailty moved from Module.

mlKernel

  • BugFix in some LineApplicator stuff: Invalid parameter of types long or MLint in overloaded functions is now int as in overloaded virtual function. HessianFilter now works again.

Changes before 31.12.2005

General

  • In a number of projects changes have been applied for better compliance to coding stlyles.
  • Many changes in the ML programming guide, especially:
    • programming and usage of registered voxel types.
    • kernel class and
    • a number of smaller fixes and improvements.
  • A number of tests for ML, mlLinearAlgebra, Kernel and other classes added to the project MLTestsAndChecks.

mlUtils

  • New file mlCompilerOptimizations.h with typical compiler optimizations for some central and time critical .cpp files. It should be used only in .cpp files to avoid that optimizations become "visible" on undesired places. It is still not activated. Many often used .cpp files include mlCompilerOptimizations.h now.
  • Some syntax errors in comments corrected.

ML

  • Destruction of ML Modules in destructor has been rmeoved. It is considered too unsafe, because such modules could use other modules internally which then could already be removed. Now only a warning is still printed. Applications are required to delete each module they create.
  • Now global enabling/disabling of notification is safe for recursions, because in rare contexts invalid activation of notifications occured and caused errors.
  • Some syntax errors in comments corrected.
  • Bug in operator!= in ScaleShiftData.h fixed.
  • SubImage provides all fill methods from TSubImage as untyped versions now. Hence in many module classes template code can be reduced.
  • ThreadInfo now also has the thread ID threadHandle an indicator isThread whether the calculation is really a thread or not.
  • PagedImage - if initialized correctly which is done in Module modules - provids getTile/freeTile functionality for convenience now.
  • Module: Wrapped functionality from Host is better referenced now.
  • In Host and Module the method/function processAllPages now has an empty box as default parameter for the region to be process. If it is empty the entire image is processed, otherwise all pages overlapped by the user defined region. processAllPages is public now to make it available to be called from other modules to pre process output pages.
  • mlDataTypes.cpp: Internal usage of other typenames in implementation than in header definition fixed. It caused incompatibilites on MacOsX system.

mlLinearAlgebra

  • Old-styled (void) parameters changed to ().
  • All friend declarations removed and former friend use public access functionality of classes now.
  • A number of linux warnings removed.
  • Comparsion operator optimized.
  • inverse() methods of matrix classes have diagnosis flag now. If not passed then matrix inversions cause errors on non invertible matrices, otherwise a flag is returned for diagnosis.
  • A number of comment errors fixed.

mlKernel

  • Kernel macros have been generalized and simplified, much functionality is now located in KernelBaseModule. New macros for advanced kernel filtering available.
  • KernelTools filter extended data types correctly now. KernelTools also have a new method for expanding a box for separable filtering now. One createIndexTab function has been removed since it is not necessary any more.
  • 2 new examples for kernel filtering in directory examples/ML/MLKernelExamples. KernelExample also moved from MLKernel to that directory.

MLTools

Changes before 30.11.2005

General

mlLinearAlgebra

  • Complete revision, all classes are templated and available for float, double and long double typedefs now, for example Vector2, Vector2f and Vector2ld are type defined from Tvec2. New classes Matrix2, Matrix5, Matrix6, and Vector5 are available, respectively. Matrix classes have constructors from double arrays now. Eventually used forward declarations of mlLinearAlgebra vectors or matrices change from (for example)
         class Vector2;
    

to

    template <class DT> class Tvec2;
    typedef Tvec2<MLdouble> Vector2d;
    typedef Vector2d Vector2;

ML

  • Invalid rethrow of exceptions in destructor in Host corrected.
  • A number of syntax errors in comments removed.
  • mlAPI: New function MLGetImageStateString added to get a desciption string for the state of a PagedImage.
  • ScaleShiftData is templated now. The default version uses MLldouble values instead of MLdouble values now.
  • SubImage class has new methods:
    • allocate
    • free
    • void *getSubImagePointer(const ImageVector &p)
    • void *getSubImagePointer(MLint x, MLint y, MLint z)
    • void *getSubImagePointer(const ImageVector &p)
    • void *getSubImagePointer(MLint x, MLint y, MLint z)
  • Host:
    • Undetected bugs in Host fixed which deleted array of non existing objects. Also some data types adapted to return types of function calls. Hence, the allocation/deletion of temporary input buffer not done any more if the module does not have inputs. It caused crashes after introduction of virtual destructors in PagedImage, SubImage and ImageProperties.
    • Comments corrected/updated/changed.
    • Many variables changed to const state to avoid undesired usage.
    • Many multiply used calculated variabled replaced by shorter
    • references for optimizations.
    • StateInfosStrings set in PagedImgs by updateImageProperties to simplify diagnosis on invalidated image outputs.
    • UpdateImageProps: Output image always invalidated in case of errors from now on.
    • ScaleShift of voxel values possible by new feature in calcInSubImageProps from now on if input subimage is not a memory image.
    • Invalid rethrow of exceptions in destructor of helper class removed.
    • Some braces added for single statements.
    • If input buffers are copied then the user defined scaleShiftData is passed to copyPages to provides inSubImgProp-data scaling.
    • New feature: ThreadInfo struct is passed to calculateOutputSubImage from now one and can be used by module programmers for advanced thread-safe programming.
  • Inactive optimization stuff added for future use in the .cpp files:
    • mlAPI
    • mlBaseOp
    • mlCachedBuffer
    • mlCache
    • mlDataTypes
    • mlField
    • mlFields
    • mlHost
    • mlSubImg
  • Two new CarrierTypes introduced, one for 24 bytes and on for 512 bytes voxel size. All modules and related classes have been adapted.
  • SubImageBox:
    • New method and static function merge now.
    • Method intersect is constant now.
    • Comparison operators return a boolean value now.
  • mlImageVector.h:
    • Indexing operations optimized in mlVector by removing checks and by using union statements to identify x,...,u with an array.
    • New methods
      • fillGreaterComps,
      • fillSmallerComps, and
      • fillEqualComps added.

MLTypeExtensions

  • The following new voxel types are available:
    • Vector5f, Vector7f, Vector9f, Vector10f, Vector64f
    • Vector5, Vector7, Vector9, Vector10, Vector64
    • Matrix2f, Matrix3f, Matrix4f, Matrix5f, Matrix6f
    • Matrix2, Matrix5, Matrix6

MLTypeSupport

  • The following new modules are available:
    • TypeArithmetics1
    • TypeArithmetics2
    • TypeToScalars
    • TypeFromScalars
    • TypeComposer[8,16,32,64]
    • TypeDecomposer[8,16,32,64] These modules provide a wide range of functionality for creating, processing, and converting, non-scalar voxel images. With TypeToScalars and TypeFromScalars non-scalar images can be converted such that they can be loaded/saved as normal image file formats. New voxel types from MLTypeExtensions supported.

mlKernel

  • Kernel[Base]Op provides multiple inputs/outputs now.
  • Filtering for Separable kernels available.
  • New CALC_ROW*_EXT and CALC_ROW*_DD macros with more information for row filtering and for support of different voxel types between input and output images.
  • Templated functions in KernelTools are also available as global functions with ML prefix due to linker problems with templated class functions on some platforms.

mlBasicModules

  • Info module has new field to show state info string for better diagnosis of reasons for module output invalidations.

Changes before 08.06.2005

General

mlUtils, ML

  • New files mlSystemInfo.h and mlSystemInfo.cpp added to mlUtils. They provide functions to get number of cpus and virtual cpus.
  • mlInitSystemML now initializes the number of CPUS to the number of virtual cpus and not to the default 2 any more.

Changes before 31.03.2005

General

mlUtils, ML, MLTools, mlLinearAlgebra

  • New file mlConfig.h where global settings for ML configuration can be defined. It is included indirectly by all ML headers. Especially a new flag to configure debug mode like release mode from point of error and exception handling.
  • mlUtilsSystem.h:
    ML_TYPENAME macro introduced for platform independent programming between VC++6 and ISO-compliant code.
  • Syngo references and flags replaced by ML defines.
  • Classes VirtualVolume, TVirtualVolume and SoVirtualVolume have been improved in many items:
    • Now moveCursorFXLF and resetCursor methods for linear traversal are available as in BitImage now.
    • Special cursor movements function for cursor offsetting added.
    • Class(es) not exported any more, but all important functions/methods. So inline usage becomes possible for performance optimization.
    • Convenience constructors added in TVirtualVolume which also creates an untyped VirtualVolume instance internally. So the management of an additional untyped instance often becomes unnecessary.
    • Access method to used untyped virtual volume in TVirtualVolume is available now.
    • Many comment errors and syntax errors fixed.

-Class Mat3 has new method jacobi to calculate Jacobi-Decomposition of 3x3 matrix.

ML

  • Cache uses a sequence concept for caching and clearing image pages instead of a stack concept. It is assumed that it is more probable that recently created pages will be reused reused earlier than older pages when clearing the cache.
  • Default page extents are set to 128x128x1x1x1x1 in paged image.
  • touch of OutputConnector field posts error in case of invalid notifying such fields during host image processing.
  • Host has a new flag indicating that image processing is active or not.
  • Some inappropriate data type usages replaced by adequate ones, especially when using int or MLint instead of size_t.
  • Syngo references and flags replaced by ML defines.
  • Page sets are not reduced for memory optimization any longer if they do not use more than 1MB. So processing in parallel becomes more effective.
  • Too early removal of DummyOp on ML destruction does not occur any more.
  • Missing return value in assignment operator of TSubImage added.
  • Cache priority bug fixed. Missing priority assignment to pages from memory images added. The bug lead to ineffective page caching if memory images were used.
  • Bug fix in MLGetPromotedPrecision fixed. In some special cases the first data type argument was returned instead of the correct second one.
  • Bug fix in Matrix4 field. If connected with too little matrix numbers in strings it tried to fill undefined values which lead to crashes due to invalid comparison in loop.
  • Bug fix in istream read operations for 64 bit integers on WIN32 systems. Now parsing is implemented, however only for decimal numbers.

MLMiscModules

  • Module Scale: Unused members removed and field access interface added. Fields renamed. Incorrectly ported "update" enum (from ILAB4 to MeVisLab) has been corrected by renaming enum values. On parameters changes notifications of output image have been reduced to the minimum now; formerly too many notifications were sent on some parameter settings as complained in bugs 1122 and 1123. In some macro or application contexts this might lead to incompatibilities of the Scale module. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=1122 and Bug http://bugzilla.mevis.de//show_bug.cgi?id=1123).

MLDiagnosis

SoView2D

Changes before 29.12.2004

General

  • MLlong* and MLulong* types removed since they only were for binary compatibility of the ML API. Now many interface functions use non ML types or MLint* /MLuint* types instead to simplify everything.
  • In many source code in the entire repository default cases have been revised to handle undefined cases. The typical behavior is to post an error and to use the standard case instead.

ML Guide

  • mlFileSystem.h, mlUnicodes.h, changes in mlTypeExample.h and 64 bit support are documented now. Many other changes of outdated code have been updated.

RenderLib

  • To avoid too many collisions between (unsigned) long and integer references between ML and RenderLib the rl[u]Int types now are also real integer types and not long types any more.

Changes before 24.12.2004

General

  • Version change to 1.1.7.3.11 in mlVersion.h. Repository has been tagged to Tag_before_ML_1_1_7_3_11_update.
  • 64 bit addressing for large images added to the repository, but still not activated.
  • A large number of fixes has been applied to fix
    • syntax errors in documentations,
    • missing initializations of uninitialized variables to provide better result reproducibility,
    • braces around single statements in if/else and other control structures
    • bad indented code due to tab to space changes,
    • non uniform documentation formats,
    • namespace ml {} usage (replaced by ML_START_NAMESPACE and ML_END_NAMESPACE or corresponding other namespace macros,
    • sprintf usage especially with too small print buffers or with inspecified string length. Now in most cases snprintf is used. and many other stuff to reach better coding style compliance.

ML Guide

mlUtils

  • Generally:
    • Many minor syntax errors in comments have been corrected.
    • Version change to 1.1.7.3.11 in mlVersion.h.
  • mlErrorMacros.h: A new macro ML_TRACE_IN_TIME_CRITICAL has been introduced for time critical functions. Currently it is not compiled. If desired it can be compiled like ML_TRACE_IN for higher tracing resolution.

In mlSyngoSupport.h the ML_TRACE_IN and ML_TRACE_IN_TIME_CRITICAL are both implemented.

  • mlDateTime class uses its own type definitions for year, month day etc.

New implementations for platform independent snprintf and sscanf have been added since Microsoft makes it very difficult to reimplement sscanf correctly. So reimplementation for linux have been added to be compatible with the windows string formats. So the following macros make 64 bit printing platform independent and should be used where MLint or MLint64 needs to printed. The repository has been checked and updated.

     #define MLsnprintf _MLsnprintf
     #define MLsscanf   _MLsscanf
     ML_UTILS_EXPORT int _MLsnprintf(char*s, size_t maxChars, const char* format, ...);
     ML_UTILS_EXPORT int _MLsscanf(char*s, const char* format, ...);

ML and other projects

  • Generally and 32/64 Bit support:
    • The ML supports processing of very large images (up to about 2^52 voxels) on 32 bit systems now if used modules support page based image processing and if those modules do not use more than 2^30 voxels at once.
    • Many minor syntax errors in comments have been corrected.
    • Many types have been replaced for correct addressing of 2^62 voxel sized images on 32 bit machines.\ The decision about right types follows some rules:
      • All calculations for voxel positioning are performed in MLint; that guarantees that the integer is 64 bit if ML_USE_64_BIT_ADRESSES is enabled; otherwise MLint remains the normal 32 bit type - so nothing changes in the default compilation.
        Pointer addressing will remain 32 bit on 32 bit machines; so pointer offsetting etc. remains 32 bit.
      • Types whose size remains (e.g.) 32 bit even on a real 64 bit system have been replaced by their explicit sized types, like MLint16 or MLuint32.
      • Types which shall be 64 bit on 64 bit machines and 32 bit on 32 bit machines which are not needed for 64 bit calculations on 32 machines remain the standard types, e.g. unsigned int or int.
      • The types MLint32 and MLuint32 were typedefs from (un)signed long; that has been corrected which leads to incompatibility of Reference passings of those types. So the new types MLulong32 and MLlong32 have been introduced and are used in those cases instead of the former ML(u)int32 types. These type will be removed after completion of integration of 64 bit support although this will lead to a binary incompatibility of the ML API.
      • The type MLuint has been introduced for 32/64 bit unsigned integer processing. This was necessary to avoid functionality changes and support correct 64 bit usage if ML_USE_64_BIT_ADRESSES is enabled; however this type should only be used with care since its conversion to floating point values is not supported by VC++6 compilers. That normally does not lead to real problems since the compiler comments this with an error so this problem does not remain undetected. Solutions are simple casts to MLint or MLint64 before casting it to a floating point type.
      • The types MLCTBool, MLCTUInt and MLCTInt have been introduced to be able to specify the calculation type of user implemented voxel types independently of the 32/64 bit system.
      • If too many or too small pages would result from very large images then the ML will post warnings and will try too optimize page extents. Otherwise the data structures for management of paged images could lead to memory overflow on very large images. Later versions will return error codes to notify the programmer about that.
  • GCC3.4-Support Changes
    • In many projects changes have been applied to reach ISO-standard conformity of the source code. So the code can also be compiled with the gcc3.4 on the linux platform.
      • Most changes are explicit namespace specifications of functions (often from math.h), explicit superclass specifications for members and methods inherited from superclasses etc.
      • Sometimes forgotten typename specifications have been added.
      • Some outputs to cerr or cout are posted with ML_PRINT_ERROR or similar macros now.
  • A detailed performance analysis for high page managing load (e.g. on very small page extents) has been done. In many places in mlImageVector.h, mlTSubImage.h, mlSubImage.h, mlSubImageBox.h, mlDataTypes.h the following changes have been applied:
    • Usage of constructor initializations instead of member assignments in constructor body,
    • Usage of copy constructors instead of constructing with subsequent assignment etc.
    • Usage of ImageVector.set() methods instead of assignment operators.
    • Usage of temporary buffers for storing values instead of multiple calls,
    • Replacement of ML_TRACE_IN with ML_TRACE_IN_TIME_CRITICAL (which is not compiled in normal versions).
    • In mlHost some not needed mlDebug prints and time measurements have been removed.
    • Applying of some coding standards: Using brackets around boolean expressions.
  • CachedBuffer in mlCachedBuffer.h has two new methods to ask for creation time and last use time. These methods are intended for future cache optimizers.
  • TVector in mlImageVector.h
    • Print function for class TVector added for formatted and 64 bit capable vector output. In some project this print function is used to simplify the complex 6d vector outputs.
  • mlTypeInfos for registered types have been changed in some placed to fit 32/64 bit support. They use MLCTBool and MLCTInt types now instead of less specific int types.
  • mlCarrierTypes.h
    • Assignments of CarrierTypes to themselves suppressed, which could have leads to problems.
  • In TSubImage in mlTSubImage.h, convertPointerToImagePosition() and convertPointerToSubImagePosition:
    • Pointers may be passed as NULL now, they will be ignored then. The former version would have runs into crashes without any check.
    • Many cursor, image access and positioning arithmetics has been implemented for 64 bit mode on 32 bit system.
  • MLExamples project removed. It contained MLExampleAdd and MLMemoryImage which were old stuff and not used any more.
  • Other C-examples for the ML updated to the current ML version and revised a bit.

MLTypeExtensions

  • The default cast from scalar to complex value has been changed. In former versions the cast of a scalar p resulted to the complex value (p,p). Now the cast results to (p,0). All type extension use the correct MLCTUInt, MLCTInt and MLCTBool data types now.

32/64-Support changes in Other projects

  • MLMiscModules: mlLutCore, mlImageComposer, mlGlobalStat, mlEnhance, mlBoundingBox, mlAdvancedStopWatch, Scale3D:
  • MLMRFFeatureFilter
  • MLRate: mlConstrainedConnectionCost
  • MLVessel1: TreeAnalysis, MLGraph.
  • MLKernel: Most files. The temporary usage of MLint32 type have been replaced by standard types like int or unsigned int so that 64 bit support will work correctly on 64 bit systems. Some doubles, ints, longs etc changed to corresponding ML or standard data types for 2^63 voxel addressings. Also a few code fragments changed.
    See also general comments for the ML written above for decision of type changes.
  • Many print and scan string statements have been revised and checked whether they print 64 bit integers (MLints) correctly. Also a large number of variable initializations and changes to snprintf usages has been done to make sprintf statements safer. Some bugs have been removed.

Changes before 12.11.2004

mlUtils

  • mlVersion:
    There is a new convenience function to do version check and error message composition for library init macros. So error handling is implemented only once in mlUtils and not in each library. Also error handling is done always in the valid mlUtils context and not in the dll with invalid version. (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=906).

ML

  • In mlHost.cpp some mlDebug statements commented out to speed time critical routines.
  • CachedBuffer tracks creation time, number of locks and time of last usage now for future cache optimizers.
  • Although zero or negative image extents were never allowed and crash reason had been fixed a long time ago a special check has been added to image property calculation in ML host: All negative or zero image extents after calculateOutputSubImage calls lead to invalidated output image properties comparable to getOutputImage()->setInvalid(). So calculations should never start on such image extents. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=178).
  • mlInitSystemML: Load failure on optional MLTypeExtension library does not post errors any more. Now loading of that library can be suppressed by setting the environment variable ML_SUPPRESS_MLTYPEEXTENSION_LOAD. (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=977).
  • BugFix: Crashes on automatic ML destruction without previous call of MLDestroy occurred since modules still were registered in the ML core while automatic created instance of default Host was destroyed. Usually this occurred while exiting e.g. MeVisLab with a CoreControl module on the network. Now the default Host is destroyed under control only by MLDestroy. The unique DummyOp instance is handled in the same way now. Now undeleted ML modules will be deleted in MLDestroy/destroyML calls to avoid memory leaks after ML destruction. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=904).

Changes before 30.11.2004

mlUtils

MLMiscModuleInv2

  • Draw3D module uses virtual volumes instead of memory image now so that it hopefully causes less memory problems. Also long time suppressed drawing modes have been reactivated (working on visible voxels, showing drawn areas on background). Cone Drawing fixed. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=912)

MLTools

  • VirtualVolume: Convenience methods getExtent(), destroyTypedVirtualVolume(...) and createTypedVirtualVolume() added. So typed virtual volumes can be handled easier without using templates.
  • TVirtualVolume: New function copyMaskToSubImage(TSubImage<OUTDTYPE> &outSubImg, BitImage &maskBits, bool maskValue = true, bool writeBK=false, OUTDTYPE bkVal=0) to copy masked voxels from virtual volume to subimages.

Changes before 26.10.2004

ML and mlUtils

  • New Version number 1.1.5.1.8 set in mlVersion.h in mlUtils.
  • Changes on Cache, Host and ErrorOutput settings are not notified any longer to MLNotify on changes to identical values to reduce the number of notification. Changes on callback function are still notified always. So multiple instances of (Core)Control module work fine now. (Bug http://bugzilla.mevis.de//show_bug.cgi?id=921)

Changes before 24.09.2004

General changes:

  • New Version number 1.1.5.1.7 set in mlVersion.h in mlUtils.
  • Tagged to version ML_1_1_5_1_7_RELEASE_FOR_SIEMENS.

ML

  • The class template TSubImage has three new methods which complete the existing methods for cursor movement in x,y and z dimension:
        inline void moveC() { _cursor += _stride.c; }
        inline void moveT() { _cursor += _stride.t; }
        inline void moveU() { _cursor += _stride.u; }
    
    Most int and longs have been replaced by MLint to prepare 64 bit support in future versions. (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=536)

MLUtils

  • General: Some comments have been corrected.
  • Error messages now can also add the file and function names list of recently called functions and of the current call stack. This behavior can be configured with the following new methods in class ErrorOutput:
    • unsigned long getMaxNumTraceListDumps() const { return _maxNumTraceListDumps; }
    • void setMaxNumTraceListDumps(MLGlobalTraceBufferType num);
    • unsigned long getMaxNumTraceStackDumps() const { return _maxNumTraceStackDumps; }
    • void setMaxNumTraceStackDumps(MLGlobalTraceBufferType num);
    • unsigned long getTraceDumpMessageBits() const { return _traceDumpMessageBits; }
    • void setTraceDumpMessageBits(unsigned long bitMask); The set functions now send a notify signal via MLNotify with the new code ML_NOTIFY_ERROR_OUTPUT_OTHER_CHANGES.
  • New classes Trace and TraceBuffer have been introduced in file mlTrace.h and mlTrace.cpp. A singleton MLGlobalTraceBuffer of class TraceBuffer is available and is used by all ML_TRACE_IN macros to store tracing information.
  • ML_TRACE_IN macros are now compiled; formerly they were compiled empty. They update the singleton MLGlobalTraceBuffer now to store the current (function) call stack and the list of most recently called functions.
  • class RuntimeDict has a new method
    void *createInstanceFromName(const char* className) const;
    now to create class instance directly from the class name.
  • mlTypeDefs.h: Enum type MLNotifyChangedObjectType has the new enum ML_NOTIFY_ERROR_OUTPUT_OTHER_CHANGES to indicate changes of some stuff and flags in MLErrorOutput class.

MLDiagnosis

  • New module TraceView added to see most recently called traced functions and call stack.

Changes before 24.09.2004

General changes:

  • In many files Siemens review headers appended which document changes of past versions changes.
  • New Version number 1.1.5.1.7 set in mlVersion.h in mlUtils.
  • Tagged to version ML_1_1_5_1_7_RELEASE_FOR_SIEMENS.

MLUtils

  • Changes merged from Siemens-Review MergeVonCTMevisLib_17_ott_ML_PNS_REVIEWED_040824.dat.
  • mlRuntimeSubClass.h: ML_TRACE_IN macros added by Siemens. Here many parameters have been changed to correct class names determined by passed macro parameter.
  • mlRuntimeDict.cpp:
  • mlRuntimeType.cpp: Investigates about potential memory leaks commented.
  • mlFieldContainer.cpp: Many missing ML_TRY / ML_CATCH macros added to methods.

MLLinearAlgebra

  • Changes merged from Siemens-Review MergeVonCTMevisLib_17_ott_ML_PNS_REVIEWED_040824.dat. No relevant changes occurred.

ML

  • Changes merged from Siemens-Review MergeVonCTMevisLib_17_ott_ML_PNS_REVIEWED_040824.dat.
  • FieldContainer now has method hasField to check for a field with a certain name without warnings. (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=896) Many missing TRY/CATCH stuff and checks added to FieldContainer methods.
  • mlInitSystemML.cpp: Suppression of trial to load MLTypeExtensions (added by review) has been removed. again. It will be continued to be loaded if possible. Correction must take place in load paths and not in that library load.
  • Review has corrected invalid NULL pointer check in PointerField.

Changes before 21.08.2004

New Version number 1.1.4.1.6 set in mlVersion.h in mlUtils.

MLUtils

  • mlErrorMacros do not use Siemens Copyrighted code any more. It is included from mlSyngoIncludes.h which will be available only on special installers for Siemens from now on. In mlUtils.pro is is added to HEADERS only if it exists.

Changes before 20.08.2004

New Version number 1.1.4.1.5 set in mlVersion.h in mlUtils.

MLUtils

  • mlErrorMacros now throw more detailed error codes in case of crashes.
  • Some comments corrected.

ML

  • Many methods of Field now virtual to make it possible to overload them correctly.
  • OutputConnectorFields now invalidate their PagedImage themselves on notifies. Previous versions did that in Module which was potentially buggy if fields were used independently of Module. It also was more difficult to understand.
  • In mlHost some ErrorHandling changed so that in gives more detailed information on crashes.
  • Many parts in the ML Guide and in ML header documentation have been updated and added; however especially in the ML Guide much is still to do.

Changes before 10.08.2004

New Version number 1.1.2.1.2 set in mlVersion.h in mlUtils.

mlUtils

mlLinearAlgebra

  • Some doxygen comments corrected/updated.
  • Tagged to version ML_1_1_2_1_2_RELEASE_FOR_SIEMENS.

ML

  • Tagged to version ML_1_1_2_1_2_RELEASE_FOR_SIEMENS.

Changes before 07.08.2004

mlUtils

  • New ML version number 1.1.2.1.1 set in mlVersion.h. So C++ binary compatibility has changed and recompilation or new installation of updated dlls. is required.
  • mlSystemIncludes moved from ML to this project.
  • printAndNotify methods of MLErrorOutput class have an additional runtime type pointers as parameters which can be dumped when these methods are called. It is intended for internal use in the ML to make it possible to register external dump methods for detailed error diagnosis on runtime errors.
    Some more documentation added/corrected for those functions.
    • mlErrorMacros have three new and internal macros
      • ML_PRINT_FATAL_ERROR_DUMP,
      • ML_PRINT_ERROR_DUMP and
      • ML_PRINT_WARNING_DUMP now which are used by ML internals to dump runtime typed objects if (fatal) errors are detected.
    • mlErrorOutput class has new methods
      • void setDumpCB(ErrorMacros::DumpCB *dumpCB);
      • ErrorMacros::DumpCB *getDumpCB(); to set external dump functions for runtime typed objects. This can be done by an application or by the module RuntimeDump available in project MLDiagnosis. (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=835)

MLDiagnosis

  • mlChecksum and mlCacheView moved from project MLParakrama to project MLDiagnosis.
  • New modules BadModule added for reliability tests.
  • Now all includes are blocked against multiple includes and ML_START_NAMESPACE and ML_END_NAMESPACE macros are used according coding styles.
  • Field accesses now return references to avoid unnecessary pointer checks in applications.
  • New module RuntimeDump. It installs a dump function with the MLSetDumpCB on the mlUtilsAPI. Then it is used by the ML to dump runtime typed objects on errors. (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=835).
  • New class ErrorCollector introduced and used in Tester which now also delivers ML messages n reports.

MLParakrama

  • mlChecksum and mlCacheView moved from project MLParakrama to project MLDiagnosis.

ML

  • Useless cout messages removed from MLInit function.
  • mlDataTypes:
    • Now all predefined MLTypePropertyBits of MLDataTypes are constant to avoid undesired changes.
    • Function MLGetDataTypeNameForCharCode renamed to MLGetCDataTypeNameForCharCode.
    • New function const char *MLGetMLDataTypeNameForCharCode(char code) added.
    • New function MLDataType MLGetMLDataTypeForCharCode(char code) added.
    • Some comments updated.
  • mlSystemIncludes moved from this project to project mlUtils.
  • LongDouble field does not behave any more as if it was referencing an external value.
  • Many more exception diagnostics is done on many module and field usage. See also the new RuntimeDump module in MLDiagnostics for it (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=835). Some details:
    • Many internal ML_PRINT_FATAL_ERROR functions have been replaced by ML_PRINT_FATAL_ERROR_DUMP macros to permit additional error dumps if dump functions are installed in ML error handler.
    • Accesses to ML modules safer now. More detailed exception analysis and optional module dump is done in class Module when calling handleNotification. Also exceptions and optional dump functionality added in activateAttachments and deactivateAttachments calls in mlAPI inside of MLBeginLoadFields and MLEndLoadFields to get more detailed error information.
    • Most module error handling in mlHost.cpp now also uses optional module dump functionality for detailed error analysis on module failures during image processing.
    • copyPages optionally dumps PagedImage state on failures now.
    • DummyOp module dumps itself with optional dump functionality if output properties cannot be updated correctly.

Changes before 29.07.2004

General Changes

  • From now one - if available and sensible - release notes will reference the bug or request number in the MeVis bugzilla database. So bug and request tracking becomes more reliable.
    Affected file:
  • Some more stuff is available on doxygen outputs of the ML, like
    • updated library overview and references,
    • direct references to all release notes,
    • documentation of some known bugs
  • Most ML typedefs and defines have been moved to the file mlTypeDefs.h. That affects a number of files in the ML and in MLUtils. Wherever a typedef is not found - it probably will be in mlTypeDefs.h.
    • Some types without "ML" prefix now use it (NotifyCB).
    • MLNotify and MLUtilsNotify typedefs and enums have been merged. All MLUtilsNotify stuff is now mlNotify* stuff.

mlTypeDefs.h is especially designed that it can be included by other libraries without linking mlUtils or the ML. (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=801)
Affected files:

  • In many files MLEXPORT or ML_UTILS_EXPORT before typedefs has been removed. This was useless and caused problems on some compilers.

mlUtils

  • The definitions MLINT8, MLUINT8, MLINT16, MLUINT16, MLINT32, MLUINT32, MLINT64, MLFLOAT, MLDOUBLE and MLLDOUBLE have been renamed; they lead an underscore prefix and an underscore after "ML". They are of internal nature and should not be used; all occurrences have been replaced by the correct typedefs MLint8, ..., MLldouble etc.
    Affected files:
  • Minor changes in doxygen documentation of many ML classes.

ML

  • MLInit function requires version information as parameters now and returns 0 if binary version is not compatible.
    Affected files:
  • All dynamically linked libraries perform check for correct binary versions of the ML from now one. On runtime linking errors information will be printed in the case that a version mismatch is detected. File include for init macro has been changed.
    Affected files:
    • All library init files.
  • Documentation changed in many files.

MeVisLab

  • MeVisLab checks for correct version of ML binary when linking it and in debug mode it aborts on failure to notify user about that. (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=796).
    Affected files:
    • mlabMain.cpp

Other

  • MLTypeExtensionsInit.cpp: Wrong include blocking definition corrected.
  • Most project init files of ML modules use new include "mlLibraryInitMacros.h" file for ML_INIT_LIBRARY macro.
  • CoreControl module (class Control) now shows version information about the ML and about the CoreControl binary in a subpanel.

Changes before 23.07.2004

ML

  • Bug fixed in destructor of OutputConnector. Also some other loops have been rewritten where potentially buggy iterator loops erased vector elements while looping over all elements. In rare cases elements could be over-jumped and not handled. Also some comparisons between iterators have been replaced by not-equal-comparisons to avoid errors when changing from vectors to lists.
  • Bug fix (http://bugzilla.mevis.de//show_bug.cgi?id=779): Some special cases of casting user defined data types to other user types types failed. Also copying subimages between user defined types failed. So some wrong implemented copy constructors and assignment operators of carrier types have been corrected in mlCarrierTypes.h and the corresponding subimage code in mlSubImage* has also been corrected. That also required a correction of the MLCastToOtherType function type in mlDataTypes.h. So adding, casting and scaling user defined voxel types works now.
  • Method TSubImage::fillBordersWithValue is a template function now which fills with the correctly typed value. A corresponding non template version (fillBordersWithLDoubleValue) has been added to SubImage to offer previous functionality, now also on untyped subimages.
  • Extended/User defined data type support activated in the following modules:
    • mlDiscardNegative
    • mlImageIteratorEnd
    • mlImageIteratorStart
    • mlRampOp
    • mlBitMorphologyFilter
    • mlCloseGapFilter
    • mlCompassFilter
    • mlConvolutionFilter
    • mlExtConvolutionFilter
    • mlKernelCurvatureEstimationFilter
    • mlLaplace2RGBFilter
    • mlLocalMaximaFilter
    • mlLoGFilter
    • mlMorphologyFilter
    • mlRankFilter
    • mlRobertsFilter
    • mlSharpenFilter
    • mlSobel3DFilter
    • mlStdDeviationFilter
    • mlSurroundFilter
    • mlZeroCrossingsFilter
    • mlSortSlices4
    • mlDimensionSliceCloner
    • mlReplicate
    • mlConcatImages
    • mlMergeRegions
    • mlReshape
    • mlResample3D

These modules now should be able to calculate with the following already available types like complexf, complexd, complexld, Vector2,... Vector32, Matrix3 and Matrix4. In some cases when voxel values from guis are only scalar values values like e.g. double limitations of functionality still might result. If that's desired universal data type field should be used instead.

  • New macro ML_INSTANTIATE_CARRIER_TYPES added to mlOperatorMacros.
  • New macro(s) in mlOperatorMacros for Carrier types.

MLKernel

MLDiagnosis

MLTypeSupport

  • Module TypeComposer composes different input images to another data type, also to create images of user defined voxel types.
  • Module TypeDecomposer decomposes an input image to a set of images containing the corresponding voxel (value) components.

SoVirtualVolume

  • New interface for OpenInventor to have an ML independent Virtual-Volume like access to an ML image connector.

Changes before 01.07.2004

ML

  • mlVector: New iterate method to iterate a vector position through all positions of a box.

MLMiscModules

  • New ImageComposer module added to concatenate a set of images one after another in any dimension.

mlTools

  • The template and the non-Template versions of Virtual Volume are implemented in different files now.
  • The non-template version has new methods (Feature request http://bugzilla.mevis.de//show_bug.cgi?id=717):
         void resize(const ImageVector &newExt);
         void copyTileFromInImg(const SubImageBox &box, Module &op, int outIdx,
                                const ImageVector &shift, const ScaleShiftData &scaleShift=ScaleShiftData());
         void copyToSubImage(SubImage &outSubImg);
    
  • The method copyToSubImage is not implemented in the non-template version.

MLBasicModules, MLMiscModules, MLMiscModuelsInv, MLBase, MFL*, SoView2DMenu and many other projects

  • All or most Linux-Warnings removed.
  • Some incorrect usages of abs under linux corrected to fabs.

MLKernel

  • all calcRow methods get an additional parameter now (const ImageVector &rowStart) which contains the voxel coordinate of the output image where the kernel filter result is written to.

Changes before 11.06.2004

mlLinearAlgebra

  • Matrix4 class has new method to set/get double value tables setValues(double* mat) and getValues(double* mat) const;

mlUtils

  • Warning: "Conditional expression is constant" disabled. ML_CHECK_RUNTIME_TYPE(x) macro added.
    ML_CHECK_MACROS now also check in debug mode.
    Some string reformats added.
  • mlUtilsDoc:
    Some documentation added.
  • mlUtilsAPI.h/.cpp:
    ML_BAD_POINTER_OR_0 and ML_BAD_STATE errors added.
    MLAddEventFilterCB added.
    MLRemoveEventFilterCB added.
    MLEventFilterApplicationMessage added.
    MLEventFilterApplicationHookCB added.
    Comments completed.
  • mlRuntimeSubClass.h:
    ML_BASE_IS_A-macros safer now against invalid runtime types. "virtual const char* getTypeIdName() const;" added to Runtime Type interface added. Many similar calles in the repository have been replaced.

ML

  • mlField.h:
    Field class is added with ML_ABSTRCT_CLASS_HEADER now. String conversions to double now in double format.
  • mlDebug.h:
    mlDebug macros check for invalid runtime types now.
  • mlMemoryImg.cpp and mlBaseOp.cpp:
    getTypeId()->getName() replaced by getTypeIdName() now.
  • mlAPI.cpp:
    Many checks for correct runtime types added. getTypeId()->getName()replaced by new function getTypeIdName().
  • mlHost.cpp:
    getTypeId()->getName()replaced by new function getTypeIdName(). FATAL_ERROR on memory allocation failure in getTile is only handled by return code now to make applications able to handle that problem correctly.
  • mlConnectors.cpp:
    Bad error check in OutputConnector::getLink(int i) fixed.
  • mlTVector.h:
    Static and non static compSum (member) functions added.
  • mlDataTypes.cpp, mlFields.cpp, mlStringConversion.cpp:
    Many scans of double values which were formerly scanned as float have been replaced by double scans to avoid unnecessary precision loss.
  • Wrong print format for String conversion in DoubleField fixed.

MLBasicModules

  • Small/Big (partial) revision of many modules.
    • Include blockers unified.
    • Old field references and non standard field names revised.
    • Blocking flags to suppress handleNotificationCalls replaced by handleNotificationOn/Off methods.
    • Much more minor details, comments etc revised.

Changes before 21.04.2004

This update requires an update of the source code repository and a reinstallation of libs and dlls.

Generally it contains review changes on many kernel classes but also some minor changes on the mlUtils and ML projects.

The changes in detail

  • Many minor reformattings done.
  • Siemens-Code-Review-Changes integrated. That includes checking of most functionality by TRY/CATCH blocks, checking many algorithms, news and deletes replaced by checking macros, translating some minor remaining german comments and claiming bugs and potential bugs, some unused code claimed.
  • Those changes were adapted to the MeVis installation and so many of the following changes apply also to that.
  • In entire kernel library includes are not included again if already done by checking their blocking definitions.
  • CSA_* and CT_MVL_* macros replaced by corresponding ML_* macros.
  • Missing newlines at end of files added.
  • KernelTools have a new methods KernelTools::correlateLineEvtWithIntervals and deleteIndexTab now.
  • Documentation in kernelTools and in KernelExample updated in some places.
  • mlOperatorIncludes now always included in mlInitSystemKernel to be sure that macros like ML_TRY etc. are available in all modules.
  • BitMorphology sets correct (but still much to large) min/max values of output image now.
  • sprintf/_snprintf replaced by snprintf.
  • Some states not handled handled as fatal error any more but as errors if they can be handled without crashes.
  • Invalid table size bug in RANK_INDEX mode fixed.
  • Many braces added on single statements.
  • Forgotten interval initialization in activateAttachments added in mlKernelOp.
  • Some fixed of unprecise implemented functionality, of some bugs in RANK_INDEX mode and of review changes in mlKernelTools.

Some minor changes on mlUtils and ML:

  • ML_CATCH_BLOCK macro added and used at many places where earlier only try/catch were used, which however, could not be deactivated in debug mode.
  • Warning suppression disabled in mlUtils MeVis-mode to have maximum warning mode. In Syngo mode they remain.

Changes before 07.04.2004

This update requires a complete reinstallation of

  • all modules and
  • of MeVisLab
  • and the update of the repository sources.

The changes in detail:

Release notes for the ML update

  • Siemens-Reviewing changes have been integrated into the current release. The most important changes are:
    • All non time critical methods have a trace-in macro (ML_TRACE_IN) now.
    • All pointers which could be NULL are checked with ML_CHECK* macros to get a log file entry before an error.
    • All functions which could fail are enclosed in try/catch statements and eventual memory allocations are cleaned up in catch to avoid memory leaks after errors. Typical macros used for that are ML_TRY and ML_CATCH*.
    • All variables are always maintained in an initialized state now, e.g. int a; is now written as int a=0; even if 0 is not needed (to guarantee deterministic program execution).
    • Before including self-written files their blocking definitions are checked whether they're defined. If yes including does not take place any more to reduce parsing/including time.
    • All string printing with sprintf has been replaced by snprintf statements to guarantee that memory is not written out of range.
    • Many minor changes to improve code quality.
  • Include blocking definitions are unified in mlLinearAlgebra, mlUtils, ML, MLTools and MLKernel now. The defines are derived directly in the following way: two underscores ("__") + file name(without suffix) + "_H", e.g. file "mlVector3.h" uses "__mlVec3_H" as include blocking definition.
  • Many brackets have been added to boolean expression.
  • Many braces around single statements have been added.
  • Sometimes wrong statement-end comments from Siemens review and from main branch have been removed (e.g. "// if" instead of "// for").
  • MeVisLab now also prints OpenInventor messages in console.
  • Many projects compile under Linux again and many warnings have been removed.
  • Many files/classes/functionality have been moved to mlUtils. These classes are of basic nature and have no direct significance for image processing. The functional behavior did not change, only constants and includes to make them run in the new project. Also some enumeration types and constants from mlDataTypes and from mlAPI have been moved to mlUtilsAPI:
  • There a two new macros for runtime system registration of classes which are not completely exported. These macro accept an export symbol as parameter which then exports the runtime system methods. ML_CLASS_HEADER_EXPORTED ML_ABSTRACT_CLASS_HEADER_EXPORTED See mlRuntimeSubClass.h for more infos.

New error codes have been added:

  • ML_CONSTRUCTOR_EXCEPTION
  • ML_DESTRUCTOR_EXCEPTION
  • ML_TABLE_FULL
  • ML_EXTERNAL_ERROR
  • ML_BAD_BASE_FIELD
  • ML_BAD_BASE_FIELD_CONTENT
  • ML_TYPE_NOT_REGISTERED
  • ML_LIBRARY_INIT_ERROR

Project Utils has initialization and destruction functions now:

  • Exception handling enable/disable is not a property of mlHost any more. It is managed by mlUtilsAPI now:
    • MLEnableExceptionHandling
    • MLIsExceptionHandlingEnabled
  • All ML error codes have a leading "ML_" as prefix to reduce collisions with same symbols from other libraries.
  • ML_PRINT_WARNING, ML_PRINT_ERROR and ML_PRINT_FATAL_ERROR macros have been moved to mlErrorMacros.h in the mlUtils project.
  • mlLinearAlgebraNotify.h/.cpp do not exist any more. Error notifications are sent to the MLErrorOutput class in mlUtils with ML_ERROR macros; so mlLinearAlgebra depends on mlUtils now.
  • An alternative parser for TreeNodes is available (currently in MLDiagnosis) which is not dependent on external libraries. However, the compatibility of the written/loaded file format will not be guaranteed up to the next ML release.
  • Some code fragments of mlHost have been replaced by a helper method to avoid multiple copies of same code.
  • Much pointer usage has been replaced by reference usage.
  • ML_ADD_FIELD_MACRO corrected which did not work properly on linux.

Changes on Siemens Review Branch before integrating it into the main development branch of the ML:

  • Indention restored on many places to avoid too many conflicts in merging and to make optical difference checks easier.
  • Some CT_MVL_TRACE_IN (now ML_TRACE_IN) get a more precise string as parameter to distinguish functions with same name and different parameter signatures.
  • Some forgotten includes now protected against unnecessary including and reparsing.
  • Include files now always use defines built in the same style.
  • Includes of system files are not protected against double includes since they're not system independent. They differ between linux and windows.
  • Some minor errors corrected (e.g. 0 instead of NULL used).
  • Setting Module pointer in FieldContainer is now possible only in protected mode to avoid invalid user manipulations.
  • All tabs in source files replaced by spaces.
  • In mlAPI.cpp many traces removed. They're done in the macro ML_APY_TRY now.
  • The file mlSyngoIncludes has been removed since it only wraps another include.
  • In mlCarrierTypes and mlStdTypeInfos most ML_TRACE_IN and ML_TRY have been removed due to performance reasons since they correspond to the +,-,*,/ etc. operations of built-in datatypes. Eventual errors are traced in the next higher try/catch block which is usually the template code of image processing modules On missing checks they will be safely detected in the host which always calls those methods with exception handlers.
  • All trace and try/catch macros have been renamed to ML* macros.
  • Tracing/Checking/Error macros in mlErrorMacros.h have been adapted for the MeVis case to the MeVis error handling system.
  • The _snprintf statement has been replaced by snprintf always, which, however, only exists on unix systems. On Windows in mlUtilsSystemC.h a macro is defined which replaces snprintf by _snprintf.
  • Several missing end-of-file linefeeds have been added to files to avoid that they cause warnings when compiled under linux.

Work List for Easier Reviewing of Changes

New/Changes/Moved

  • !Files mlUtilsAPI.h and mlUtilsAPI.cpp are almost completely new or they're composed from former parts of mlAPI.
  • Files mlLinearAlgebraNotify* has been removed. The project now depends on mlUtils which contains the required error handling functionality.
  • mlCache, mlFieldContainer, mlHost, mlImageProperties, mlMedicalImageProperties, mlPagedImg, mlSubImg:
    • Added to Runtime-Type System, therefore evt. includes of mlRuntimeSubClass.h and ML_CLASS_HEADER* and ML_CLASS_SOURCE* macros added.
  • !File mlErrorMacros in mlUtils rewritten in many parts. Contains ML_PRINT* macros now if enabled; currently for the ML most macros are compiled empty. So all tracing and checking does not take place.
  • mlOperatorMacros:
    • !New macro ML_INSTANTIATE_STANDARD_TYPES added.
  • mlTreeNode.h:
    • !protected method
      std::vector<TreeNode*> &_getChildTreeNodes()
      added.
  • TSubImage.h:
    • !New constructor TSubImage(void) added.
    • !Object/Pointer comparison in operator= fixed.
    • !setData method is virtual now to correctly overload base class stuff. Signature changed; it gets void pointer now which is not nice but necessary.
    • !Code fragment
      DATATYPE *fullLine = NULL;
      now implemented outside the loop. So method can be used now. Since it is only used in a few modules the VC++ compiler did not instantiate the function and did not detect the implementation error.
  • Files moved to mlUtils:
    • mlErrorOutput,
    • mlErrorOutputInfos,
    • mlMemory,
    • mlNotify,
    • mlRuntime,
    • mlRuntimeSubClass,
    • mlRuntimeDict,
    • mlRuntime
  • mlAPI.cpp:
    • !ML_API_TRY macro now contains ML_TRACE_IN_MACRO. So it could be removed from all functions using ML_APY_TRY.
    • !Wrong recursive call in MLAreMessagesSentToCout fixed.
    • Tabs removed.
    • Moved to mlUtilsAPI:
      • MLSetMessageCB
      • MLGetMessageCB
      • MLDebugAddEnvName
      • MLDebugRemoveEnvName
      • MLDebugHasEnvName
      • MLDebugGetEnvName
      • MLDebugRemoveAllEnvNames
      • MLDebugGetNumEnvNames
    • New:
      • !MLPointerFieldGetPtr
      • !MLPointerFieldSetPtr
      • !MLTypeGetDllName
      • !MLSetMaxNumThreads
      • !MLGetMaxNumThreads
  • mlModule.h/.cpp:
    • ! # define ML_ADD_FIELD Macro corrected (did not run under linux).
    • !Some new mlBaseOp methods:
      • !permitRecursiveHandleNotifications
      • !areRecursiveHandleNotificationsPermitted
      • !getHandleNotificationEntryCounter
        !The members _handleNotificationEntryCounter, !_permitRecursiveHandleNotifications and !_handleNotificationBlockCounter are new, have new meanings !or they were renamed. _entryIndex has been deleted since it was not used any more.
    • Indents/Tabs corrected.
    • Some braces for single statements added.
    • !Some checks of NULL pointers removed since function make it itself (e.g. if (p) { MLFree(p); } has been changed simply to MLFree().
    • adaptPageExtent, GetValidPageSize and NormalizePageCond:
      Many braces changed or added.
    • !handleSensorNotification rewritten. Uses references instead of pointer at many places.
  • mlDataTypes.h/.cpp:
    • Constants ML_CIE* in header changed.
    • Moved from mlDataTypes -> mlUtilsAPI:
      • !enum MLMessageType
      • !enum MLTerminator
      • !MLTerminatorStrings
      • !MLErrorCodeDescription
      • !MLMessageCB
      • !enum MLUtilsNotifyChangedClassType
      • !enum MLNotifyChangedObjectType
      • !MLMemoryErrorHandling
    • !All MLError* stuff has been rewritten and signatures !have changed. Some constants are functions now.
  • mlFieldContainer:
    • !addPointer method added.
    • !setBaseOp method is private now and renamed to _setBaseOp.
    • !getModule method added.
    • Module is now a friend.
  • mlFields.h:
    • !PointerField class added.
    • !UniversalTypeField: Most stuff rewritten for bug fixing. -Methods
      • !BoolField::setStringValue
      • !ToggleField::setStringValue accept case insensitive string values now.
    • EnumField: ::getStringValue ::isValidValue: Braces added.
    • !EnumField::setStringValue partially rewritten.
  • mlHost:
    • Class not static any more. Now all accesses from other classes to the Host need to be done via the singleton accessible by Host::getDefaultHost(). So in many files calls to functions in Host (e.g. by Host::fkt()) have been replaced by Host::getDefaultHost()::fkt(), especially in mlAPI.cpp and mlBaseOp.cpp.
    • Destructor virtual now.
    • !Constructor rewritten; it contains initialization of former static variables.
    • !Host::getDefaultHost() now contains global instance of host now.
    • !useExceptions(bool) and
      !useExceptions()
      removed; They've been replaced by mlUtilsAPI functions !MLEnableExceptionHandling and !MLIsExceptionHandlingEnabled.
    • !freeTile now implemented in .cpp file.
    • !Multiply implemented code from !_getTileCore() and !processAllPages() is now implemented in the new method protected method _processPagesHelper now.
    • !Local helper class PageDataClass has a constructor now.
    • !Paragraph "3. Optimization:" in _calcPages uses references instead of pointers now.
    • !In Paragraph "6. Clean up and handle errors" in _calcPages pointer is now more locally used in while loop.
    • !_initializePageData rewritten in many places to remove pointer checks by using references instead. -_calcPagesMT: Assert removed from function entry.
  • mlImageProperties, mlMedicalImageProperties:
    • !assignMembers now implemented privately as _assignMembers.
    • !In operator= and/or _assignMembers object/pointer comparison fixed.
  • mlInitSystemML.h/.cpp:
    • .h can be included in C++ and in C-mode without blocking the other mode now.
    • !.cPP:MLinit() partially rewritten.
  • mlStdTypeInfos:
    !Most checks removed.
    Reasons:
    • Code normally not called.
    • If code is called then it has a behavior like built-in data type operators *,+,- etc. which is
      1) extremely time critical
      2) always inside other functions which are also checked.
  • mlStringConversions.h:
    • Senseless inline keywords removed from non inline methods to remove linux compiler warnings.
  • SubImage.h:
    • Constructor inline SubImage(SubImageBox box, MLDataType datatype, void* data) initializes _strides now.
    • !operator= now compares pointers correctly.
    • !BugFix: setData is virtual now to overload base class method correctly.
    • private copySubImage* methods have underscore prefix now.
  • mlSystemIncludes.h:
    • !Blocking ifndef-statements removed for non-ML files since they differ under linux and windows.
  • mlTemplateSupport.h:
    • !Many macro checks have been removed since those routines are very time critical since they're used in inner loops often. Most of those routines are constant and are removed by the compiler after specialization so that each check in it might lead to unacceptable performance downgrade. Anyway the calling methods should always be checked so that problems in those routines should be detected correctly.

mlUtils

  • mlUtilsSystem:
    • !Linux adaptions (more includes etc.) added.
    • !Stuff from "mlSyngoIncludes.h" now included from mlErrorMacros.h.
  • mlErrorOutput.h/.cpp:
    • Constants ML_PREFIX and ML_CONSTANT_PREFIX moved to mlUtilsAPI.h.
    • setPrintLevel(), getDebugBuffer(), getDebugStream(), resetStreamBuf(), setDebugState(), getDebugState(), _debugStream, _debugBuffer and ML_STREAM_BUF_SIZE removed.
    • !New functions setMessageFilter(), getMessageFilter(), setFullDebuggingOn(), isFullDebuggingOn() and second version of handleDebugPrint().
    • !Constructor partially rewritten.
    • !handleDebugPrint rewritten, now two functions exist.
  • mlNotify.h/.cpp:
    • !NotifyChangedClassType and NotifyChangedObjectType enums moved and renamed to mlUtilsAPI.h. Some fragments of those constants are now available in mlDataTypes.h.
    • !NotifyCB: Signature changed.
  • !mlRuntime.h: New method getAllDerivedFrom().
  • !mlRuntimeDict.h: New method getAllDerivedFrom().
  • mlRuntimeSubClass.h:
    • !Macro ML_EMPTY_PARAM added.
    • !Macros ML_CLASS_HEADER and ML_ABSTRACT_CLASS_HEADER expanded to support export symbols: ML_CLASS_HEADER_EXPORTED and ML_ABSTRACT_CLASS_HEADER_EXPORTED.

CHANGES IN ALL OTHER FILES

  • Blocking definitions for include files changed/unified and many (white) spaces removed to reduce differences between MeVis and Siemens version.
  • CT_MVL* and CSA* macros replaced by ML_* macros.
  • If files have been moved to mlUtils then the MLEXPORT macro has been renamed to ML_UTILS_EXPORT.
  • All error codes now carry "ML_" prefix.
  • Indents changed.
  • Many (not all) braces added around single statements.
  • _snprintf replaced by snprintf to make it work under linux.
  • Some var++ statements changed to ++var statements when used as single statements since ++var is compiled as faster code than var++ by many compilers.
  • Many comments changed/added and comment style unified.
  • Missing line feeds at file ends added.
  • MLUTILS_EXPORT changed to ML_UTILS_EXPORT.

Changes before 01.03.2004

This update requires a complete reinstallation of

  • all modules and
  • of ILAB5/MeVisLab
  • and the update of the repository sources.

The changes in detail:

  • ILAB5 does not use the C++-API any more.
  • Bug Fix: The UniversalTypeField stores the original data value as string now. So intermediate casts do not change the original value any more.
  • Some missing package dependencies and .cvsignore added.
  • Some fixes of still undetected bugs.

Changes before 16.02.2004

ML and Module changes

This update requires a complete reinstallation of

  • all modules and
  • of ILAB5.

Moreover some networks using Surround, CloseGap and Compass may have problems since porting of those modules to new kernel classes made a compatibility impossible. Please be careful in networks using these modules.

Kernel modules runs under ILAB5 now; however Cinderella tasks still could not be completed.

Changes in project Kernel

  • All modules have unified # if defines statements to avoid reincludes of headers. The definitions are built from "__" FileName and "_H" now.
  • The modules KernelCurvatureEstimation, Laplace2RGB, Surround, CloseGap, Compass, LocalMaxima now all carry the word Filter at its end to unify file names in that project. Some of them have been moved from other projects to this one.
  • All LineApplicator dependent modules in MLKernel work with new base classes now. Their LineApplicators have been removed from the project. The base classes for line applicator are still in the project for compatibility.
  • Since all modules derive from the same base classes the field names are also unified now. It was not possible to maintain compatibility for ILAB4-versions therefor.
  • Now the standard kernel type is "Kernel" and the former KERNELDATATYPE macro does not exist any more. The default kernel type is Kernel (or also defined as DoubleKernel). The former Kernel class is now called "TKernel" and the typedefs for FloatKernel, DoubleKernel and LDoubleKernel exist.
  • Many constants unified. Stuff within ml namespace does not have "ml" prefix any longer, enumeration constants are all written in capital letters etc.
  • Cinderella tasks for Kernel modules have been processed (GUIs for ILAB4 and ILAB5 have been updated). Doxygen and other documentation of all kernel classes have been much improved and much other stuff has been unified in all modules. Kernel project has a main page for doxygen now.
  • Many integers, doubles and long doubles have been changed to their corresponding ML types.
  • Kernel macro support is much more flexible now.
  • Many minor formerly undiscovered bugs fixed.
  • BitMorphology now accepts also non-integer inputs which will be converted to integer if possible.

ML Changes

  • Double code in mlHost.cpp is now handled in one function.
  • In many cases the processing of multiple pages consumes less memory.
  • Debug outputs should work correctly again.
  • ErrorCode-Output class has been simplified in parts.
  • The processAllPages function of the Host/Module should allocate less memory now.
  • SubImage-Copy-constructor now sets strides correctly.
  • Invalidly overloaded setData method of TSubImage is implemented correctly now. So a SubImage pointer to a TSubImage can be used without crashes now.
  • RuntimeDict and Runtime classes have new getAllDerivedFrom(const RuntimeType *parentType) function now.
  • Bool and toggle field now also accept integer and case insensitive string values.
  • API function MLImageIsValid has been renamed to MLGetImageState.
  • API has two new functions: MLGetMaxNumThreads() and MLSetMaxNumThreads to set number of permitted threads.
  • Some minor requests from Siemens implemented, many new Bugzilla requests added.

Changes before 05.12.2003

  • Bug fix in FloatingPointVector in mlLinearAlgebra: Invalid usage of reference parameters in operators has been replaced by usage of copied parameters.
  • Bug fix in mlDataTypes.cpp: Wrong detection of MLldoubleType as MLdoubleType has been corrected. Subsequent errors in new check in TSubImage for correctly wrapped type do not occur any more.
  • Currently an error message is suppressed if the MLTypeExtension library cannot be loaded.
  • Some modules documentations and example networks (FieldTracer, ProcessAllPagesExample,...) have been improved.
  • Compiled MLLinearAlgebra stuff is now located in the ILABModules/misc directory and not in the ILABModules/ML directory. It must be removed manually from UILABModules/ML before ILAB is restarted. The same holds for ILAB5Modules.

Changes before 30.11.2003

Changes

  • The signature of the virtual method calcInSubImageProps of Module has changed to prepare for flexibility in the future. Note that overloaded methods now differ and have no function any more if not ported to the new signature! (Porting has been done on the loki repository). See mlInputSubImageProperties.h and comments in mlModule.h.
  • Some Module (and other) functions/methods like connectInput, getTile get parameters as reference instead of pointers now.
  • Many functions, classes, macros etc. have been revised, checked and better documented, especially the mlAPI files. Much more error checking is done. If ML_ERROR or ML_PRINT_FATAL_ERROR messages appear while using previously running functionality please first do a detailed check whether an existing error has been detected or whether it is really a bug due to the ML update.
  • All classes in mlUtils are now in namespace ML_UTILS_NAMESPACE which is identical to the ML_NAMESPACE.
  • In many places "namespace ml {" has been replaced by ML_START_NAMESPACE. and the corresponding "}" has been replaced by ML_END_NAMESPACE. Sublibraries like e.g. mlLinearAlgebra also have similar macros which are also coded with namespace ML. A macro ML_NAMESPACE contains the namespace name "ml" alone now. It is recommended to use those macros from now on to make it easier to change the ML namespace in the future, e.g. if it collides with another "ml" namespace.
  • Many .cvsignore files corrected and added to repository to handle .dsp files correctly.
  • Tabulators removed from all checked-in files.
  • Many parameters passed to ML functions etc. are now passed as reference values to avoid invalid pointer usage or checks for them.
  • For a number of classes wrong macros for registration in the runtime type system have been corrected.
  • In class Notify all constants, enums etc. have "ML_NOTIFY" prefixes now to distinguish them from other similar constants from other classes starting with "ML_".
  • Many header file dependencies removed by using incomplete types and by removing unused includes.
  • getOutConnector(), getInConnector() and getOutOp(i,j) methods have been removed from Module since they were not needed any more and to clean up the Module interface a little bit. If really needed use statements like getOutputImageField(output)->getOutputConnectorValue(), getInputImageField(Input)->getInputConnectorValue() or getOutputImageField(output)->getOutputConnectorValue().getLink(j)->getOp() instead.
  • Environment variable "ML_MONITOR_CACHE" and corresponding methods to set that value in the Cache class are not available any more. Use operator<< instead if that functionality is required.
  • Many types are used as incomplete types now to reduce header file dependencies and compile times. So implicitly included files are sometimes missing and required explicit include.
  • DLL exporting of class interfaces is more elaborated now. So classes are not exported as a whole any more but only the non inlined methods to make inline usage work via dll interfaces. With some luck this may speed up some code significantly but it also might blow up some code.
  • The MLDestroy function in mlAPI now returns 1 for success and 0 on failure. This also changes the binary interface and requires a recompilation of applications using only the C-interface.
  • Some names of methods of class ImageVector (TVector) have changed, e.g. asbMaxComp -> absCompMax for better naming consistency.
  • Some places use double values instead of float values now. Stuff from linear algebra requires more precise type selection for operations like vec = Vector3 * value. If "value" is float then that is not precise enough any more and to avoid ambiguities "value" has changed to double in such cases. This of course also holds for operations like *=, /= etc.

New Stuff

  • The classes Module, PagedImage, Cache, CachedBuffer, ImageProperties, MedicalimageProperties, ErrorOutput, ErrorOutputInfos, SubImage, TSubImage, and ScaleShiftData have copy constructors and assignment operators now. Some of them are not sensible for different reasons and so they are implemented protected or private to protect them and their default versions against invalid usage. Since this would leads to warnings in derived classes there are new macros for classes derived from Module which also implement assignment operator and copy constructor which then also make it impossible to use them unintentional. So all classes deriving form Module now use ML_MODULE_CLASS_HEADER, or ML_MODULE_CLASS_SOURCE macro or extended versions of them.
  • Members of the class ErrorOutput are not static any more to make it possible to use multiple instances. To maintain previous global functionality there is the singleton ML_NAMESPACE::MLErrorOutput.
  • There are two new modules (ImageIteratorStart and ImageIteratorEnd) in project MLBasicOps which permit to iterate an image a number of times through a module network without scripting. It currently maintains necessary swap buffers in memory; if necessary it can be extended to store the temporary file buffers on disc.
  • Now there is a new module RedirectStreams in the new project MLStreamSupport which permits the configuration of stream outputs of std::cout and/or std::cerr. They can be disabled, send to the ML error handler or to the Visual C++ debug console. So the ML does not need those output streams any more and can run absolutely silent.
  • The type initialization functions (like CLASS::init()) have two optional parameters now. The first is a class name prefix registering the class with an additional name prefix in the runtime type system. The second one (if passed) is a replacement for the class name, not only a prefix. It will still be prefixed if a prefix is passed. See mlRuntimeSubclass.h for more information.
  • There is a new module FieldTracer in project Diagnosis which collects field notifications and changes for debugging purposes.
  • There is a new file mlTemplateSupport.h which is included automatically with default ML includes. There convenience stuff has been added to get information about the currently used data types in templates. The functions
  1. MLIsAnyCarrierTypePtr
  2. MLGetDataTypeFromPtr
  3. MLGetPhysicalDataTypeFromPtr
  4. MLIs64BitIntegerTypePtr
  5. MLIsSignedTypePtr
  6. MLIsLDoubleTypePtr
  7. MLHasCarrierTypePtrs

typically get some typed pointer(s) and return the desired information. Note that those functions work only for ML data types.

  • MemoryImage is registered in the runtime type system now.

Class, Macro and Field Movements

  • All linear algebra classes (Vector2, Vector3, Vector4, Vector6, Matrix3 and Matrix4 and FloatingPointVector) have been revised completely. They are implemented in their own .cpp/.h files now and are located in the mlLinearAlgebra project from now on. It has been made is independent of the ML. Most functionality is implemented in the FloatingPointVector without duplicating it in derived classes.

Core changes are that implicit conversions between types (e.g. from Vector3 to Vector2) have been implemented differently so that they need to be forced be explicit statements. This was necessary to avoid that implicit functionality causes undesired results. Resulting changes in the repository are usually that assignments from e.g. Vector3 or Vector4 to Vector6 have been replaced by adequate assignments from Vector6 to Vector6. Conversions from Vector6 can be done with new methods like Vector6.getVec4() or getVec3().

  • The file mlMatrixTemplate is located in project MLNumerics now.
  • Class ScaleShiftData now handles invalid interval parameters with an error now.
  • The mlScale, mlLine, mlPlane, mlDisc, mlRotation and their corresponding fields have been moved to the project MLTools since they're not an essential part of the ML. The corresponding fields are not known in the FieldContainer of the Module any more, so statements like

RotationField *rotationFld = getFieldContainer()->addRotation("rot"); rotationFld->setRotationValue(vec3Val, angle);

have been replaced by

RotationField *rotationFld = new RotationField("rot"); getFieldContainer()->addField(rotationFld); rotationFld->setRotationValue(vec3Val, angle);

  • The contents of mlDebug is now placed in files mlDebug, mlErrorOutput and mlErrorOutputInfos for better file organization.
  • mlBitImage and mlVirtualVolume files/classes have been moved to project MLTools since they are not essential for core image processing.
  • mlDateTime, mlThread, mlTimeCounter files/classes have been moved to mlUtils since they can exist without references to the ML.
  • Subproject mlTypeExtension is now a normal project in MLModules now. It is automatically loaded by the ML if possible, otherwise the ML runs only with standard data types.

Changes before 29.09.2003

This is again a smaller ML update which requires a complete update of the developer repository.

  • Bug fix: The new image processing concept to scan entire input image(s) (Module::processAllPages) now correctly cleans up all previously calculated pages to be sure that all pages are really processed.
  • There is a new field "LongDoubleField" which can be used to handle long double values correctly. The user interface, however, will still limit the values to double values. It is supported in ILAB5.
  • Under linux the ML compiles without important warnings.
  • User defined data types are supported under linux and windows now. The incompatibilities have been removed. Therefore the MLTCarrierTypes template class has been revised strongly.
  • Many german comments have been translated to english by Parakrama.
  • Most projects now compile under linux. Many minor changes have been applied to make most projects compilable there.

Changes before 12.09.2003

This is a smaller ML update which requires a complete update of the developer repository. The ILAB4 versions can remain unchanged. The following changes have been integrated into the repository:

  • In all projects cout, endl and cerr have been changed to the standard versions. This is necessary since old versions are not supported any more under new compilers. Also all old header includes have been removed. Only new ones are supported from now on.
  • A new image processing concept has been integrated into the Host, i.e. also in the Module to scan one or more input images efficiently. See method protected: virtual MLErrorCode processAllPages(int inIndex=0, int outIdx=-1); in class Module for further information. It permits to process all pages of an input or an output image sequentially or parallelly e.g. to calculate statistics from it. This can be done normally with calculateOutputSubImage programming.
  • The method notifyAttachment of the class Field has a new optional parameter now. It permits to notify output images without clearing them. This is useful when only image properties but not image data changes took place.
  • Many ML warnings under linux/OpenGL removed.

Changes before 29.07.2003

Please read these notes carefully since also your c++ code requires changes (or already has been updated). Some information may be useful for you to simplify your next programmings.

Overview

The most important changes are:

  • New built-in data type MLint64.
  • Output image invalidation does not work via exception throwing any more, but by getOutputImage(outIndex)->setInvalid();
  • An arbitrary number of user defined data types can be registered on runtime. The data types Vector2, Vector3, Vector4, Vector6, Vector8, Vector16, Vector32, Vector16, Vector32, Vector64, Matrix3, Matrix4, complexf, complexd and complexld are already integrated. For compatibility reasons and due to the size of the update most modules currently still do not permit usage of those data types although most of them already completely support them correctly. So the owner/developer should activate them manually (see new method Module::setVoxelDataTypeSupport()) to reach maximum functionality of modules as soon as possible.
  • All MT_, MT and ML_ prefixes have been renamed to ML.
  • MTDataTypes.h (new name mlDataTypes.h) is much bigger now and must be linked.
  • The C-API provided by mlAPI.h and mlDataTypes.h is much bigger now.
  • Many functions are outside the ML namespace now. Most of them have been moved to mlDataTypes.
  • SubImageBox and ImageVector classes are implemented for different integer sizes and have much more functionality now.
  • Some basics have been implemented to support images bigger than 2 giga voxels, which, however, it is still incomplete
  • The ML makes better checks for "out of memory" and basics have been implemented for new strategies in future to make memory/cache cleanups on allocation failures or to recycle currently unused pages in that case. A new class mlMemory exists for that now.
  • Operator macros are much more powerful now, all versions from 0-5 and for n inputs, for header and c++ implementations and for identical and differing input and output voxel types are available.
  • Internally input and output images and handled completely differently and more powerful now. The ML (unfortunately not ILAB) now supports dynamic add/remove of image inputs and outputs.

Important

This update requires a complete update on the entire repository and a new installation of all ILAB4 and ILAB5 versions on windows and on linux.

Before updating your code please have a look at the cvs differences to learn about the changes on your code and to check them. So the risk of bugs due to the update can be reduced.

As usual all projects in MeVis have been revised and updated so that there usually should be nothing more to do by the module developers. However, bugs are always possible (sorry if that case happens...) and so some startup tests are strongly recommended to remove bugs as fast as possible...

The integration of registered data types is not complete: Many modules could implement much better support or simply permit those types. This will be done step by step in future releases.

Features and Limitations of new Voxel Data Types

  • For user defined registered data types it is not required to recompile the ML or modules. A structure describing the data type, its properties and operations is registered in the ML to activate a new type. When used by any module the operations of the data type are called by a precompiled data type (the so called carrier type(s), see mlCarrierTypes.h) directly by using function pointers.
  • If desired a module programmer can cast voxel pointers from carrier types directly to the real class type pointer for maximum performance. This is always allowed (with the minor restriction that operations like ptr++ are only valid on carrier and standard types but not onto the casted type pointer since voxels may have different sizofs).
  • If implemented, a new voxel data type supports all operations like +,-,*,/, <<, >>, sin, cos, and many more operations. They often also can be implemented by convenience functions, so that new types are simple to integrate.
  • There are many convenience functions to handle new voxel data types and their components. So even complex operations like the cast from your self implemented data type to an arbitrary other one can be performed automatically.
  • Examples for new voxel types could be vector field images, color voxels, voxels carrying segmentation information (like bit fields, object indices etc.), matrix/tensor images, super precise arithmetic, complex numbers and many more.
  • To see how to integrate your own voxel data types see "mlTypeExtensions" in the ML directory.
  • New voxel data types can be implemented without supporting all operations which, however, is not recommended. Each ML module specifies which operations it need for proper operation and if the voxel data type does not have all these operations, the module output will automatically be invalidated by the ML.
  • Since only a limited set of carrier types can be compiled in the ml, the voxel sizes of registered data types can have at most the size of the biggest carrier type, i.e. currently 256 bytes. This, however, is hopefully enough for most users. A voxel data type with a sizeof which is not fitting exactly onto the sizeof of a carrier type uses the next bigger one which usually is not notified by the programmer since he works only with carrier type classes, and not with the registered types themselves.
  • Since code of registered voxel data types is not inlined by modules, one voxel operation requires one call to the registered operation which makes registered types slightly slower then built-in data types. This usually is not dramatic since those operations are often more complex so that the call is not expensive in comparison with the real voxel operation. Moreover a module can implement specialized code for maximum performance which does not work via carrier types.
  • For performance and technical reasons instances of new voxel data types cannot have dynamic members and must always be copiable by memcpy without copy constructors.
  • When permitting all registered data types in your module you should take in consideration that operations like e.g multiplications or divisions are often implemented but eventually in an unexpected ways. So operations of vectors or matrices are often implemented element by element or operations may be implemented as "no operation".
  • Since the current ILAB-version does not support preferred dll load (which, however, is promised to be available soon...) the registration of new data types may not be notified by modules when being instantiated before the registration of the new type.
  • Currently the usage of registered types is not thread save. The ml disables multithreading automatically for the modules using those types. Multithreading of standard type calculations is not influenced.

The changes in detail

  • Many, many minor bugs removed and missing functionality in modules added. Especially a large number of forgotten switch cases for the implementation of data types have been added or the switch has been replaced by macros. Also many outdated code fragments have been replaced by current structures.
  • In many modules "manual" checking of a valid input graph and updating the image properties have been replaced by the getUpdatedInputImage() method. The method isValidInputGraph() does not exist any more. Using updateImageProperties() manually is usually not needed any more.
  • Output image invalidation does not work via exception throwing any more, but by getOutputImage(outIndex)->setInvalid();
  • The ML makes many more internal checks e.g. for invalid indices and tolerates less bad parameters, especially bad indices. Crashes after installing the new ML could indicate a discovered old programming error.
  • The functions itoa and itof which returned temporary character strings have been removed and the calls have been replaced by other code. This was necessary since many returns of temporary values were insecurely used, especially because the usage of evaluation of temporary string on other compilers could vary.
  • Fields generally work with std::string classes instead of char * now to remove NULL pointer checking problems and to prepare multithreading capabilities. Old style C_String field has been removed.
  • New files MLConnector, MLMemoryImage, mlVector, MLSubImgBox, mlScaleShiftData, mlMemory.
  • New class TimeCounter added to the ML. It supports precise and platform independent time measuring. The Host now uses this precise time measuring for pages; so even fast pages get sensible priorities and caching strategies work better.
  • With the exception of the AddExample all other modules from MLExampleOps projects have been removed from work area since they contain too much old and bad code.
  • New example module demonstrating how to derive a new field and how all field types (incl. a self defined one) can be added to a module. However that module is still work in progress.
  • MLint64 types has been added to mlDataTypes.h. All switches, macros, templates in the ML have been adapted. So all algorithms also should support this new data type now. While adding this type many forgotten type cases have been added in many modules or case switches have been replaced by macros.
  • Project MLGeometry made independent of MLVolker.
  • In many projects data type switches have been replaced by macros. Also in many projects the "manually" implemented calculateOutputSubImage methods have been replaced by macros from mlOperatorMacros for better portability and less complexity in user projects. Using manually written calculateOutputSubImage methods is not recommended any longer since registered data type support changes these implementations and endangers module support of registered data types.

All important header files for ML and module programming have been collected in mlSystemIncludes.h now. There all senseless warnings from Microsoft headers have been disabled. Compiler switches automatically switch between linux/windows versions so that you do not need that any more. This file is always included when using ML classes so you usually do not need to include any system header any more (and it is recommended not to include them since that's time consuming and does not disable system header warnings).

  • Unused ArcBall class removed from the mlRotation. (Florian Link)
  • All meta field container and depending stuff has been removed from the ML. It is not used any more.
  • OperatorMacros.h has new macros for calculateOutputSubImage implementations which permit an arbitrary number of inputs. So modules could be written which support a dynamic number of inputs. There is also a number of new macros for calcOutSubimage where input and output types differ. Macros for 0,1,2,3,4,5,10 and n inputs are available now.

IMPORTANT: All CALC_OUTSUBIMAGE* macro calls in header files now also need the module class name as parameter!

  • Internally the Module does not handle connectors, connector fields, output or input images any more. Connectors are handled within connector fields and connector fields are handled by the field container now. -inPlace indices have been moved from class Module to class PagedImage. -PagedImage instances have been moved from class Module to class OutputConnector. -OutputConnector instances have been moved from class Module to class OutputConnectorField. -InputConnector instances have been moved from class Module to class InputConnectorField. -InputConnectorField instances managed by the fieldContainer now (like all other fields too).

OutputConnector and InputConnector are located in the files mlConnectors.* and MemoryImage is located in files mlMemoryImg.* now. So input and output images correctly became real image processing parameters like any other fields, too. This makes it possible to create your own inputs/outputs in the constructor with getFieldContainer()->addInputConnector() or getFieldContainer()->addOutputConnector() instead of using the base class functionality. Module inputs and outputs became dynamical like all other fields which permits the implementation of modules with a changing number of inputs or outputs. Using this, however, is not recommended since ILAB currently does not support connector number changes during runtime.

  • Project templates are generated with high warn level now. BasicAdd example has better field related handleNotification documentation and example code for handleNotification(On/Off).
  • All MT, MT_ and ML_ prefixes have been renamed to ML.
  • Removed automatic conversion to float when min/max values are fractional from routines in mlBasic. Results of getMLDataTypeForRange and getMLDataTypeForUncorrectedRange. This changes the behavior of all modules which use these routines to determine the output data type. (Tobias Boskamp)
  • Bug fix in class BitImage: Change of functionality in class BitImage: Changed handling of interval boundaries in updateBitImageFromVolume and copyFromSubImage from closed to half open intervals, i.e. valid voxels are given now by (voxVal >= minVal) && (voxVal < maxVal). (Stephan Zidowitz)
  • mlLinearAlgebra: -Matrix3 and Matrix4 have new members setScaleMatrix and linear access to elements by an index. -Matrix3 has constructor from 9 values.
  • mlDataTypes.h (former MTDataTypes) has been rewritten and a completely new support for voxel data types has been integrated into the ML. That, however, has many consequences:

The file MTDataTypes has been renamed to mlDataTypes.h.

There is a new data type MLint which currently is compiled as MLint32. In later versions it might be changed to MLint64 to support 64 bit indexing in the ML which will be necessary to address images with more than 2 giga voxels. That, however, also required that ImageVector, SubImageBox and IntField use MLint. So many projects have been changed to use MLint instead of int for IntFields.

To simplify different int types for ImageVector and SubImageBox those classes are specializations from templates TVector and TSubImageBox.

Further changes resulting to mlBasics: The class ImageVector/TVector has the hollowing operators and methods: -, [], &[], &, |, ^, &=, |=, ^=, <<, >>, <<=, >>=, getMin(), getMax(), getMinIdx(), getMaxIdx(). and copy constructors. TSubImageBox/SubImageBox has a new translate method to shift the box by an offset vector.

mlBasicTypes:

  • The complete file contents have been moved to mlDataTypes.h.
  • ErrCode and ErrCodeDescription have been removed. All occurrences of them have been replaced by MLErrorCode and MLErrorCodeDescription, respectively.

MLDataType is not an enum any more but an int. So dynamically added data types can also be represented. Invalid data types ids are usually identified by a -1. Each data type has a describing struct of type MLTypeInfos containing all informations and operations a data type has.

New data type MLint64 added. Please check whether your module handles it correctly, it is automatically compiled in all CALC_OUTSUBIMAGE* macros now. In many projectsits support has been implemented by new switch cases. Currently the string input of integer64 data types is very restricted; it must be exactly in the format 0x0123456789abcdefI64 since correct scan functionality has been forgotten/is not available on windows.

Now compiled and used module data types are distinguished. The number of really compiled data types is fixed and handled by the enum MLPhysicalDataTypes which contains the types

     MLint8Type,
     MLuint8Type,
     MLint16Type,
     MLuint16Type,
     MLint32Type,
     MLuint32Type,
     MLfloatType,
     MLdoubleType,
     MLldoubleType,
     MLint64Type,
     MLCarrier4Type,
     MLCarrier8Type,
     MLCarrier12Type,
     MLCarrier16Type,
     MLCarrier32Type,
     MLCarrier64Type,
     MLCarrier128Type and
     MLCarrier256Type.

The constants

are new.

New field class UniversalTypeField permits input of a selectable MLDataType as string.

TestPattern and ConstImg modules can also create images with extended data type values now. They also have an auto apply button.

Standard data types in mlDataTypes have typedefs for their corresponding pointers now. This is often useful to avoid seeming pointer incompatibilities (e.g. between MLint* and int*). Constants for maximum and minimum also have been added.

An mlCarrier* data type wraps a currently used registered data type. So any number of data types can be registered/handled by the ML without recompilation.

For each available data type (built-in and registered types) an MLTypeInfo struct can be requested which contains detailed information about the data type, its architecture, its defaults, pointers to its operators, and much more. Have a look at MLTypeInfos in mlDataTypes.h for more information.

The functions

have been newly implemented or extended by error handling in different ways and are exported in mlDataTypes.h now; however they're implemented in the new ML class Memory now.

The functions

     char* itoaCopy(int i)     (mlBasics.h)
     char* ftoaCopy(double f)  (mlBasics.h)

use mlAlloc to allocate memory now.

Many macros and accesses to global arrays have been replaced by functions and names have been unified and/or they were moved from mlBasics to MLDataTypes:

   -ML_NAME                          -> MLNameFromDataType
   -ML_sizeof                        -> MLSizeOf
   -ML_MIN                           -> MLMin
   -ML_MAX                           -> MLMax
   -ML_RANGE_ORDER                   -> MLRangeOrder
   -ML_IS_SIGNED                     -> MLIsSigned
   -ML_IS_INT_TYPE                   -> MLIsIntType
   -ML_IS_FLOAT_TYPE                 -> MLIsFloatType
   -ML_HOLDS                         -> MLHolds
   -getMLDataTypeForRange            -> MLGetDataTypeForRange,
   -getMLDataTypeForUncorrectedRange -> MLGetDataTypeForUncorrectedRange
   -MLpromotedPrecision              -> MLGetPromotedPrecision
   -MLpromotedType                   -> MLGetPromotedType
   -itoa                             -> removed (see above)
   -ftoa                             -> removed (see above)
   -itoaCopy                         -> MLIntToStringCopy
   -ftoaCopy                         -> MLFloatToStringCopy
   -mlAlloc                          -> MLAlloc
   -mlFree                           -> MLFree
   -mlRealloc                        -> MLRealloc
   -mlStrDup                         -> MLStrDup
   -mlMemDup                         -> MLMemDup

Functions which allocate memory have better error handling functionality now. All are outside of the ML namespace now.

  • MLIsValidType checks the validity of a given data type.
  • Many new functions are available

and many other convenience functions which support advanced operations on data types.

Please have a close look at mlDataTypes.h for further details.

  • Bug Fix: Functions signatures removed from Module since they didn't have any implementation (implementation had been removed a long time ago since they were senseless).
     static mlErrorCode getTile(Module* op,
                                SubImageBox loc,
                                MLDataType datatype,
                                void** data,
                                const ScaleShiftData &scaleShiftData=ScaleShiftData());

and

     static mlErrorCode getTile(Module* op,
                                SubImage *subimg,
                                const ScaleShiftData &scaleShiftData=ScaleShiftData());
  • SimpleViewer made independent of MLVolker by moving mlBypassOp from MLVolker to mlBasicOps.
  • Module Info moved into project BasicOps. It has a new subpanel for data type information which gives detailed information about structure and settings of the input data type.
  • To simplify future replacements of calculateInputSubImageBox and calcInSubImageProps methods in many projects the overloaded method calculateInputSubImageBox has been removed if it had reimplemented the default implementation. So code is reduced and further changes on calculateInputSubImageBox are simplified. Also in many projects (not in all) senseless warnings and tabs have been removed.
  • Class Module has a new helper function:
     // Reads any voxel value from an input module as string value.
     static std::string getVoxelValueAsString(Module *op, int outIdx, const ImageVector &pos,
                                              MLErrorCode *errCode=NULL,
                                              const std::string &errResult="");

Of course this method supports registered data types.

  • SoView2DReadPix has two new fields:
     // Pixel value as string to support registered/composed ML data types.
     SoSFString valueStr;
     SoSFString medicalValueStr;

These fields are string outputs for the voxels which show the entire voxel value and not only a casted one to float. They could be used e.g. in the annotation node to show the complete voxel value. However they're still not passed to SimpleView2D.

  • Searching of dll names is not lower case any more in mlAPI. (Felix Ritter)
  • Cache class interface now completely documented in english.
  • To avoid warnings in some projects header includes have been removed which are already included by the ML (there warnings are disabled).
  • In some projects the senseless keyword "class" has been removed before parameters in e.g. calculateInputSubImageBox implementations of modules.
  • The data types

have been registered as new voxel data types in the ML. If you think about registering your own data type please have a look at

    MLComplexTypeExtension.h,
    MLDoubleVectorTypeExtension.h,
    MLIntVectorTypeExtension,
    MLStdTypeExtension.h or
    MLMatrixTypeExtension.h

as examples in directory mlTypeExtensions in include directory of the ML.

  • In many projects throwing of ML_INVALIDATE_OUTPUT is written without casting to std::string now.
  • * SubImageBoxd class has a new function to determine the axis aligned bounding box from a SubimgBox transformed with a matrix:

static SubImageBoxd SubImageBoxd::calcAATransformedBox(const SubImageBox &box, const Matrix4 &matrix);

SubImageBox has a new function which returns the eight corners of a SubImageBox as 3D coordinates:

static void get3DCorners(const SubImageBox &box, ImageVector corners[8]);

Implementation of SubImageBoxd is now complete in namespace ML.

Changes before 14.03.2003

The main changes of this ML and ML-Module:

  • LineApplicator and PageApplicator classes are obsolete now. They still exist only for compatibility. New classes KernelBaseModule, KernelModule and KernelTools. Many kernel modules have been rewritten. Some standard filters have been moved to MLKernel project. IMPORTANT: Many kernel based modules are incompatible now. Please replace all modules in your networks by the new one.
  • SubImage and TSubImage class are more powerful (filling, min/max calculation, copying, untyped versions)
  • BitImage class is more powerful (save/load/cursor management)
  • InterventionPlanner(AppVis) works with world coordinates and can store BitImages to reduce recalculations.
  • Many minor changes like renaming of inconsistent function/method/constants many methods are now constant new convenience methods in some classes TreeNodeStuff supports versioning now doxygen documentation of many classes improved some bug fixes
  • It was necessary to make changes in many projects. Before updating to the new ML version please make an cvs diff to check all differences made in your project.
    After considering the upper changes and if any stuff does run as before please notify me immediately to remove potential bugs as soon as possible.

Detailed list of changes:

-MedicalImageproperties have been changed: -Voxel size can be set/get as Vector3 now. -Former class always caused problems when used in const methods since reading methods weren't const. Now class should be const capable. -These changes caused that the ToVoxelMatrix is now updated always when setWorld* methods are called. So these calls are more expensive now. -Some new access methods for world and voxel matrix operations have been added. -Many get-Methods are const now. -Some return values especially pointers are const now so that internal modifications of e.g. matrices are not possible any more. -Bug Fix: MedicalImageProperties::setToWorldMatrix(const Matrix4 *mat) now corrects set matrix values. Former version forgot that. -Projects using non const pointers into image properties have been adapted.

IMPORTANT: -When using set methods on matrices and voxel sizes extensively the new overhead for ToVoxelMatrix updates may be noticable. -When overloading reading methods of this class it must be proved that they also use const if the parent class it also has.

About 14.01.2003, Wolf Spindler.

  • Bug fix: Syntax error in getWrittenPageData of TVirtualVolume removed. About 15.01.2003, Wolf Spindler.
  • Bug in Module::adaptPageSize in mlBase op fixed. About 15.01.2003, Tobias Boskamp.
  • Bug fix in Host::_areImagePropertiesUpToDate(): On closed and undefined inputs which are permitted by the module's handleInput method sometime unnecessary invalidations of the output image were done. This has been removed. 17.01.2003, Wolf Spindler.
  • CachedBuffer instances now can return their priority value. 20.01.2003, Wolf Spindler.
  • BitImages have cursor set/get/move with/without exceptions now. 20.01.2003, Wolf Spindler.
  • New module PageView3D in MLMiscModulesInv shows pages of an ml output image in a 3d view. 21.01.2003, Wolf Spindler.
  • New method of class ImageVector in mlBasics.h: New methods in class ImageVector in mlBasics.h: Returns highest component of the vector which is not 1 (e.g. to get real dimension of an image). int getExtDimensions() const; Returns true if any component is negative, otherwise false. bool hasNegativeComp() const; Returns true if all components > 0, otherwise false. bool allBiggerZero() const; 23.01.2003, Wolf Spindler
  • BitImage is now registered in the runtime type system of the ML. 23.01.2003, Wolf Spindler
  • ImageVector class has 3 new members (set(int), set(const ImageVector &) and set(int,int,int,int,int,int)) for element (re)initialization. 24.01.2003, Wolf Spindler
  • BitImage class has new methods writeToFile() and readFromFile() now. 24.01.2003, Wolf Spindler
  • InterventionPlanner(AppVis) works with world coordinates and can store BitImages to reduce recalculations. 24.01.2003, Wolf Spindler
  • Project generation now also creates .cfg for doxygen; .def file is documented better now, a documentation viewing html file has also been added. 29.01.2003, Wolf Spindler
  • Versioning added to TreeNodeStuff. See ilab-info mail. 03.02.2003, Jan-Martin Kuhnigk
  • Vectors in mlLinearalgebra now have new members for floor, ceil, min, max, absmin, absmax etc. 11.02.2003, Horst Hahn
  • In MLKernel project setPartialKernel and two setKernel methods get const parameters now. In the mlKernelPageApplicator the methods fillBordersWithValue and fillBordersWithInputValues get const parameters now. 11.02.2003, Wolf Spindler
  • mlFields: Better handling of dynamic enum fields in ML modules added. 11.02.2003, Tobias Boskamp
  • Bug fixes in border filling in mlKernelPageApplicator.h: Filling borders with destination edge modes failed in cases where pages were page extents were smaller than kernel extents. 12.01.2003
  • mlFields: String parameters passed to enumField constructions are real const now. Previously only pointer were const, not the strings. 14.02.2003, Wolf Spindler
  • mlBitImage has new member functions to store the subimage it was created from. (setSourceBox and getSourceBox()). 14.02.2003, Wolf Spindler
  • getImgKoords and getSubImgKoords methods have been renamed to convertPointerToImagePosition and convertPointerToSubImagePosition respectively. 17.02.2003, Wolf Spindler
  • SubImage has new method fill() for untyped case. 18.02.2003, Wolf Spindler
  • TSubImage has a calcMinMax methods now to calculate minimum and maximum of all voxel value in a restricted box or in entire subimage. 18.02.2003, Wolf Spindler
  • mlKernel template class has two new members: getNegativeValueSum() and getPositiveValueSum() to calculate the sum of negative and positive kernel elements. 24.02.2003, Wolf Spindler
  • Module has three new member functions to activate/deactivate query calls of handleNotification: handleNotificationOff(), handleNotificationOn(), isHandleNotificationOn(). Calls can be nested. useful especially to avoid module internal side effects of field changes. 24.02.2003, Wolf Spindler
  • Convolution, ExtConvolution, LoG, Sharpen, Rank, StdDeviation, KernelExample, ZeroCrossings and Roberts have been reimplemented with new kernel base classes. Many of them have new internal names ending with "Filter", normal names end without filter. Older versions now all are deprecated or removed. 24.02.2003, Wolf Spindler
  • mlKernelBaseOp divided in mlKernelBaseOp and mlKernelOp. All filtering code is now parts of KernelBaseModule or KernelModule. Classes PageApplicator and LineApplicator are obsolete now. They remain only for compatibility reasons. Their content is now available as function library in class KernelTools. IndexTab is now signed. 25.02.2003, Wolf Spindler
  • New class KernelTools with some static functions containing some standard filtering functions e.g. for convolutions with and without (image and kernel) intervals. 28.02.2003, Wolf Spindler
  • Class TSubImage is more powerful now. New members to fill and copy border around a box have been added. 03.03.2003, Wolf Spindler
  • "InfoBig" module now deprecated. Use module "Info" instead. 07.03.2003, Wolf Spindler
  • BugFix in ML runtime type system: Now runtime types are called during dll initialization correctly. Also NULL runtime types are considered uninitialized now. 11.-13.03.2003, Stephan Kuhagen, Wolf Spindler

Changes before 18.12.2002

  • All projects are linked to Debug library of OpenInventor. That means that the previous problems with passing STL objects via dll interfaces hopefully do not exist any more. The wrapper macros in ML base have been disabled.
  • Since the debug version of OpenInventor is linked many warnings and errors are printed. It is possible to disable them by setting the environment variable ILAB_INVENTOR_PRINTS_OFF to a no zero value.
  • String handling in TreeNode stuff in MLParser and in ML rewritten to remove memory leaks and illegal string handling.
  • Class Notify in mlNotify added to the ML. Cache, DebugState, the general ML state, the error class, field changes, module creation and deletion and some other changes are now observable by registering in the global MLNotify class instance.
  • Draw3D has some new draw modes for planes.
  • Many ML code fragments moved from header into the .cpp file now.
  • Some more headers have been translated to english, some parts in .cpp also.
  • New project MLDiagnosis contains currently
    • mlConsole - Console output for all ML messages.
    • mlControl - Controls all important ML settings (Threads, Cache etc.)
    • mlErrorTest - Can create a errors for testing.
    • mlMLLogFile - Permits management of a LogFile for all ML messages.
    • mlModuleView - Permits a debugger-like view to a currently running module, also in release mode. Useful to control field states, image settings etc.
    • mlRuntimeView - Permits overview about the current state of the ML runtime type system.
    • mlTestInput - Can (automatically) generate/test a set of inputs images. Good to test a module against all kind of input images.
    • mlTester - Applies a set of tests to one or more modules. (Still work in progress)

These modules will replace the current Diagnosis modules when complete.

  • New project mlTools added. Include mlTools.h for a set of convenience routines to calculate image checksums, to handle LogFile creating/closing/appending, string replacements and separation not available in std::string.
  • SubImage has 3 new static convenience routines to convert indices into an image to coordinates and to convert coordinates to indices.
  • The ML runtime system has been rewritten in many parts. It consists of 3 main classes now. All 3 classes are implemented completely in the ML namespace now and the ML prefix has been removed. Runtime now contains all static parts like a bad runtime type and the dictionary of all registered runtime types. RuntimeType is the class to handle a RuntimeType and RuntimeDict handles a hash table containing all runtime types. The runtime system now also stores the name of the source dll a runtime type comes from.
  • The macro ML_INIT_LIBRARAY has been moved from mlBasics.h to mlRuntimeSubClass.h now. Dll/Shared object init function is called after static instance initialization. Many derived classes in projects have been adapted. Some project initialization functions have been renamed to permit correct dll name registration for runtime types. Please name your dll initialization function always like DllName+"Init" now (like it is done in automatically created projects).
  • The methods getMinGreyvalue and getMaxGreyvalue of the ImageProperty class have been renamed to getMinVoxelValue and getMaxVoxelValue. The method getPagesetExt of class PagedImage has been renamed to getPageSetExtent. Class method is locked of CachedBuffer has been renamed to isLocked.
  • The class Field has some new members now:
      // Return number of destination fields which could receive notifications or value sets.
      unsigned long getNumDestinationFields();
    
    
      // Return field number idx from destination fields. Return NULL if out of range.
      Field      *getDestinationField(unsigned long idx);
    
    
      // Return number of source fields which could send notifications or value sets.
      unsigned long getNumSourceFields();
    
    
      // Return field number idx from source fields. Return NULL if out of range.
      Field      *getSourceField(unsigned long idx);
    
    
      // Returns true if field value is passed as external value by reference
      // which is oldStyle usage. This method is only for testing tools to find
      // that out and to warn.
      virtual bool hasReferencedValue() const { return _deleteVal == false; }
    
    
      It also has a new member since most derived fields had this member anyway:
      // Flag to indicate that value has been created by field (which should be default).
      bool _deleteVal;
    
  • The class Module has some new features now: All instantiated modules are accessible via a list now. The following static access functions are now available:
        // Get number of instantiated modules.
        static unsigned long getNumBaseOps();
    
    
        // Get instantiated module # idx.
        static Module *getModule(unsigned long idx);
    
    
        // Return index of Module op. If not found -1 is returned.
        static long findBaseOpIndex(Module &op);
    
    
        // Destroy static allocated tables to avoid memory leaks.
        // To be called on ML destruction.
        static void destroyBaseOp();
    
  • The virtual volume has a set of additional functionality especially to handle written pages:
    In the VirtualVolume class:
        // Returns extents of a written and read pages used by the virtual volume.
        inline const ImageVector    &getPageExtent() const;
    
    
        // Returns box of written page no. wp. wp must be within [0, getNumWrittenPages()-1].
        // Note: Page box may reach out of image if page is a border page.
        inline const SubImageBox &getWrittenPageBox(MTuint32 wp);
    
    
        // Returns untyped pointer to data of written page no. wp.
        // wp must be within [0, getNumWrittenPages()-1].
        // Notes:
        // - If page is a border page then it could also contain undefined data.
        // - Number of voxels in page is given by getPageExtent().compMul().
        inline void            *getWrittenPageData(MTuint32 wp);
    
    
        // This function throws away all written pages. So accesses to the previously
        // written pages will access the original data.
        void                   unMapAndClearWrittenPages();
    
    
        // Enum which describe whether a page is mapped into the currently used page list or
        // unmapped from used pages.
        enum PageMapped { IsMapped, IsUnMapped };
    
    
        // Function type which can be registered in the TVirtualVolume called when a page is mapped.
        // The pointer to the virtual volume which handles this page is passed in obj, the pointer
        // to the manipulated page is passed in page and mapped is true if the page is mapped
        // or created; mapped is false if the page is removed from virtual volume.
        typedef void (*PageFunc) (VirtualVolume *obj, PageBuffer *page, PageMapped mapped, void *userData);
    
    
        // Register a function to be called when a page is mapped or unmapped.
        // The first parameter is the function to be registered, the second parameter is the user
        // data to be passed to the called function.
        // Pass (NULL, NULL) as first parameter to unregister any registered function.
        void registerPageFunction(PageFunc pFunc, void *userData);
    


    In the template class TVirtualVolume:
        // Returns true if voxel is mapped into memory, otherwise it returns false.
        inline bool isMapped(const ImageVector &pos) const;
    
    
        // Returns typed pointer to voxel data of written page no. wp.
        // wp must be within [0, vVol.getNumWrittenPages()-1].
        // Useful for fast access to written pages.
        // Notes:
        // - If page is a border page then it could also contain undefined data.
        // - Number of voxels in page is given by vVol.getPageExtent().compMul().
        inline DATATYPE *getWrittenPageData(MTuint32 wp) const
          { return (DATATYPE*)(vVol->getWrittenPageData(MTuint32 wp)); }
    

Changes before 11.09.2002

  • Doxygen documentation updated in many files, mlDoc.h moved one level up. (Wolf Spindler, 11.09.2002
  • mlDiagnosis now updates itself to symbol table on construction time. (Wolf Spindler, 04.09.2002)
  • mlDiagnosis.h: Mail functionality added to mlDiagnosis.h. Debug symbol updating bug removed. (Wolf Spindler, 04.09.2002)
  • mlDebug.h: Method getDebugEnvNames() added to ErrorOutput class. mlErrorCode added to error information container. (Wolf Spindler, 03.09.2002).
  • mlKernel: Debug prints removed to improve performance in debug mode. (Wolf Spindler, 22.08.2002)
  • 2002-08-22 18:31 kuhnigk Libraries/: MLModules/MLMiscModules/mlMask.cpp (1.9), mask is now using the page size of input0, adapted using Tobias' method
  • 2002-08-22 18:23 kuhnigk Libraries/ML/include/mlModuleMacros.h (1.5): added macro ML_CALCULATEOUTPUTSUBIMAGE_NUM_INPUTS_4_CPP for a module with 4 inputs
  • Warn Level 4 enabled and/or many warnings removed: MLPCA, MLDrawPrimitives, XVInventorWrapper, MLWatershed, CoordUtils, CombineData, Diffusion, Diagram,MLBeam, MLDynamics, MLBase, MLAppVis, MLCluster, SoVolumePro and others. (Wolf Spindler, *.08.2002)
  • Some simplifications made and cout/cerr-Redirection corrected in mlDebug.h. (Wolf Spindler, 16.08.2002)
  • FATAL-Errors now cause abort of ILAB in debug mode. Exceptions in handleNotifications are handled by the ML now. (Wolf Spindler, 15.08.2002)
  • Debug macros optimized for non debug case in debug mode. (Wolf Spindler, 12.08.2002)
  • mlKernel class now has constant getValueTab, getMinValue, getMaxValue, findIndex, getKernel and binomial coeff methods. some other methods are inline now. (Wolf Spindler ,05.08.2002)
  • 2002-08-05 16:26 kuhnigk Libraries/: MLModules/MLMiscModules/mlBoundingBox.cpp (1.5), lib/mlMiscModules.lib (1.61), ILABModules/ML/MLMiscModules/MLMiscModules.dll (1.86): BoundingBox
    • bugfix: the pagesize is now adapted to the new image size
  • 2002-08-05 14:04 kuhnigk Arithmetic2: added MaskIn-Functionality
  • 2002-08-05 12:47 wolf Error prints now begin with Filename(LineNumber) if possible. So with debug console you can jump to file directly on double click on line.

Changes before 01.08.2002

  • strstrea.h now included in mlInitSystemML.h. Extent-checking bug in exception part of virtual volume fixed. (Wolf Spindler ,01.08.2002)
  • VirtualVolume now supports exception throwing on errors. mlBasicTypes now has new error code ML_OUT_OF_RANGE. (Wolf Spindler ,31.07.2002)
  • strstrea.h now included in InitSystemML.h (Wolf Spindler ,31.07.2002)
  • New version of virtual volume with exception handling which is off by default. It still should not be used, since it is untested. The real reason to check in all the stuff is that all has been recompiled to validate all dll's, because there were an invalid one. (Wolf Spindler ,30.07.2002)
  • Bug fix: Missing cout/cerr outputs in standard console. Now outputs are printed correctly even if now Diagnosis module is used. Output redirection simplified a little bit. A new stringbuf class has been derived from stringbuf. It notifies the ErrorOutput class to handle the string. Now a new diagnosis module starts up synchronized to existing modules. (Wolf Spindler ,26.07.2002)
  • 2002-07-25 18:09 kuhnigk added field support for classes
  • Bug fix: Now valid getInOpIndex is returned in getInOpIndex in normal mode if input is connected but undefined (instead of -1 which was a bug). Now connection updated should work correctly again. (Wolf Spindler ,24.07.2002)
  • Another bug fix in updateProperties in open input redirection. (Wolf Spindler ,22.07.2002)
  • Many changes in many projects: -Open inputs now supported, updated in some projects. -Error handler rewritten -All debug and error prints changed in most projects -std added before many many endl, cout, cerr... -some destructors now virtual. -multithreading activated in some classes. -mlAPI has better error handling now. -many new error codes. -Diagnosis modules added to mlMiscModulesInv Please ilab-info mail! (Wolf Spindler ,19.07.2002)
  • OUT_OF_MEMORY enum removed from mlBasicTypes since ML_NO_MEMORY error already exists. (Wolf Spindler, 08.07.2002).
  • Two getTile methods have been removed from the Host and Module-Interface. These methods always requested a tile from output 0 of the input op and therefore they had no real sense. (Wolf Spindler, 08.07.2002).
  • Module-interface methods now contain some tests when inputs and connects are accessed. (Florian Link, before 28.06.2002)
  • VirtualVolume now can be configured as pure virtual volume without paged image as input. Also copying a subImg into the virtual volume supported now. (Wolf Spindler, 28.06.2002).
  • BitImage now has improved volume scan method and faster 2d access methods. So AppVis now can load volumes in correct data types. (Wolf Spindler, 25.06.2002)
  • SoRLVolRen now can select on subvolumes correctly. The subvolume for selection is now supported by SoRLVolumeWrapper. (Wolf Spindler, 20.06.2002)
  • ML_INVALIDATE_OUTPUT exceptions thrown by calcOutSubImg are handled correctly now. These exceptions are not shown in the console any more. (Wolf Spindler, 28.06.2002)
  • New image access class VirtualVolume and TVirtualVolume added. Permits fast random access to arbitrary parts of a paged input image. (Wolf Spindler, 18.06.02)
  • New feature/BugFix: MinMaxScan module has an AutoUpdate toggle and a Scan button now. Identical min/max values are passed unchanged now. Max is not increased by 1 any more. Forgotten update of output data type show is added now. (Wolf Spindler, 13.05.02).
  • New helper function getMTDataTypeForUncorrectedRange(long double min, long double max, int preferUnsigned); added to mlBasicTypes. It handles data type computation a little bit different (and more correct) like getMTDataTypeForRange(...); (Wolf Spindler, 13.05.02).
  • Convenience Module SoCrossHair (as 3d cursor) added to SoRL. (Wolf Spindler, 26.03.02).
  • BugFix: Forgotten setting of TraceColor changes is SoRLLut fixed. (Wolf Spindler, 26.04.02)

Changes before 25.04.2002

  • SoAntiSquish added to InventorModules. (Wolf Spindler, 25.04.02)
  • Bug avoiding successful xml loads fixed in intervention planner with help of Florian. (Wolf Spindler, 25.04.02).
  • * reset button added to resample3d new version simplewatershedseg new application gradientwatershedapp new version roiselect (Horst Hahn, 25.04.02)
  • New LungPreprocessing Macro which calculates a set of specialized outputs. (Jan Martin Kuhnigk, 25.04.02)
  • New Module "Radon" which performs a slice by slice 2d Radon transformation on 3d data sets. (Bernd Kuemmerlen, 24.04.02)
  • New Module: MergeRegions added. Combines to regions and outputs a new region with new bounding box. (Jan Martin Kuhnigk, 23.04.02)
  • New Module: CombineData: Combines data in u (user) dimension. (Jan Rexilius, 20.04.02)
  • mlAppVis project now available as InterventionPlanner 1.0 application. (Wolf Spindler) It can be activated in ilab.prefs by setting InterventionPlanner YES
  • SwitchMacro added. It switches between two inputs (by a simple toggle) and works also if one input is invalid with the other input (unlike the ML Switch operator) (Volker Dicken, 16.04.02).
  • Live-Wire has a second input for a cost image now. (Andrea Schenk. 09.04.02)
  • mlCalcVolume revised for 4d images and Diagram output (Horst Hahn)
  • Bug in BoundingBox calculation of BitImage on VolumeScan fixed. (Wolf)
  • 'log' & 'exp' added to Arithmetic1 (Jan Rexilius)
  • new modules (Jan Rexilius)
    • JointHist compute 2D histogram
    • JointHistMask generate binary mask using rectangle from 2D histogram
    • JointHistViewer viewer for JointHist operator (shows 2D and associated 1D histograms)
    • JointDisplay generate joint display from two input images
  • FieldShift macro module added to Helper macros. It collects the last 10 field contents in string fields in a list which is shifted forward if an input field is changed. Useful e.g. to collect a set of recent changes or selections. (Wolf Spindler)
  • InterventionPlanner updated. (Help file, volume render source selectable, 3d Annotation etc...) (Wolf)

Changes before 20.03.2002

  • mlFAQ started and updated. (Wolf Spindler)
  • Some more changes at the SoRLLuookUpTable and rl for adaptive lut widthes. Many module recompiled. (Wolf Spindler)
  • View2D now uses adaptive/user controllable LookUpTables for better image quality. (Florian Link)
  • Changes of getPersistentState in MLBase required complete recompile of all ML modules. (Tobias Boskamp)
  • SimpleDraw Macro added to simplify usage of Draw3D. (Wolf Spindler)
  • New definitions for complex numbers (ML_REAL and ML_IMAG) and for vectors (ML_V0, ML_V1, ML_V2, ML_V3, ML_V4, ML_V5) added to mlBasicTypes.h (Wolf Spindler)
  • MLFourierTransform dll (work in progress) added. It also contains functions to convert interleaved complex numbers to u-dimension and vice versa. (Jan Martin Kuhnigk)
  • Some additional functionality and optimizations added to BitImage for downscaling the image and for converting float volumes to bitImages. Faster access methods for 3d added. (Wolf Spindler)
  • The new mlAppVis project added. It contains some modules for the visualization application. It still will be work in progress some time. (Wolf Spindler)
  • SoSelection2 added to SoRL to select arbitrary inventor objects. (Wolf Spindler)
  • New project MLRate which contains ConstrainedConnectionCost morphology module: The operator calculates 2D connection cost of image voxels with respect to a given set of reference voxels in the same plane. (Stefan Zidowitz)
  • New project MLMilo added with EuclideanDTF module with improved distance transformation. (Milo).
  • mlScalarVectorTemplate added and complete revision of mlLinearAlgebra (Richard Rascher-Friesenhausen).
  • Bug Fix: The proportional font size in KernelEditor has been corrected. It is a fixed font size now, (Wolf Spindler)
  • Color field in ML now has setPackedColor and getPackedColor methods. (Wolf Spindler)
  • Bug fixed: Now the MemCache really invalidates the outputs when no data is loaded. (Wolf Spindler)
  • New kernel module mlBitMorphologyFilter added. It offers parallel dilation and erosion of bitplanes for integer images. (Horst Hahn)
  • CloseGap has some new features now. (Jan-Martin Kuhnigk)

Changes before 06.02.2002

  • BugFix: PadSrcClamp mode caused exceptions when used. Fixed on 07.01.2002. (Wolf)
  • mlBitImage has been added to the ML. It contains a class to manage a binary images. (Wolf)
  • New methods added to mlHost.h and mlModule.h: (Florian)
        // Sets callback for break checking
        static void setBreakCheckCB(void *userData, ML_HostBreakCheckCB *callback);
    
        // Checks if current calculation should be terminated
        static bool shouldTerminate();
    
        // Checks if a notify button was pressed (outside of normal notification)
        // return the notify field or NULL if nothing was pressed
        static Field* getPressedNotifyField();
    
  • mlMultiIntervals module has been added to subdivide an image in trace color or other intervals or compositions of them. (Wolf)
  • BugFix and updates:Switch module now optimized. It passes all image properties now, not only a subset. (Tobias B., Wolf)
  • mlTimerSwitch added to mlMiscModulesInv. (Wolf)
  • Now mlDraw3D is more stable with undo option, 2D and 3D-fill works with pixel manipulations, changes of properties after drawing possible now. (Wolf)
  • New 2D mlDiffusion filter for nonlinear diffusion filtering added. (Jan R., Richard).
  • 3d GrowRegionSimple module for (lung) segmentation added. Already stable. (Jan-Martin)
  • ISO-Surface algorithms are faster now and have inventor option. (Wolf)
  • fMRI-Modules added (Sven H.)
  • Fuzzy modules added (Sarah).
  • CloseGap for binary images as a special closing operation added. Still needs modifications for non binary images. (Jan-Martin)
  • GenerateLungMarkerList added (Work-in Progress). Special module to set seed points for lung segmentations.
  • SoExtText2D added. (Florian)
  • RLE-Kompression für TIFF available now. (Tobias B.)
  • New DICOM-Save options (Tobias B.)
  • LookupTable in render library has been changed completely. LookUpTableBase as macro file has been removed. Base class can be inherited simply for new look up table sizes. Change id have been added.
  • All project dlls have been checked in again after recompilation with new rl.

Changes before 27.11.2001

  • Many project files have been adapted by Florian.
  • InTile-Cachings only works on completely requested input volumes from now on. If wrong tile sizes are requested the inTileCaching is disabled and warnings are printed.
  • Mask, MinMaxScan and Scale modules in project mlMiscModules have better algorithms to determine correct output data types depending on mixtures of input data types, datatypes, value ranges and masking modes.
  • ML-API now has the new function ML_ClearCache().
  • Functions getMTDataTypeForRange(...) and MTpromotedPrecision(MTDataType dt1, MTDataType dt2); have been added to mlBasicTypes. They are quite useful to determine new output data types of images when value ranges and/or data types change.
  • AddExample module rewritten and updated to current ML.
  • GlobalExampleOp module rewritten and updated to current ML.
  • MIPExampleOp module rewritten and updated to current ML.
  • mlLinearAlgebra has a new class Vector6 with double values which has most members of ImageVector and other vector classes.
  • mlLinearAlgebra has a new class mlSubImgBoxf with double points with similar (not the same!) properties like SubImageBox.
  • Many functionality in mlLinearAlgebra has been inlined to improve performance of the library.
  • Many functionality in mlBasics has been inlined to improve performance of the library, especially of the class ImageVector.
  • Many functionality in mlSubImg has been inlined to improve performance of the library, especially of the classes SubImage and TSubImage.
  • Some new functions and convenience constructors have been added to mlLinearAlgebra.
  • First implementations of mFields.h and mlMFields.cpp have been removed from ML since the functionality is replaced by mlBase.
  • mlBase has two new classes: RasterFunction and RasterFunctionList in the Files mlRasterFunction.* and mlRasterFunctionList.*. They can be used to define and/or apply implicit function to subimages. The corresponding modules mlRaster and mlRasterFunctions have been implemented in the project mlMiscModules.
  • Most files in ml, mlBase, mlMiscModules and mlMiscModulesInv have been adapted to new file headers which contain author, source, id and the name of the last change person.

Changes before 07.11.2001

  • From now on printing of fatal errors, errors and warnings is activated automatically if ML_DEBUG_ON is enabled.
  • Now the warning message ML_DISCONNECTED_GRAPH is not printed any more as warning by the ML_API.
  • BUG-Fix: ML host wasted memory during page calculation which caused out of memory errors on big images, especially on modules with more than one input. This error has not been removed completely but the effect has been reduced strongly. When using memory images temporarily about three times of the image size may be located in memory when page size is set to image size. Currently this is not avoidable.
  • Now source (.cpp) and header (.h) files of the ML are located in different directories (source and include).
  • BUG-Fix: SubImage has an untyped pointer to the chunk of data it manages. Typed versions have their own typed pointer with the SAME name. That caused that (untyped) base class pointers to typed instances of subimages used the untyped pointer. So the usage of untyped pointers didn't work since the untyped pointer was not initialized when a typed version was constructed from untyped versions. Now these constuctors also set the untyped pointer version so that the usage of untyped pointers to typed instances should work.
  • BUG-Fix: Now the ML cache has a default size of 50000 KB now if no environment variable is specified. Previous versions set the size to 0 which caused a very slow ML due to missing caching possibilities.
  • The following functions have been added to the ML API:
        // Remove all pages of the page image from the memory at output image field field.
        // Also clear the memoryImg if the memoryImg mode is adequate.
        MLEXPORT mlErrorCode ML_ClearPagesAndMemoryImg(mlField* field);
    
        // Remove all pages of the page image from the memory at output image field field.
        MLEXPORT mlErrorCode ML_ClearPages(mlField* field);
    
        // Clear the memory image if it is handled by the ML at output image field field.
        // A manually controled memory image is not changed.
        MLEXPORT mlErrorCode ML_ClearMemoryImg(mlField* field);
    
        // Returns currently used cache size for pages in bytes in numBytes at output image field field.
        // If returned error code is not ML_RESULT_OK then numBytes remains unchanged.
        MLEXPORT mlErrorCode ML_GetPageMemorySize(mlField* field, size_t &numBytes);
    
        // Returns currently used size of memory image in bytes in numBytes at output image field field.
        // If returned error code is not ML_RESULT_OK then numBytes remains unchanged.
        MLEXPORT mlErrorCode ML_GetMemoryImgSize(mlField* field, size_t &numBytes);
    
  • The following methods have been added to PagedImage:
        // Remove all pages of the page image from the memory.
        // After this call holds getPage(ID)=0 for all pages of the image.
        void clearOnlyThePageList();
    
        // Clear the memory image if it is handled by the ML.
        // A manually controled memory image is not changed.
        void clearOnlyTheMemoryImg();
    
        // Returns currently used cache size for pages in bytes.
        size_t getCachedPagesSizeInBytes();
    
        // Returns currently used size of memory image in bytes.
        size_t getSizeInBytes();