981 lines
40 KiB
C++
981 lines
40 KiB
C++
/*
|
|
*
|
|
* Copyright (C) 1998-2012, OFFIS e.V.
|
|
* All rights reserved. See COPYRIGHT file for details.
|
|
*
|
|
* This software and supporting documentation were developed by
|
|
*
|
|
* OFFIS e.V.
|
|
* R&D Division Health
|
|
* Escherweg 2
|
|
* D-26121 Oldenburg, Germany
|
|
*
|
|
*
|
|
* Module: dcmpstat
|
|
*
|
|
* Author: Marco Eichelberg
|
|
*
|
|
* Purpose:
|
|
* classes: DcmPresentationState
|
|
*
|
|
*/
|
|
|
|
#ifndef DCMPSTAT_H
|
|
#define DCMPSTAT_H
|
|
|
|
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
|
|
#include "dcmtk/dcmdata/dctk.h"
|
|
|
|
#include "dcmtk/ofstd/ofstring.h" /* for class OFString */
|
|
#include "dcmtk/dcmpstat/dvpstyp.h" /* for enum types */
|
|
#include "dcmtk/dcmpstat/dvpsovl.h" /* for DVPSOverlay_PList */
|
|
#include "dcmtk/dcmpstat/dvpsgll.h" /* for DVPSGraphicLayer_PList */
|
|
#include "dcmtk/dcmpstat/dvpsrsl.h" /* for DVPSReferencedSeries_PList */
|
|
#include "dcmtk/dcmpstat/dvpsall.h" /* for DVPSOverlayCurveActivationLayer_PList */
|
|
#include "dcmtk/dcmpstat/dvpsgal.h" /* for DVPSGraphicObject_PList */
|
|
#include "dcmtk/dcmpstat/dvpscul.h" /* for DVPSCurve_PList */
|
|
#include "dcmtk/dcmpstat/dvpsvll.h" /* for DVPSVOILUT_PList */
|
|
#include "dcmtk/dcmpstat/dvpsvwl.h" /* for DVPSVOIWindow_PList */
|
|
#include "dcmtk/dcmpstat/dvpsdal.h" /* for DVPSDisplayedArea_PList */
|
|
#include "dcmtk/dcmpstat/dvpssvl.h" /* for DVPSSoftcopyVOI_PList */
|
|
#include "dcmtk/dcmpstat/dvpspl.h" /* for DVPSPresentationLUT */
|
|
|
|
class DVPSTextObject;
|
|
class DVPSGraphicObject;
|
|
class DVPSCurve;
|
|
class DVPSDisplayedArea;
|
|
class DVPSSoftcopyVOI;
|
|
|
|
/** a Grayscale Softcopy Presentation State.
|
|
* This class manages the data structures comprising a Presentation State object.
|
|
* Presentation states can be created, read, written, and modified.
|
|
*/
|
|
|
|
class DCMTK_DCMPSTAT_EXPORT DcmPresentationState
|
|
{
|
|
public:
|
|
/** default constructor
|
|
*/
|
|
DcmPresentationState();
|
|
|
|
/// destructor
|
|
virtual ~DcmPresentationState();
|
|
|
|
/** reads a presentation state from a DICOM dataset.
|
|
* The DICOM elements of the presentation state are copied
|
|
* from the dataset to this object.
|
|
* The completeness and correctness of the
|
|
* presentation state (presence of all required elements,
|
|
* value multiplicity) is checked.
|
|
* If this method returns an error code, the object is in undefined state afterwards.
|
|
* @param dset the dataset from which the presentation state is to be read
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition read(DcmItem &dset);
|
|
|
|
/** writes the presentation state managed by this object to a DICOM dataset.
|
|
* Copies of the DICOM elements managed by this object are inserted into
|
|
* the DICOM dataset.
|
|
* @param dset the dataset to which the presentation state is written
|
|
* @param replaceSOPInstanceUID flag indicating whether the
|
|
* SOP Instance UID should be replaced by a new UID.
|
|
* If true, a new UID is always generated. If false, a new
|
|
* UID is generated only if no UID has been assigned before.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition write(DcmItem &dset, OFBool replaceSOPInstanceUID);
|
|
|
|
/** generates a new SOP Instance UID for the Presentation State.
|
|
* @return new SOP Instance UID if successfully set, NULL otherwise.
|
|
*/
|
|
const char *createInstanceUID();
|
|
|
|
/** returns the current SOP Instance UID for the Presentation State.
|
|
* @return SOP Instance UID if present, NULL otherwise.
|
|
*/
|
|
const char *getInstanceUID();
|
|
|
|
/** returns the (currently hard-coded) SOP Class UID of the Presentation State.
|
|
* @return SOP Class UID of the presentation state
|
|
*/
|
|
const char *getSOPClassUID();
|
|
|
|
/** returns the patient ID of the presentation state
|
|
*/
|
|
const char *getPatientID();
|
|
|
|
/** returns the Study Instance UID of the presentation state.
|
|
* @return Study Instance UID if successful, NULL otherwise.
|
|
*/
|
|
const char *getStudyUID();
|
|
|
|
/** adds a reference to an image to this presentation state.
|
|
* This method checks if the given SOP class and Study UID match
|
|
* for this presentation state and returns an error code otherwise.
|
|
* @param studyUID the Study Instance UID of the image reference to be added.
|
|
* @param seriesUID the Series Instance UID of the image reference to be added.
|
|
* @param sopclassUID the SOP class UID of the image reference to be added.
|
|
* @param instanceUID the SOP instance UID of the image reference to be added.
|
|
* @param frames a list of frame numbers in DICOM IS format
|
|
* (integer numbers separated by '\' characters). Default: frame numbers absent.
|
|
* The frame numbers are required if the referenced image is a multiframe image.
|
|
* @param aetitle the series retrieveAETitle. Must be a valid DICOM 'AE' value. Default: value absent.
|
|
* @param filesetID the series storageMediaFileSetID. Must be a valid DICOM 'SH' value. Default: value absent.
|
|
* @param filesetUID the series storageMediaFileSetUID. Must be a valid DICOM UID. Default: value absent.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition addImageReference(
|
|
const char *studyUID,
|
|
const char *seriesUID,
|
|
const char *sopclassUID,
|
|
const char *instanceUID,
|
|
const char *frames=NULL,
|
|
const char *aetitle=NULL,
|
|
const char *filesetID=NULL,
|
|
const char *filesetUID=NULL);
|
|
|
|
/** adds a reference to an image to this presentation state.
|
|
* This method checks if the given SOP class and Study UID match
|
|
* for this presentation state and returns an error code otherwise.
|
|
* @param dset the DICOM dataset containing the image IOD
|
|
* @param aetitle the series retrieveAETitle. Must be a valid DICOM 'AE' value. Default: value absent.
|
|
* @param filesetID the series storageMediaFileSetID. Must be a valid DICOM 'SH' value. Default: value absent.
|
|
* @param filesetUID the series storageMediaFileSetUID. Must be a valid DICOM UID. Default: value absent.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition addImageReference(
|
|
DcmItem &dset,
|
|
const char *aetitle=NULL,
|
|
const char *filesetID=NULL,
|
|
const char *filesetUID=NULL);
|
|
|
|
/** removes a reference to an image from this presentation state.
|
|
* @param studyUID the Study Instance UID of the image reference to be removed.
|
|
* @param seriesUID the Series Instance UID of the image reference to be removed.
|
|
* @param instanceUID the SOP instance UID of the image reference to be removed.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition removeImageReference(
|
|
const char *studyUID,
|
|
const char *seriesUID,
|
|
const char *instanceUID);
|
|
|
|
/** removes a reference to an image from this presentation state.
|
|
* @param dset the DICOM dataset containing the image IOD
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition removeImageReference(DcmItem &dset);
|
|
|
|
/** gets the number of image references in all series managed by this list.
|
|
* @return number of image references
|
|
*/
|
|
size_t numberOfImageReferences();
|
|
|
|
/** gets an image reference with the given index.
|
|
* @param idx index, must be < numberOfImageReferences().
|
|
* @param studyUID the Study Instance UID is returned in this string
|
|
* @param seriesUID the Series Instance UID is returned in this string
|
|
* @param sopclassUID the SOP Class UID is returned in this string
|
|
* @param instanceUID the SOP Instance UID is returned in this string
|
|
* @param frames the list of frames is returned in this string
|
|
* @param aetitle the series retrieveAETitle is returned in this string
|
|
* @param filesetID the series storageMediaFileSetID is returned in this string
|
|
* @param filesetUID the series storageMediaFileSetUID is returned in this string
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition getImageReference(
|
|
size_t idx,
|
|
OFString& studyUID,
|
|
OFString& seriesUID,
|
|
OFString& sopclassUID,
|
|
OFString& instanceUID,
|
|
OFString& frames,
|
|
OFString& aetitle,
|
|
OFString& filesetID,
|
|
OFString& filesetUID);
|
|
|
|
|
|
/** resets the object to initial state.
|
|
* After this call, the object is in the same state as after
|
|
* creation with the default constructor.
|
|
*/
|
|
void clear();
|
|
|
|
/** creates a default presentation state for a DICOM image.
|
|
* A number of flags specify how curves, overlays, VOI transformations,
|
|
* a display shutter and a presentation LUT shape
|
|
* should be treated when found in the image IOD.
|
|
* If this method returns an error code, the object is in undefined state afterwards.
|
|
* @param dset the DICOM dataset containing the image IOD
|
|
* @param overlayActivation flag defining how overlays should be handled
|
|
* (copied, activated or ignored). Default: Copy overlays.
|
|
* @param voiActivation flag defining how VOI LUTs or VOI window width/center should
|
|
* be handled. Default: Use VOI and prefer VOI LUT from VOI window.
|
|
* @param curveActivation flag defining whether curves in the image should
|
|
* be activated. Default: Activate curves.
|
|
* @param shutterActivation flag defining whether a shutter (not bitmap shutter)
|
|
* should be copied to the presentation state when found in the image.
|
|
* Default: Copy shutter.
|
|
* @param presentationActivation flag defining whether a presentation LUT shape
|
|
* should be copied to the presentation state when found in the image.
|
|
* Default: Copy presentation LUT shape.
|
|
* @param layering flag defining how graphic layers should be created for
|
|
* activated overlays and curves. Default: Create one layer for all overlays
|
|
* and another layer for all curves.
|
|
* @param aetitle the series retrieveAETitle. Must be a valid DICOM 'AE' value. Default: value absent.
|
|
* @param filesetID the series storageMediaFileSetID. Must be a valid DICOM 'SH' value. Default: value absent.
|
|
* @param filesetUID the series storageMediaFileSetUID. Must be a valid DICOM UID. Default: value absent.
|
|
* @return EC_Normal upon success, an error code otherwise.
|
|
*/
|
|
OFCondition createFromImage(DcmItem &dset,
|
|
DVPSoverlayActivation overlayActivation = DVPSO_copyOverlays,
|
|
DVPSVOIActivation voiActivation = DVPSV_preferVOILUT,
|
|
OFBool curveActivation = OFTrue,
|
|
OFBool shutterActivation = OFTrue,
|
|
OFBool presentationActivation = OFTrue,
|
|
DVPSGraphicLayering layering = DVPSG_twoLayers,
|
|
const char * aetitle = NULL,
|
|
const char * filesetID = NULL,
|
|
const char * filesetUID = NULL);
|
|
|
|
|
|
/* Presentation LUT Interface */
|
|
|
|
/** gets the current Presentation LUT type.
|
|
* @return the current presentation LUT type
|
|
*/
|
|
DVPSPresentationLUTType getPresentationLUT() { return presentationLUT.getType(); }
|
|
|
|
/** checks if a real Presentation LUT (not shape)
|
|
* is available in the presentation state.
|
|
* @return OFTrue if the presentation state contains
|
|
* a presentation LUT, no matter if it is activated or not.
|
|
* Returns OFFalse otherwise.
|
|
*/
|
|
OFBool havePresentationLookupTable() { return presentationLUT.haveTable(); }
|
|
|
|
/** gets a description of the current presentation LUT.
|
|
* For well-known presentation LUT shapes, a standard text
|
|
* is returned. For presentation LUTs, the LUT explanation
|
|
* is returned if it exists and a standard text otherwise.
|
|
* This method never returns NULL.
|
|
* @return a pointer to a string describing the current presentation LUT.
|
|
*/
|
|
const char *getCurrentPresentationLUTExplanation() { return presentationLUT.getCurrentExplanation(); }
|
|
|
|
/** returns the LUT explanation of the presentation LUT
|
|
* if it exists and is non-empty.
|
|
* Otherwise returns NULL.
|
|
* @return a string pointer
|
|
*/
|
|
const char *getPresentationLUTExplanation() { return presentationLUT.getLUTExplanation(); }
|
|
|
|
/** gets the current Presentation LUT object.
|
|
* @return the current presentation LUT object
|
|
*/
|
|
DVPSPresentationLUT *getPresentationLUTData() { return &presentationLUT; }
|
|
|
|
/* Rotate/Flip Interface */
|
|
|
|
/** gets the current rotation status of the presentation state.
|
|
* @return the current rotation status
|
|
*/
|
|
DVPSRotationType getRotation();
|
|
|
|
/** gets the current horizontal flip status of the presentation state.
|
|
* @return OFTrue if flip is on, OFFalse if flip is off.
|
|
*/
|
|
OFBool getFlip();
|
|
|
|
/** sets rotation status of the presentation state.
|
|
* @param rotation the rotation to be set
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setRotation(DVPSRotationType rotation);
|
|
|
|
/** sets horizontal flip status of the presentation state.
|
|
* @param isFlipped the flip status, OFTrue for on, OFFalse for off.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setFlip(OFBool isFlipped);
|
|
|
|
|
|
/* VOI Transform Interface */
|
|
|
|
/* Displayed Area Interface */
|
|
|
|
|
|
/* shutter Interface */
|
|
|
|
/** checks if a display shutter of given type is active.
|
|
* @param type the shutter type
|
|
* @return OFTrue if this type of shutter is currently active.
|
|
*/
|
|
OFBool haveShutter(DVPSShutterType type);
|
|
|
|
/* rectangular shutter Interface */
|
|
|
|
/** gets rectangular shutter left vertical edge.
|
|
* May only be called if a rectangular shutter is active.
|
|
* @return the rect shutter LV edge.
|
|
*/
|
|
Sint32 getRectShutterLV();
|
|
|
|
/** gets rectangular shutter right vertical edge.
|
|
* May only be called if a rectangular shutter is active.
|
|
* @return the rect shutter RV edge.
|
|
*/
|
|
Sint32 getRectShutterRV();
|
|
|
|
/** gets rectangular shutter upper horitontal edge.
|
|
* May only be called if a rectangular shutter is active.
|
|
* @return the rect shutter UH edge.
|
|
*/
|
|
Sint32 getRectShutterUH();
|
|
|
|
/** gets rectangular shutter lower horiztonal edge.
|
|
* May only be called if a rectangular shutter is active.
|
|
* @return the rect shutter LH edge.
|
|
*/
|
|
Sint32 getRectShutterLH();
|
|
|
|
|
|
/* circular shutter Interface */
|
|
|
|
/** gets circular shutter center x component.
|
|
* May only be called if a circular shutter is active.
|
|
* @return the circ shutter center x component
|
|
*/
|
|
Sint32 getCenterOfCircularShutter_x();
|
|
|
|
/** gets circular shutter center y component.
|
|
* May only be called if a circular shutter is active.
|
|
* @return the circ shutter center y component
|
|
*/
|
|
Sint32 getCenterOfCircularShutter_y();
|
|
|
|
/** gets circular shutter radius.
|
|
* May only be called if a circular shutter is active.
|
|
* Note: In DICOM, a circular shutter must be rendered
|
|
* with consideration of the image pixel aspect ratio.
|
|
* The radius returned by this method is the number
|
|
* of pixels describing a horizontal line from the
|
|
* center of the circle to its border. See sample figures
|
|
* in NEMA PS3.3:1998.
|
|
* @return the circ shutter radius
|
|
*/
|
|
Sint32 getRadiusOfCircularShutter();
|
|
|
|
/* polygonal shutter Interface */
|
|
|
|
/** gets polygonal shutter number of points.
|
|
* May only be called if a polygonal shutter is active.
|
|
* @return the number of points describing the poly shutter
|
|
*/
|
|
size_t getNumberOfPolyShutterVertices();
|
|
|
|
/** get polygonal shutter point.
|
|
* May only be called if a polygonal shutter is active.
|
|
* Shutter points are relative to the origin 1\1 which is
|
|
* the left upper edge of the image.
|
|
* @param idx the index of the shutter point, must be < getNumberOfPolyShutterVertices()
|
|
* @param x returns the x component of the point
|
|
* @param y returns the y component of the point
|
|
* @return EC_Normal upon success, an error code otherwise.
|
|
*/
|
|
OFCondition getPolyShutterVertex(size_t idx, Sint32& x, Sint32& y);
|
|
|
|
/** sets polygonal display shutter origin.
|
|
* This method creates a
|
|
* polygonal shutter consisting only of a single point.
|
|
* The polygonal display shutter is deactivated after this method.
|
|
* @param x the x component of the shutter origin
|
|
* @param y the x component of the shutter origin
|
|
* @return EC_Normal upon success, an error code otherwise.
|
|
*/
|
|
OFCondition setPolyShutterOrigin(Sint32 x, Sint32 y);
|
|
|
|
/* bitmap shutter Interface
|
|
*
|
|
* see methods:
|
|
* overlayIsBitmapShutter(),
|
|
* overlayIsSuitableAsBitmapShutter(),
|
|
* activateOverlayAsBitmapShutter()
|
|
* in overlay interface definitions.
|
|
*/
|
|
|
|
/* shutter presentation value Interface */
|
|
|
|
/** gets the shutter presentation value. If no shutter display
|
|
* value exists, a default of 0 (black) is set.
|
|
* @return the shutter presentation value as 16bit unsigned P-value
|
|
*/
|
|
Uint16 getShutterPresentationValue();
|
|
|
|
/** sets the shutter presentation value to the given P-value.
|
|
* @param pvalue the shutter presentation value.
|
|
* @return EC_Normal upon success, an error code otherwise.
|
|
*/
|
|
OFCondition setShutterPresentationValue(Uint16 pvalue);
|
|
|
|
/* Presentation State Label, Description and Name Interface */
|
|
|
|
/** returns a label for the presentation state.
|
|
* If no label is available, NULL is returned.
|
|
* @return a pointer to a string or NULL.
|
|
*/
|
|
const char *getPresentationLabel();
|
|
|
|
/** returns a description for the presentation state.
|
|
* If no description is available, NULL is returned.
|
|
* @return a pointer to a string or NULL.
|
|
*/
|
|
const char *getPresentationDescription();
|
|
|
|
/** returns the creator's name for the presentation state.
|
|
* If no name is available, NULL is returned.
|
|
* @return a pointer to a string or NULL.
|
|
*/
|
|
const char *getPresentationCreatorsName();
|
|
|
|
/** sets the presentation state label.
|
|
* The passed string must be a valid DICOM Code String
|
|
* (i.e. max 16 characters, only uppercase and numbers).
|
|
* @param label the new presentation state label
|
|
* @return EC_Normal upon success, an error code otherwise.
|
|
*/
|
|
OFCondition setPresentationLabel(const char *label);
|
|
|
|
/** sets the presentation state description.
|
|
* The passed string must be a valid DICOM Long String
|
|
* (i.e. max 64 characters, no backslash or control chars).
|
|
* @param descr the new presentation state description
|
|
* @return EC_Normal upon success, an error code otherwise.
|
|
*/
|
|
OFCondition setPresentationDescription(const char *descr);
|
|
|
|
/** sets the presentation state creator's name.
|
|
* The passed string must be a valid DICOM Person Name String
|
|
* (see NEMA PS3.5:1998).
|
|
* @param name the new creator's name
|
|
* @return EC_Normal upon success, an error code otherwise.
|
|
*/
|
|
OFCondition setPresentationCreatorsName(const char *name);
|
|
|
|
/* specific character set */
|
|
|
|
/** sets the specific character set for this presentation state.
|
|
* @param charset the new character set for this text object
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setCharset(DVPScharacterSet charset);
|
|
|
|
/** gets the specific character set for this presentation state.
|
|
* @return character set identifier
|
|
*/
|
|
DVPScharacterSet getCharset();
|
|
|
|
/** gets the specific character set string for this presentation state.
|
|
* @return character set if present, NULL otherwise
|
|
*/
|
|
const char *getCharsetString();
|
|
|
|
/* graphic layers */
|
|
|
|
/** sorts the graphic layers according to
|
|
* the graphic layer order. Layers with lower order have lower
|
|
* indices after sorting which means that the layers can be
|
|
* drawn to the screen in ascending index order.
|
|
* Calling this routine may result in a re-numbering
|
|
* of the graphic layer orders in a way that does not affect
|
|
* their sequence.
|
|
*/
|
|
void sortGraphicLayers();
|
|
|
|
/** returns the number of graphic layers.
|
|
* @return number of graphic layers
|
|
*/
|
|
size_t getNumberOfGraphicLayers();
|
|
|
|
/** gets the unique name of the graphic
|
|
* layer with the given index. If no layer for the given
|
|
* index exists, NULL is returned.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @return name of the graphic layer
|
|
*/
|
|
const char *getGraphicLayerName(size_t idx);
|
|
|
|
/** gets the index of the graphic
|
|
* layer with the given unique name. If no matching layer
|
|
* is found, DVPS_IDX_NONE is returned.
|
|
* @param name name of the graphic layer
|
|
* @return index of the graphic layer
|
|
*/
|
|
size_t getGraphicLayerIndex(const char *name);
|
|
|
|
|
|
/** gets a description string for the graphic
|
|
* layer with the given index. If no layer for the given
|
|
* index exists, or if the description is empty, NULL is returned.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @return description of the graphic layer
|
|
*/
|
|
const char *getGraphicLayerDescription(size_t idx);
|
|
|
|
/** checks whether a recommended display value (grayscale, color or both) for the given graphic layer exists.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @return OFTrue if a recommended display value exists
|
|
*/
|
|
OFBool haveGraphicLayerRecommendedDisplayValue(size_t idx);
|
|
|
|
/** gets the recommended grayscale display value for the given graphic layer.
|
|
* If the graphic layer contains an RGB display value but no grayscale
|
|
* display value, the RGB value is implicitly converted to grayscale.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param gray the recommended display value as an unsigned 16-bit P-value
|
|
* is returned in this parameter.
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition getGraphicLayerRecommendedDisplayValueGray(size_t idx, Uint16& gray);
|
|
|
|
/** gets the recommended RGB display value for the given graphic layer.
|
|
* If the graphic layer contains a grayscale display value but no RGB
|
|
* display value, the grayscale value is implicitly converted to RGB.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param r returns the R component of the recommended display value as unsigned 16-bit P-value
|
|
* @param g returns the G component of the recommended display value as unsigned 16-bit P-value
|
|
* @param b returns the B component of the recommended display value as unsigned 16-bit P-value
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition getGraphicLayerRecommendedDisplayValueRGB(size_t idx, Uint16& r, Uint16& g, Uint16& b);
|
|
|
|
/** set graphic layer recommended grayscale display value for the given graphic layer.
|
|
* This method does not affect (set or modify) the recommended RGB display value
|
|
* which should be set separately.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param gray the recommended display value as an unsigned 16-bit P-value
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition setGraphicLayerRecommendedDisplayValueGray(size_t idx, Uint16 gray);
|
|
|
|
/** set graphic layer recommended RGB display value for the given graphic layer.
|
|
* This method does not affect (set or modify) the recommended grayscale display value
|
|
* which should be set separately.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param r the R component of the recommended display value as unsigned 16-bit P-value
|
|
* @param g the G component of the recommended display value as unsigned 16-bit P-value
|
|
* @param b the B component of the recommended display value as unsigned 16-bit P-value
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition setGraphicLayerRecommendedDisplayValueRGB(size_t idx, Uint16 r, Uint16 g, Uint16 b);
|
|
|
|
/** removes recommended display values for the given graphic layer.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param rgb if true, the RGB recommended display value is removed
|
|
* @param monochrome if true the monochrome recommended display value is removed
|
|
*/
|
|
void removeGraphicLayerRecommendedDisplayValue(size_t idx, OFBool rgb, OFBool monochrome);
|
|
|
|
/** assigns a new unique name to the given graphic layer.
|
|
* The new name must be unique, otherwise an error code is returned.
|
|
* Upon success, all references (for graphic annotations, curves and overlays) to the given
|
|
* graphic layer are also renamed so that the presentation state remains
|
|
* consistent.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param name the new name of the graphic layer. Must be a valid DICOM Code String.
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition setGraphicLayerName(size_t idx, const char *name);
|
|
|
|
/** sets a new description to the given graphic layer.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param descr description of the graphic layer. Must be a valid DICOM Long String.
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition setGraphicLayerDescription(size_t idx, const char *descr);
|
|
|
|
/** makes a graphic layer the highest layer for display.
|
|
* This method assigns a graphic layer order higher than all
|
|
* existing graphic layer orders to the given graphic layer,
|
|
* sorts and renumbers the list of graphic layers. Upon success,
|
|
* the given graphic layer is guaranteed to have the new index
|
|
* (getNumberOfGraphicLayers()-1).
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition toFrontGraphicLayer(size_t idx);
|
|
|
|
/** makes a graphic layer the lowest layer for display.
|
|
* This method assigns a graphic layer order lower than all
|
|
* existing graphic layer orders to the given graphic layer,
|
|
* sorts and renumbers the list of graphic layers. Upon success,
|
|
* the given graphic layer is guaranteed to have the new index 0.
|
|
* @param idx index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition toBackGraphicLayer(size_t idx);
|
|
|
|
/** exchanges the layer order of the two graphic layers with
|
|
* the given indices. This method does not sort or renumber
|
|
* the graphic layers.
|
|
* @param idx1 index of the first graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param idx2 index of the second graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition exchangeGraphicLayers(size_t idx1, size_t idx2);
|
|
|
|
/** creates a new graphic layer with the given
|
|
* name and optional description.
|
|
* The new name must be unique, otherwise an error code is returned.
|
|
* The toFrontGraphicLayer() method is implicitly called for the new layer.
|
|
* @param gLayer the name of the graphic layer. Must be a valid DICOM Code String.
|
|
* @param gLayerDescription the optional description of the graphic layer.
|
|
* Must be a valid DICOM Long String.
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition addGraphicLayer(
|
|
const char *gLayer,
|
|
const char *gLayerDescription=NULL);
|
|
|
|
|
|
/* text objects */
|
|
|
|
/* graphic objects */
|
|
|
|
/* curves */
|
|
|
|
/** returns the number of curve activations for the given
|
|
* graphic layer.
|
|
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @return number of curves
|
|
*/
|
|
size_t getNumberOfCurves(size_t layer);
|
|
|
|
/** deletes the curve activation with the given index
|
|
* on the given layer.
|
|
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param idx index of the curve activation, must be < getNumberOfCurves(layer)
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition removeCurve(size_t layer, size_t idx);
|
|
|
|
/** moves the curve activation with the given index on the given
|
|
* layer to a different layer.
|
|
* @param old_layer index of the graphic layer on which the curve is,
|
|
* must be < getNumberOfGraphicLayers()
|
|
* @param idx index of the curve activation, must be < getNumberOfCurves(layer)
|
|
* @param new_layer index of the graphic layer to which the curve is moved,
|
|
* must be < getNumberOfGraphicLayers()
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition moveCurve(size_t old_layer, size_t idx, size_t new_layer);
|
|
|
|
|
|
/* overlays */
|
|
|
|
/** gets the number of overlays that are currently activated
|
|
* on the given graphic layer.
|
|
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @return number of active overlays
|
|
*/
|
|
size_t getNumberOfActiveOverlays(size_t layer);
|
|
|
|
/** gets the repeating group number of the given activated overlay.
|
|
* @param layer index of the graphic layer, must be < getNumberOfGraphicLayers()
|
|
* @param idx index of the overlay, must be < getNumberOfActiveOverlays().
|
|
* @return repeating group number if found, 0 otherwise.
|
|
*/
|
|
Uint16 getActiveOverlayGroup(size_t layer, size_t idx);
|
|
|
|
/** gets the number of overlays which are embedded in the
|
|
* presentation state.
|
|
* @return number of overlays in presentation state
|
|
*/
|
|
size_t getNumberOfOverlaysInPresentationState();
|
|
|
|
/** gets the repeating group number of the given overlay in the presentation state.
|
|
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
|
|
* @return repeating group number if found, 0 otherwise.
|
|
*/
|
|
Uint16 getOverlayInPresentationStateGroup(size_t idx);
|
|
|
|
/** gets the overlay label of the given overlay in the presentation state.
|
|
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
|
|
* @return label string if it exists, NULL otherwise.
|
|
*/
|
|
const char *getOverlayInPresentationStateLabel(size_t idx);
|
|
|
|
/** gets the overlay description of the given overlay in the presentation state.
|
|
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
|
|
* @return description string if it exists, NULL otherwise.
|
|
*/
|
|
const char *getOverlayInPresentationStateDescription(size_t idx);
|
|
|
|
/** gets the index of the activation layer on which the given
|
|
* overlay from the presentation state is activated. If an overlay is used
|
|
* as a bitmap shutter, it is reported as being not activated by this method.
|
|
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
|
|
* @return layer index (which is < getNumberOfGraphicLayers()) if overlay exists
|
|
* and is activated, DVPS_IDX_NONE otherwise.
|
|
*/
|
|
size_t getOverlayInPresentationStateActivationLayer(size_t idx);
|
|
|
|
/** checks if the given overlay in the presentation state
|
|
* is currently activated as a bitmap shutter.
|
|
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
|
|
* @return OFTrue if overlay exists and is activated as bitmap shutter, OFFalse otherwise.
|
|
*/
|
|
OFBool overlayIsBitmapShutter(size_t idx);
|
|
|
|
/** checks whether the given overlay in the presentation state is a ROI
|
|
* (region of interest) overlay.
|
|
* @param idx index of the overlay, must be < getNumberOfOverlaysInPresentationState().
|
|
* @return OFTrue if overlay exists and is ROI, OFFalse otherwise.
|
|
*/
|
|
OFBool overlayInPresentationStateIsROI(size_t idx);
|
|
|
|
/** moves the overlay activation with the given index on the given
|
|
* layer to a different layer.
|
|
* @param old_layer index of the graphic layer on which the curve is,
|
|
* must be < getNumberOfGraphicLayers()
|
|
* @param idx index of the overlay activation, must be < getNumberOfActiveOverlays(layer)
|
|
* @param new_layer index of the graphic layer to which the curve is moved,
|
|
* must be < getNumberOfGraphicLayers()
|
|
* @return EC_Normal upon success, an error code otherwise
|
|
*/
|
|
OFCondition moveOverlay(size_t old_layer, size_t idx, size_t new_layer);
|
|
|
|
/* attached image */
|
|
|
|
/* Display transform */
|
|
|
|
/* print related methods */
|
|
|
|
private:
|
|
|
|
/** private undefined copy constructor
|
|
*/
|
|
DcmPresentationState(const DcmPresentationState& copy);
|
|
|
|
/** private undefined assignment operator
|
|
*/
|
|
DcmPresentationState& operator=(const DcmPresentationState& obj);
|
|
|
|
/** create dummy values for all missing type 1 elements.
|
|
* Called before a presentation state is written to make sure
|
|
* that the presentation state is complete.
|
|
* @param replaceSOPInstanceUID flag indicating whether the
|
|
* SOP Instance UID should be replaced by a new UID.
|
|
* If true, a new UID is always generated. If false, a new
|
|
* UID is generated only if no UID has been assigned before.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition createDummyValues(OFBool replaceSOPInstanceUID);
|
|
|
|
/** removes and deletes all graphic layer for which
|
|
* no matching text, graphic, curve or overlay object exists.
|
|
* Also deletes all graphic annotation sequence items containing
|
|
* no text and no graphic object. Called before writing a presentation state.
|
|
*/
|
|
void cleanupLayers();
|
|
|
|
protected:
|
|
|
|
/** creates a default displayed area selection for the given dataset.
|
|
* Used in createFromImage().
|
|
* @param dset the DICOM dataset containing the image IOD
|
|
* @return EC_Normal upon success, an error code otherwise.
|
|
*/
|
|
OFCondition createDefaultDisplayedArea(DcmItem &dset);
|
|
|
|
/* Module: Patient (M)
|
|
*/
|
|
/// Module=Patient, VR=PN, VM=1, Type 1
|
|
DcmPersonName patientName;
|
|
/// Module=Patient, VR=LO, VM=1, Type 2
|
|
DcmLongString patientID;
|
|
/// Module=Patient, VR=DA, VM=1, Type 2
|
|
DcmDate patientBirthDate;
|
|
/// Module=Patient, VR=CS, VM=1, Type 2
|
|
DcmCodeString patientSex;
|
|
|
|
/* Module: General Study (M)
|
|
*/
|
|
/// Module=General_Study, VR=UI, VM=1, Type 1
|
|
DcmUniqueIdentifier studyInstanceUID;
|
|
/// Module=General_Study, VR=DA, VM=1, Type 2
|
|
DcmDate studyDate;
|
|
/// Module=General_Study, VR=TM, VM=1, Type 2
|
|
DcmTime studyTime;
|
|
/// Module=General_Study, VR=PN, VM=1, Type 2
|
|
DcmPersonName referringPhysicianName;
|
|
/// Module=General_Study, VR=SH, VM=1, Type 2
|
|
DcmShortString studyID;
|
|
/// Module=General_Study, VR=SH, VM=1, Type 2
|
|
DcmShortString accessionNumber;
|
|
|
|
/* Module: General Series (M)
|
|
*/
|
|
/// Module=General_Series, VR=UI, VM=1, Type 1
|
|
DcmUniqueIdentifier seriesInstanceUID;
|
|
/// Module=General_Series, VR=IS, VM=1, Type 2
|
|
DcmIntegerString seriesNumber;
|
|
|
|
/* Module: Presentation Series (M) - specializes general series
|
|
*/
|
|
// modality; see General Series
|
|
|
|
/* Module: General Equipment (M)
|
|
*/
|
|
/// Module=General_Equipment, VR=LO, VM=1, Type 2
|
|
DcmLongString manufacturer;
|
|
|
|
/* Module: Displayed Area (M)
|
|
*/
|
|
/// Module=Displayed_Area, VR=SQ, Card=1-n, Type 1
|
|
DVPSDisplayedArea_PList displayedAreaSelectionList;
|
|
|
|
/* Module: Softcopy Presentation LUT (M)
|
|
* There must never be more that one Presentation LUT for one Presentation State,
|
|
* therefore we need not save a list of LUTs.
|
|
*/
|
|
/// Module=Softcopy_Presentation_LUT, VR=SQ, Card=1, Type 1C
|
|
DVPSPresentationLUT presentationLUT;
|
|
|
|
/* Module: Presentation State (M)
|
|
* specializes mask and display shutter
|
|
*/
|
|
/// Module=Presentation_State, VR=IS, VM=1, Type 1
|
|
DcmIntegerString imageNumber;
|
|
/// Module=Presentation_State, VR=CS, VM=1, Type 1
|
|
DcmCodeString presentationLabel;
|
|
/// Module=Presentation_State, VR=LO, VM=1, Type 2
|
|
DcmLongString presentationDescription;
|
|
/// Module=Presentation_State, VR=DA, VM=1, Type 1
|
|
DcmDate presentationCreationDate;
|
|
/// Module=Presentation_State, VR=TM, VM=1, Type 1
|
|
DcmTime presentationCreationTime;
|
|
/// Module=Presentation_State, VR=PN, VM=1, Type 2
|
|
DcmPersonName presentationCreatorsName;
|
|
/// ReferencedSeriesSequence, Module=Presentation_State
|
|
DVPSReferencedSeries_PList referencedSeriesList;
|
|
// shutterPresentationValue; Type 1c. See Display Shutter module
|
|
|
|
/* Module: SOP Common (M)
|
|
* we don't store the SOP Class UID because it is well known.
|
|
*/
|
|
/// Module=SOP_Common, VR=UI, VM=1, Type 1
|
|
DcmUniqueIdentifier sOPInstanceUID;
|
|
/// Module=SOP_Common, VR=CS, VM=1-n, Type 1C
|
|
DcmCodeString specificCharacterSet;
|
|
/// Module=SOP_Common, VR=DA, VM=1, Type 3
|
|
DcmDate instanceCreationDate;
|
|
/// Module=SOP_Common, VR=TM, VM=1, Type 3
|
|
DcmTime instanceCreationTime;
|
|
/// Module=SOP_Common, VR=UI, VM=1, Type 3
|
|
DcmUniqueIdentifier instanceCreatorUID;
|
|
|
|
/* Module: Display Shutter (C)
|
|
* "required if display shutter to be applied and BitmapDispShutter not present"
|
|
*/
|
|
/// if true, a rectangular shutter is in use
|
|
OFBool useShutterRectangular;
|
|
/// if true, a circular shutter is in use
|
|
OFBool useShutterCircular;
|
|
/// if true, a polygonal shutter is in use
|
|
OFBool useShutterPolygonal;
|
|
/// if true, a bitmap shutter is in use
|
|
OFBool useShutterBitmap;
|
|
/// Module=Display_Shutter, VM=CS, VR=1-3, Type 1
|
|
DcmCodeString shutterShape;
|
|
/// Module=Display_Shutter, VR=IS, VM=1, Type 1C
|
|
DcmIntegerString shutterLeftVerticalEdge;
|
|
/// Module=Display_Shutter, VR=IS, VM=1, Type 1C
|
|
DcmIntegerString shutterRightVerticalEdge;
|
|
/// Module=Display_Shutter, VR=IS, VM=1, Type 1C
|
|
DcmIntegerString shutterUpperHorizontalEdge;
|
|
/// Module=Display_Shutter, VR=IS, VM=1, Type 1C
|
|
DcmIntegerString shutterLowerHorizontalEdge;
|
|
/// Module=Display_Shutter, VR=IS, VM=2, Type 1C
|
|
DcmIntegerString centerOfCircularShutter;
|
|
/// Module=Display_Shutter, VR=IS, VM=1, Type 1C
|
|
DcmIntegerString radiusOfCircularShutter;
|
|
/// Module=Display_Shutter, VR=IS, VM=2-2n, Type 1C
|
|
DcmIntegerString verticesOfThePolygonalShutter;
|
|
/// Module=Display_Shutter, VR=US, VM=1, Type 3 (1c in other modules)
|
|
DcmUnsignedShort shutterPresentationValue;
|
|
|
|
/* Module: Bitmap Display Shutter (C)
|
|
* "required if display shutter to be applied and DispShutter not present"
|
|
*/
|
|
/// Module=Bitmap_Display_Shutter, VR=US, VM=1, Type 1
|
|
DcmUnsignedShort shutterOverlayGroup;
|
|
// shutterPresentationValue already defined in Display Shutter module
|
|
// shutterShape already defined in Display Shutter module
|
|
|
|
/* Module: Overlay Plane (C)
|
|
* "required if overlay to be applied or BitmapDispShutter present"
|
|
*/
|
|
/// Overlay(s), Module=Overlay_Plane
|
|
DVPSOverlay_PList overlayList;
|
|
|
|
/* Module: Overlay/Curve Activation (C)
|
|
* "required if ref. image contains overlay or curve to be displayed"
|
|
*/
|
|
/// Overlay/Curve Activation Layer(s), Module=Overlay_Activation/Curve_Activation
|
|
DVPSOverlayCurveActivationLayer_PList activationLayerList;
|
|
|
|
/* Module: Graphic Annotation (C)
|
|
* "required if graphical annotation to be applied"
|
|
*/
|
|
/// GraphicAnnotationSequence, Module=Graphic_Annotation
|
|
DVPSGraphicAnnotation_PList graphicAnnotationList;
|
|
|
|
/* Module: Spatial Transformation (C)
|
|
* "required if rotation/flipping/magnification to be applied"
|
|
*/
|
|
/// Module=Spatial_Transform, VR=US, VM=1, Type 1
|
|
DcmUnsignedShort imageRotation;
|
|
/// Module=Spatial_Transform, VR=CS, VM=1, Type 1
|
|
DcmCodeString imageHorizontalFlip;
|
|
|
|
/* Module: Graphic Layer (C)
|
|
* "required if graphic annotation, overlays or curves to be applied"
|
|
*/
|
|
/// GraphicLayerSequence, Module=Graphic_Layer
|
|
DVPSGraphicLayer_PList graphicLayerList;
|
|
|
|
/* Module: Modality LUT (C)
|
|
* "required if modality LUT to be applied"
|
|
* There must never be more that one Modality LUT for one Presentation State,
|
|
* therefore we need not save a list of LUTs.
|
|
*/
|
|
/// if true, a modality rescale slope/intercept is set
|
|
OFBool useModalityRescale;
|
|
/// if true, a modality LUT is set
|
|
OFBool useModalityLUT;
|
|
/// Module=Modality_LUT, VR=xs, VM=3, Type 1c
|
|
DcmUnsignedShort modalityLUTDescriptor;
|
|
/// Module=Modality_LUT, VR=LO, VM=1, Type 3
|
|
DcmLongString modalityLUTExplanation;
|
|
/// Module=Modality_LUT, VR=LO, VM=1, Type 3
|
|
DcmLongString modalityLUTType;
|
|
/// Module=Modality_LUT, VR=xs, VM=1-n, Type 1c
|
|
DcmUnsignedShort modalityLUTData;
|
|
/// Module=Modality_LUT, VR=DS, VM=1, Type 1c
|
|
DcmDecimalString rescaleIntercept;
|
|
/// Module=Modality_LUT, VR=DS, VM=1, Type 1c
|
|
DcmDecimalString rescaleSlope;
|
|
/// Module=Modality_LUT, VR=LO, VM=1, Type 1c
|
|
DcmLongString rescaleType;
|
|
|
|
/* Module: Softcopy VOI LUT (C)
|
|
* "required if VOI LUT to be applied"
|
|
*/
|
|
/// Module=Softcopy_VOI_LUT, VR=SQ, Card=1-n, Type 1
|
|
DVPSSoftcopyVOI_PList softcopyVOIList;
|
|
|
|
};
|
|
|
|
#endif
|