DYT/Tool/3rdParty_x64/include/dcmtk/dcmtract/trctrack.h

202 lines
8.0 KiB
C
Raw Normal View History

2024-11-22 15:19:31 +00:00
/*
*
* Copyright (C) 2016, Open Connections GmbH
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation are maintained by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmtract
*
* Author: Michael Onken
*
* Purpose: Class representing a Track from a Tractography Results IOD
*
*/
#ifndef TCRTRACK_H
#define TCRTRACK_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmiod/modbase.h"
#include "dcmtk/dcmtract/trctypes.h"
/** Class representing a Track of of the "Tractography Results" IOD. This
* is the data contained in the items of the Track Sequence.
*/
class DCMTK_DCMTRACT_EXPORT TrcTrack
: public IODComponent
{
public:
// Allow read/write functions in DcmIODUtil to access class internals
friend class DcmIODUtil;
/** Create TrcTrack object from required data
* @param trackDataPoints The data points of the track. Each point consists
* of x,y and z coordinate.
* @param numPoints The number of data points (i.e. number of coordinates
* divided by 3!)
* @param colors Optional parameter that defines the recommended display
* colors for all points. Each color is defined in CIELab space,
* which means "L", "a" and "b" value must be defined for each color.
* In DICOM, the value range must be 0 <= value <= 65535.
* @param numColors The number of colors in the colors parameter (i.e. number
* of L,a,b components divided by 3!). Alternatively, a single
* CIELab color can be provided, independent from the number of
* points in the track. In that case the color is used to color
* all points in the track. See also
* setRecommendedDisplayCIELabValues() for more explanations.
* @param trackSet Returns the resulting TrcTrack object (NULL in case of
* any error)
* @return EC_Normal if Track could be created, error otherwise
*/
static OFCondition create(const Float32* trackDataPoints,
const size_t numPoints,
const Uint16* colors,
const size_t numColors,
TrcTrack*& trackSet /* result */);
/** Destructor, frees memory
*/
virtual ~TrcTrack();
/** Get name of component
* @return Name of the module ("TrackSequenceItem")
*/
virtual OFString getName() const;
/** Resets rules to their original values
*/
virtual void resetRules();
/** Clear all data
*/
virtual void clearData();
/** Check whether this component's data satisfies the underlying
* rules
* @param quiet If OFTrue, not error / warning messages will be produced. Only
* the returned error code will indicate error or OK. Per default,
* logging output is produced (OFFalse).
* @result EC_Normal if rules are satisfied, error otherwise
*/
virtual OFCondition check(const OFBool quiet = OFFalse);
/** Read attributes from given item into this class
* @param source The source to read from
* @param clearOldData If OFTrue, old data is cleared before reading. Otherwise
* old data is overwritten (or amended)
* @result EC_Normal if reading was successful, error otherwise
*/
virtual OFCondition read(DcmItem& source,
const OFBool clearOldData = OFTrue);
/** Write attributes from this class into given item
* @param destination The item to write to
* @result EC_Normal if writing was successful, error otherwise
*/
virtual OFCondition write(DcmItem& destination);
/** Get Track Data
* @param data Pointer to the point data
* @return Returns number of points in the track or 0 if no points could
* be found.
* @return EC_Normal if successful, an error code otherwise
*/
virtual size_t getTrackData(const Float32*& data) const;
/** Get Number of data points
*/
virtual size_t getNumDataPoints();
/** Get Recommended Display CIELab Value. This will only return a result
* if a single value is defined to color the Track. Otherwise
* getRecommendedDisplayCIELabValueList() must be used.
* @param L Returns L component of CIELab color
* @param a Returns a component of CIELab color
* @param b Returns b component of CIELab color
* @return EC_Normal if successful, an error code otherwise
*/
virtual OFBool getRecommendedDisplayCIELabValue(Uint16& L,
Uint16& a,
Uint16& b);
/** Get Recommended Display CIELab Value List. This will only return a result
* if one color per data point is defined.
* @param colors Returns list of colors, each consisting of
* L,a,b components
* @return Number of colors (i.e. number of components divided
* by 3!). If no colors are defined for data points, 0 is returned.
*/
size_t getRecommendedDisplayCIELabValueList(const Uint16*& colors);
/** Returns the coloring mode, i.e. whether color is defined for all points
* in the track separately, or defined by a single color for the track, or
* if the track does not provide color information in which case the Track
* Set must provide a color (note that this is not checked, though).
* @return The coloring mode
*/
TrcTypes::E_TrackColorMode getRecommendedDisplayCIELabMode();
/** Set Track Data
* @param trackDataPoints Array of values to be set, all points
* after another with each point consisting of x, y and z component.
* @param numPoints Number of points in array (one point consists
* of x, y, and z coordinates)
* @return EC_Normal if successful, an error code otherwise
*/
virtual OFCondition setTrackData(const Float32* trackDataPoints,
const size_t numPoints);
/** Set Recommended Display CIELab Value (List)
* Depending on how many colors are provided, different DICOM is produced
* when writing the Track later:
* 0: No color information for this Track is stored (i.e. neither "Recommended
* Display CIELab Value" is set nor "Recommended Display CIELab Value List".
* Thus there must be a color definition on Track Set level instead.
* 1: The given color (consisting of L,a,b component) is recommended to be
* used for coloring every point in this track. This color will got to the
* element "Recommended Display CIELab value" for this particular track. In
* that case, the related Track Set must not have any color recommendation.
* >1: The number of colors must be equal to the number of data points. Each
* data point color is separately specified. This setting will lead to the
* element "Recommended Display CIELab Value List" to be written later.
* The related Track Set must not contain any color recommendation at all
* in that case.
* Note that if the third option (>1) is chosen, it must be provided for
* every track in the related Track Set!
* @param colors Array of color values to be set, all colors one
* after another with each color consisting of L, a and b component.
* @param numColors Number of colors in array (one point consists
* of x, y, and z coordinates).
* @return EC_Normal if successful, an error code otherwise
*/
virtual OFCondition setRecommendedDisplayCIELabValues(const Uint16* colors,
const size_t numColors);
protected:
/** Protected constructor, use create() method to create a new track set
*/
TrcTrack();
/** Cut off point data in the end if the number of components is not dividable
* by 3 (each point must have x,y and z component)
* @return OFTrue if situation is ok (after fixing if applicable), otherwise
* OFFalse (e.g. in case of an internal error)
*/
OFBool fixPointCoordinatesDataVM();
};
#endif // TCRTRACK_H