222 lines
8.6 KiB
C
222 lines
8.6 KiB
C
|
/*
|
||
|
*
|
||
|
* Copyright (C) 2000-2016, 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: dcmsr
|
||
|
*
|
||
|
* Author: Joerg Riesmeier
|
||
|
*
|
||
|
* Purpose:
|
||
|
* classes: DSRWaveformReferenceValue
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef DSRWAVVL_H
|
||
|
#define DSRWAVVL_H
|
||
|
|
||
|
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
|
||
|
|
||
|
#include "dcmtk/dcmsr/dsrtypes.h"
|
||
|
#include "dcmtk/dcmsr/dsrcomvl.h"
|
||
|
#include "dcmtk/dcmsr/dsrwavch.h"
|
||
|
|
||
|
|
||
|
/*---------------------*
|
||
|
* class declaration *
|
||
|
*---------------------*/
|
||
|
|
||
|
/** Class for waveform reference values
|
||
|
*/
|
||
|
class DCMTK_DCMSR_EXPORT DSRWaveformReferenceValue
|
||
|
: public DSRCompositeReferenceValue
|
||
|
{
|
||
|
// allow access to getValuePtr()
|
||
|
friend class DSRContentItem;
|
||
|
|
||
|
public:
|
||
|
|
||
|
/** default constructor
|
||
|
*/
|
||
|
DSRWaveformReferenceValue();
|
||
|
|
||
|
/** constructor
|
||
|
** @param sopClassUID referenced SOP class UID of the waveform object.
|
||
|
* (VR=UI, mandatory)
|
||
|
* @param sopInstanceUID referenced SOP instance UID of the waveform object.
|
||
|
* (VR=UI, mandatory)
|
||
|
* @param check if enabled, check 'sopClassUID' and 'sopInstanceUID' for
|
||
|
* validity before setting them. See checkXXX() for details.
|
||
|
* Empty values are never accepted.
|
||
|
*/
|
||
|
DSRWaveformReferenceValue(const OFString &sopClassUID,
|
||
|
const OFString &sopInstanceUID,
|
||
|
const OFBool check = OFTrue);
|
||
|
|
||
|
/** copy constructor
|
||
|
** @param referenceValue waveform reference value to be copied (not checked !)
|
||
|
*/
|
||
|
DSRWaveformReferenceValue(const DSRWaveformReferenceValue &referenceValue);
|
||
|
|
||
|
/** destructor
|
||
|
*/
|
||
|
virtual ~DSRWaveformReferenceValue();
|
||
|
|
||
|
/** assignment operator
|
||
|
** @param referenceValue waveform reference value to be copied (not checked !)
|
||
|
** @return reference to this waveform reference value after 'referenceValue' has been copied
|
||
|
*/
|
||
|
DSRWaveformReferenceValue &operator=(const DSRWaveformReferenceValue &referenceValue);
|
||
|
|
||
|
/** clear all internal variables.
|
||
|
* Since an empty waveform reference is invalid the reference becomes invalid afterwards.
|
||
|
*/
|
||
|
virtual void clear();
|
||
|
|
||
|
/** check whether the content is short.
|
||
|
* This method is used to check whether the rendered output of this content item can be
|
||
|
* expanded inline or not (used for renderHTML()).
|
||
|
** @param flags flag used to customize the output (see DSRTypes::HF_xxx)
|
||
|
** @return OFTrue if the content is short, OFFalse otherwise
|
||
|
*/
|
||
|
virtual OFBool isShort(const size_t flags) const;
|
||
|
|
||
|
/** print waveform reference.
|
||
|
* The output of a typical waveform reference value looks like this:
|
||
|
* (HemodynamicWaveformStorage,"1.2.3")
|
||
|
* If the SOP class UID is unknown, the UID is printed instead of the related name.
|
||
|
** @param stream output stream to which the image reference value should be printed
|
||
|
* @param flags flag used to customize the output (see DSRTypes::PF_xxx)
|
||
|
** @return status, EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
virtual OFCondition print(STD_NAMESPACE ostream &stream,
|
||
|
const size_t flags) const;
|
||
|
|
||
|
/** read waveform reference from XML document
|
||
|
** @param doc document containing the XML file content
|
||
|
* @param cursor cursor pointing to the starting node
|
||
|
* @param flags flag used to customize the reading process (see DSRTypes::XF_xxx)
|
||
|
** @return status, EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
virtual OFCondition readXML(const DSRXMLDocument &doc,
|
||
|
DSRXMLCursor cursor,
|
||
|
const size_t flags);
|
||
|
|
||
|
/** write waveform reference in XML format
|
||
|
** @param stream output stream to which the XML document is written
|
||
|
* @param flags flag used to customize the output (see DSRTypes::XF_xxx)
|
||
|
** @return status, EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
virtual OFCondition writeXML(STD_NAMESPACE ostream &stream,
|
||
|
const size_t flags) const;
|
||
|
|
||
|
/** render waveform reference value in HTML/XHTML format
|
||
|
** @param docStream output stream to which the main HTML/XHTML document is written
|
||
|
* @param annexStream output stream to which the HTML/XHTML document annex is written
|
||
|
* @param annexNumber reference to the variable where the current annex number is stored.
|
||
|
* Value is increased automatically by 1 after a new entry has been added.
|
||
|
* @param flags flag used to customize the output (see DSRTypes::HF_xxx)
|
||
|
** @return status, EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
virtual OFCondition renderHTML(STD_NAMESPACE ostream &docStream,
|
||
|
STD_NAMESPACE ostream &annexStream,
|
||
|
size_t &annexNumber,
|
||
|
const size_t flags) const;
|
||
|
|
||
|
/** get reference to waveform reference value
|
||
|
** @return reference to waveform reference value
|
||
|
*/
|
||
|
inline const DSRWaveformReferenceValue &getValue() const
|
||
|
{
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
/** get copy of waveform reference value
|
||
|
** @param referenceValue reference to variable in which the value should be stored
|
||
|
** @return status, EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
OFCondition getValue(DSRWaveformReferenceValue &referenceValue) const;
|
||
|
|
||
|
/** set waveform reference value.
|
||
|
* Before setting the reference, it is usually checked. If the value is invalid, the
|
||
|
* current value is not replaced and remains unchanged.
|
||
|
** @param referenceValue value to be set
|
||
|
* @param check if enabled, check value for validity before setting it.
|
||
|
* See checkXXX() for details. Empty values are only accepted
|
||
|
* for non-mandatory attributes.
|
||
|
** @return status, EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
OFCondition setValue(const DSRWaveformReferenceValue &referenceValue,
|
||
|
const OFBool check = OFTrue);
|
||
|
|
||
|
/** get reference to list of referenced waveform channels
|
||
|
** @return reference to channel list
|
||
|
*/
|
||
|
inline DSRWaveformChannelList &getChannelList()
|
||
|
{
|
||
|
return ChannelList;
|
||
|
}
|
||
|
|
||
|
/** check whether the waveform reference applies to a specific channel.
|
||
|
* The waveform reference applies to a channel if the list of referenced waveform
|
||
|
* channels is empty or the group/channel pair is part of the list.
|
||
|
** @param multiplexGroupNumber multiplex group number of the referenced channel
|
||
|
* @param channelNumber channel number of the referenced channel
|
||
|
** @return OFTrue if reference applies to the specified channel, OFFalse otherwise
|
||
|
*/
|
||
|
OFBool appliesToChannel(const Uint16 multiplexGroupNumber,
|
||
|
const Uint16 channelNumber) const;
|
||
|
|
||
|
|
||
|
protected:
|
||
|
|
||
|
/** get pointer to waveform reference value
|
||
|
** @return pointer to waveform reference value (never NULL)
|
||
|
*/
|
||
|
inline DSRWaveformReferenceValue *getValuePtr()
|
||
|
{
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
/** read waveform reference value from dataset
|
||
|
** @param dataset DICOM dataset from which the value should be read
|
||
|
* @param flags flag used to customize the reading process (see DSRTypes::RF_xxx)
|
||
|
** @return status, EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
virtual OFCondition readItem(DcmItem &dataset,
|
||
|
const size_t flags);
|
||
|
|
||
|
/** write waveform reference value to dataset
|
||
|
** @param dataset DICOM dataset to which the value should be written
|
||
|
** @return status, EC_Normal if successful, an error code otherwise
|
||
|
*/
|
||
|
virtual OFCondition writeItem(DcmItem &dataset) const;
|
||
|
|
||
|
/** check the specified SOP class UID for validity.
|
||
|
* This method further specializes the checks performed in the base class
|
||
|
* DSRCompositeReferenceValue. All waveform SOP classes that are defined
|
||
|
* in DICOM PS 3.6-2015c are allowed.
|
||
|
** @param sopClassUID SOP class UID to be checked
|
||
|
** @return status, EC_Normal if value is valid, an error code otherwise
|
||
|
*/
|
||
|
virtual OFCondition checkSOPClassUID(const OFString &sopClassUID) const;
|
||
|
|
||
|
|
||
|
private:
|
||
|
|
||
|
/// list of referenced waveform channels (associated DICOM VR=US, VM=2-2n, type 1C)
|
||
|
DSRWaveformChannelList ChannelList;
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif
|