379 lines
16 KiB
C++
379 lines
16 KiB
C++
/*
|
|
*
|
|
* Copyright (C) 2015-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: dcmfg
|
|
*
|
|
* Author: Michael Onken
|
|
*
|
|
* Purpose: Class for managing the Frame Content Functional Group
|
|
*
|
|
*/
|
|
|
|
#ifndef FGFRACON_H
|
|
#define FGFRACON_H
|
|
|
|
#include "dcmtk/config/osconfig.h"
|
|
#include "dcmtk/ofstd/ofvector.h"
|
|
#include "dcmtk/ofstd/ofstring.h"
|
|
#include "dcmtk/dcmdata/dctk.h"
|
|
#include "dcmtk/dcmfg/fgbase.h"
|
|
|
|
/** Class representing the "Frame Content" Functional Group Macro. Can only be
|
|
* used as per-frame functional group (never shared).
|
|
*/
|
|
class DCMTK_DCMFG_EXPORT FGFrameContent : public FGBase
|
|
{
|
|
public:
|
|
|
|
/** Constructor, creates empty functional group
|
|
*/
|
|
FGFrameContent();
|
|
|
|
/** Virtual destructor
|
|
*/
|
|
virtual ~FGFrameContent();
|
|
|
|
/** Returns a deep copy of this object
|
|
* @return Deep copy of this object
|
|
*/
|
|
virtual FGBase *clone() const;
|
|
|
|
/** Returns shared functional group type (always "per-frame")
|
|
* @return The functional group type (DcmFGTypes::EFGS_ONLYPERFRAME)
|
|
*/
|
|
virtual DcmFGTypes::E_FGSharedType getSharedType() const {return DcmFGTypes::EFGS_ONLYPERFRAME;}
|
|
|
|
/** Clear all data
|
|
*/
|
|
virtual void clearData();
|
|
|
|
/** Check whether the current content of this group is consistent and complete
|
|
* @return EC_Normal, if no errors are found, error otherwise
|
|
*/
|
|
virtual OFCondition check() const;
|
|
|
|
/** Read Frame Content Sequence from given item
|
|
* @param item The item to read from
|
|
* @return EC_Normal if reading was successful, error otherwise
|
|
*/
|
|
virtual OFCondition read(DcmItem& item);
|
|
|
|
/** Writes the content of this class into Frame Content Sequence
|
|
* (newly cerated) into given item
|
|
* @param item The item to write to
|
|
* @return EC_Normal if writing was successful, error otherwise
|
|
*/
|
|
virtual OFCondition write(DcmItem& item);
|
|
|
|
/** Comparison operator that compares the normalized value of this object
|
|
* with a given object of the same type, i.e.\ the elements within both
|
|
* functional groups (this and rhs parameter) are compared by value!
|
|
* Both objects (this and rhs) need to have the same type (i.e.\ both
|
|
* FGUnknown) to be comparable. This function is used in order
|
|
* to decide whether a functional group already exists, or is new. This
|
|
* is used in particular to find out whether a given functional group
|
|
* can be shared (i.e.\ the same information already exists as shared
|
|
* functional group) or is different from the same shared group. In that
|
|
* case the shared functional group must be distributed into per-frame
|
|
* functional groups, instead. The exact implementation for implementing
|
|
* the comparison is not relevant. However, it must be a comparison
|
|
* by value.
|
|
* @param rhs the right hand side of the comparison
|
|
* @return 0 if the object values are equal.
|
|
* -1 if either the value of the first component that does not match
|
|
* is lower in the this object, or all compared components match
|
|
* but this component is shorter. Also returned if this type and
|
|
* rhs type (DcmFGTypes::E_FGType) do not match.
|
|
* 1 if either the value of the first component that does not match
|
|
* is greater in this object, or all compared components match
|
|
* but this component is longer.
|
|
*/
|
|
virtual int compare(const FGBase& rhs) const;
|
|
|
|
// --- get() functionality ---
|
|
|
|
/** Get Frame Acquisition Number
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getFrameAcquisitionNumber(Uint16& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get Frame Reference Date Time
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getFrameReferenceDateTime(OFString& value,
|
|
const signed long pos = 0);
|
|
/** Get Frame Acquisition Date Time
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getFrameAcquisitionDateTime(OFString& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get Frame Acquisition Duration
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getFrameAcquisitionDuration(Float64& value,
|
|
const unsigned long pos = 0);
|
|
|
|
/** Get Cardiac Cycle Position
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getCardiacCyclePosition(OFString& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get Respiratory Cycle Position
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getRespiratoryCyclePosition(OFString& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get Dimension Index Value
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getDimensionIndexValues(Uint32& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get Temporal Position Index
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getTemporalPositionIndex(Uint32& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get Stack ID
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getStackID(OFString& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get In-Stack Position Number
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getInStackPositionNumber(Uint32& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get Frame Comments
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getFrameComments(OFString& value,
|
|
const signed long pos = 0);
|
|
|
|
/** Get Frame Label
|
|
* @param value Reference to variable that should hold the result
|
|
* @param pos Position of the value inside the DICOM element. If 0, the first
|
|
* value is returned. If the no value at the given position exists,
|
|
* an error is returned.
|
|
* @return EC_Normal, if value could be returned, error otherwise
|
|
*/
|
|
virtual OFCondition getFrameLabel(OFString& value,
|
|
const signed long pos = 0);
|
|
|
|
// --- set() functionality ---
|
|
|
|
/** Set Frame Acquisition Number
|
|
* @param value Value that should be set
|
|
* @param checkValue Check 'value'. Not evaluated (here for consistency
|
|
* with other setter functions).
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setFrameAcquisitionNumber(const Uint16& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Frame Frame Reference Date Time
|
|
* @param value Value that should be set
|
|
* @param checkValue If OFTrue, basic checks are performed whether the value is
|
|
* valid for this attribute
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setFrameReferenceDateTime(const OFString& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Frame Acquisition Date Time
|
|
* @param value Value that should be set
|
|
* @param checkValue If OFTrue, basic checks are performed whether the value is
|
|
* valid for this attribute
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setFrameAcquisitionDateTime(const OFString& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Frame Acquisition Duration
|
|
* @param value Value that should be set
|
|
* @param checkValue If OFTrue, basic checks are performed whether the value is
|
|
* valid for this attribute
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setFrameAcquisitionDuration(const Float64& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Cardiac Cycle Position
|
|
* @param value Value that should be set
|
|
* @param checkValue If OFTrue, basic checks are performed whether the value is
|
|
* valid for this attribute
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setCardiacCyclePosition(const OFString& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Respiratory Cycle Position
|
|
* @param value Value that should be set
|
|
* @param checkValue If OFTrue, basic checks are performed whether the value is
|
|
* valid for this attribute
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setRespiratoryCyclePosition(const OFString& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set one of the Dimension Index Values
|
|
* @param value Value that should be set (lowest index starts with 1)
|
|
* @param pos The position of the value that should be set (lowest index
|
|
* starts with 0), i.e.\ select the 1st, 2nd, ..nth dimension
|
|
* @param checkValue Check 'value'. Not evaluated (here for consistency
|
|
* with other setter functions).
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setDimensionIndexValues(const Uint32& value,
|
|
const unsigned int pos,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Temporal Position Index
|
|
* @param value Value that should be set
|
|
* @param checkValue Check 'value'. Not evaluated (here for consistency
|
|
* with other setter functions).
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setTemporalPositionIndex(const Uint32& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Stack ID
|
|
* @param value Value that should be set
|
|
* @param checkValue If OFTrue, basic checks are performed whether the value is
|
|
* valid for this attribute
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setStackID(const OFString& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set In-Stack Position Number
|
|
* @param value Value that should be set
|
|
* @param checkValue Check 'value'. Not evaluated (here for consistency
|
|
* with other setter functions).
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setInStackPositionNumber(const Uint32& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Frame Comments
|
|
* @param value Value that should be set
|
|
* @param checkValue Check 'value'. Not evaluated (here for consistency
|
|
* with other setter functions).
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setFrameComments(const OFString& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
/** Set Frame Label
|
|
* @param value Value that should be set
|
|
* @param checkValue If OFTrue, basic checks are performed whether the value is
|
|
* valid for this attribute
|
|
* @return EC_Normal, if value was set, error otherwise
|
|
*/
|
|
virtual OFCondition setFrameLabel(const OFString& value,
|
|
const OFBool checkValue = OFTrue);
|
|
|
|
private:
|
|
|
|
/* Content of Frame Content Macro */
|
|
|
|
/// Frame Acquisition Number (US, VM 1, Required type 3)
|
|
DcmUnsignedShort m_FrameAcquisitonNumber;
|
|
|
|
/// Frame Reference DateTime (DT, 1, 1C)
|
|
DcmDateTime m_FrameReferenceDateTime;
|
|
|
|
/// Frame Acquisition DateTime (DT, 1, 1C)
|
|
DcmDateTime m_FrameAcquisitionDateTime;
|
|
|
|
/// Frame Acquisition Duration (FD, 1, 1C)
|
|
DcmFloatingPointDouble m_FrameAcquisitionDuration;
|
|
|
|
/// Cardiac Cycle Position (CS, 1, 3)
|
|
DcmCodeString m_CardiacCyclePosition;
|
|
|
|
/// Respiratory Cycle Position (CS, 1, 3)
|
|
DcmCodeString m_RespiratoryCyclePosition;
|
|
|
|
/// Dimension Index Values (UL, 1-n, 1C)
|
|
DcmUnsignedLong m_DimensionIndexValues;
|
|
|
|
/// Temporal Position Index (UL, 1, 1C)
|
|
DcmUnsignedLong m_TemporalPositionIndex;
|
|
|
|
/// Stack ID (SH, 1, 1C)
|
|
DcmShortString m_StackID;
|
|
|
|
/// In-Stack Position Number (UL, 1, 1C)
|
|
DcmUnsignedLong m_InStackPositionNumber;
|
|
|
|
/// Frame Comments (LT, 1, 3)
|
|
DcmLongText m_FrameComments;
|
|
|
|
/// Frame Label (LO, 1, 3)
|
|
DcmLongString m_FrameLabel;
|
|
};
|
|
|
|
#endif // FGFRACON_H
|