384 lines
15 KiB
C++
384 lines
15 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: DVPSImageBoxContent
|
|
*
|
|
*/
|
|
|
|
#ifndef DVPSIB_H
|
|
#define DVPSIB_H
|
|
|
|
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
|
|
#include "dcmtk/dcmpstat/dvpstyp.h" /* for enum types */
|
|
#include "dcmtk/dcmpstat/dpdefine.h"
|
|
#include "dcmtk/dcmdata/dcitem.h"
|
|
#include "dcmtk/ofstd/ofstring.h"
|
|
#include "dcmtk/dcmdata/dctk.h"
|
|
#include "dcmtk/dcmnet/dimse.h"
|
|
|
|
class DVPSPresentationLUT_PList;
|
|
class DVConfiguration;
|
|
|
|
/** the representation of a Image Box Content SQ item for Stored Print
|
|
*/
|
|
|
|
class DCMTK_DCMPSTAT_EXPORT DVPSImageBoxContent
|
|
{
|
|
public:
|
|
/// default constructor
|
|
DVPSImageBoxContent();
|
|
|
|
/// copy constructor
|
|
DVPSImageBoxContent(const DVPSImageBoxContent& copy);
|
|
|
|
/** clone method.
|
|
* @return a pointer to a new DVPSImageBoxContent object containing
|
|
* a copy of this object.
|
|
*/
|
|
DVPSImageBoxContent *clone() { return new DVPSImageBoxContent(*this); }
|
|
|
|
/// destructor
|
|
virtual ~DVPSImageBoxContent();
|
|
|
|
/** 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();
|
|
|
|
/** reads an image box content item from a DICOM dataset.
|
|
* The DICOM elements of the referenced item are copied
|
|
* from the dataset to this object.
|
|
* The completeness of the item (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 item of the ImageBoxContentSequence from which the data is to be read
|
|
* @param presentationLUTList list of presentation LUTs which may be referenced
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition read(DcmItem &dset, DVPSPresentationLUT_PList& presentationLUTList);
|
|
|
|
/** writes the image box managed by this object to a DICOM dataset.
|
|
* Copies of the DICOM element managed by this object are inserted into
|
|
* the DICOM dataset.
|
|
* @param dset the the item of the ImageBoxContentSequence to which the data is written
|
|
* @param writeRequestedImageSize if false, the Requested Image Size attribute is not written,
|
|
* e.g. because it is not supported by the target printer.
|
|
* @param writeReferencedPLUTSQ if false, the Referenced Presentation LUT Sequence is not written,
|
|
* e.g. because a "general" presentation LUT is used instead of those referenced by the image boxes.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition write(DcmItem &dset, OFBool writeRequestedImageSize, OFBool writeReferencedPLUTSQ = OFTrue);
|
|
|
|
/** create default values for all missing type 1 elements.
|
|
* Called before a stored print object is written.
|
|
* @param renumber if true, a new imageBoxPosition values is created
|
|
* @param number new imageBoxPosition to be assigned
|
|
* @param ignoreEmptyImages if true, an empty image box position does not cause an error.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition createDefaultValues(OFBool renumber, unsigned long number, OFBool ignoreEmptyImages);
|
|
|
|
/** returns the referencedSOPClassUID from the ReferencedImageSequence
|
|
* @return referencedSOPClassUID string
|
|
*/
|
|
const char *getSOPClassUID();
|
|
|
|
/** sets the content of this image box object.
|
|
* @param instanceuid SOP instance UID of this image box
|
|
* @param retrieveaetitle retrieve AETITLE of the referenced image
|
|
* @param refstudyuid study instance UID of the referenced image
|
|
* @param refseriesuid series instance UID of the referenced image
|
|
* @param refsopclassuid SOP class UID of the referenced image
|
|
* @param refsopinstanceuid SOP instance UID of the referenced image
|
|
* @param requestedimagesize requested images size for this image
|
|
* @param patientid patient ID for the referenced image
|
|
* @param presentationlutreference referenced SOP instance UID for the referenced Presentation LUT,
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setContent(
|
|
const char *instanceuid,
|
|
const char *retrieveaetitle,
|
|
const char *refstudyuid,
|
|
const char *refseriesuid,
|
|
const char *refsopclassuid,
|
|
const char *refsopinstanceuid,
|
|
const char *requestedimagesize,
|
|
const char *patientid,
|
|
const char *presentationlutreference);
|
|
|
|
/** sets the (optional) requested decimate/crop behaviour for this image box.
|
|
* @param value new enumerated value. The caller is responsible for
|
|
* making sure that the selected printer supports decimate/crop
|
|
* if a non-default value is set.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setRequestedDecimateCropBehaviour(DVPSDecimateCropBehaviour value);
|
|
|
|
/** gets the current requested decimate/crop behaviour setting
|
|
* that is used for this image box.
|
|
* @return requested decimate/crop behaviour
|
|
*/
|
|
DVPSDecimateCropBehaviour getRequestedDecimateCropBehaviour();
|
|
|
|
/** checks whether image box has additional settings
|
|
* that are not default.
|
|
* @return OFTrue if additional settings exist, OFFalse otherwise.
|
|
*/
|
|
OFBool hasAdditionalSettings();
|
|
|
|
/** gets the (optional) referenced Presentation LUT Instance UID.
|
|
* @return UID, may be NULL.
|
|
*/
|
|
const char *getReferencedPresentationLUTInstanceUID();
|
|
|
|
/** gets the polarity.
|
|
* @return polarity, may be NULL.
|
|
*/
|
|
const char *getPolarity();
|
|
|
|
/** gets the requested image size.
|
|
* @return requested image size, may be NULL.
|
|
*/
|
|
const char *getRequestedImageSize();
|
|
|
|
/** gets the (optional) magnification type.
|
|
* @return magnification type, may be NULL.
|
|
*/
|
|
const char *getMagnificationType();
|
|
|
|
/** gets the (optional) smoothing type.
|
|
* @return smoothing type, may be NULL.
|
|
*/
|
|
const char *getSmoothingType();
|
|
|
|
/** gets the (optional) configuration information.
|
|
* @return configuration information, may be NULL.
|
|
*/
|
|
const char *getConfigurationInformation();
|
|
|
|
/** gets the current SOP Instance UID.
|
|
* @return SOP Instance UID, may be NULL.
|
|
*/
|
|
const char *getSOPInstanceUID();
|
|
|
|
/** gets the current image box position, 0 if none is set.
|
|
* @return image box position
|
|
*/
|
|
Uint16 getImageBoxPosition();
|
|
|
|
/** sets the polarity.
|
|
* @param value new attribute value (NORMAL or REVERSE), may be NULL.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setPolarity(const char *value);
|
|
|
|
/** sets the requested image size.
|
|
* @param value new attribute value, may be NULL.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setRequestedImageSize(const char *value);
|
|
|
|
/** sets the (optional) magnification type.
|
|
* @param value new attribute value, may be NULL.
|
|
* The caller is responsible for making sure
|
|
* that the value is valid for the selected printer.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setMagnificationType(const char *value);
|
|
|
|
/** sets the (optional) smoothing type.
|
|
* @param value new attribute value, may be NULL.
|
|
* The caller is responsible for making sure
|
|
* that the value is valid for the selected printer.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setSmoothingType(const char *value);
|
|
|
|
/** sets the (optional) configuration information.
|
|
* @param value new attribute value, may be NULL.
|
|
* The caller is responsible for making sure
|
|
* that the value is valid for the selected printer.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setConfigurationInformation(const char *value);
|
|
|
|
/** sets the SOP instance UID (which is returned by the Print SCP).
|
|
* @param value new attribute value, must not be NULL.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setSOPInstanceUID(const char *value);
|
|
|
|
/** sets magnification type, smoothing type and configuration information back to default.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setDefault();
|
|
|
|
/** returns the image UIDs that are required to look up the referenced image in the database
|
|
* @param studyUID Study UID of the image
|
|
* @param seriesUID series UID of the image
|
|
* @param instanceUID instance UID of the image
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition getImageReference(const char *&studyUID, const char *&seriesUID, const char *&instanceUID);
|
|
|
|
/** writes the attributes managed by this objects that are part of a
|
|
* basic grayscale image box N-SET request into the DICOM dataset.
|
|
* Copies of the DICOM element managed by this object are inserted into
|
|
* the DICOM dataset.
|
|
* @param dset the dataset to which the data is written
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition prepareBasicImageBox(DcmItem &dset);
|
|
|
|
/** checks whether the given Presentation LUT type could be used together
|
|
* with this image box on a Print SCP that requires a matching alignment
|
|
* between a Presentation LUT and the image pixel data.
|
|
* @param align LUT alignment type
|
|
* @return OFTrue if matching, OFFalse otherwise
|
|
*/
|
|
OFBool matchesPresentationLUT(DVPSPrintPresentationLUTAlignment align) const;
|
|
|
|
/** performs a Print SCP Basic Grayscale Image Box N-SET operation.
|
|
* The results of the N-SET operation are stored in the objects passed as
|
|
* rsp and rspDataset.
|
|
* @param cfg config file facility
|
|
* @param cfgname symbolic printer name in config file
|
|
* @param rqDataset N-SET request dataset
|
|
* @param rsp N-SET response message
|
|
* @param rspDataset N-SET response dataset passed back in this parameter
|
|
* @param imageDataset a hardcopy grayscale image (without general study
|
|
* and general series modules which must be added by the caller)
|
|
* containing the image data from the N-SET request is written to
|
|
* this dataset if the method returns successfully.
|
|
* @param align describes the current Presentation LUT. Used if the Print
|
|
* SCP has been configured to enforce a matching of Presentation LUT
|
|
* and pixel data bit depth.
|
|
* @param presentationLUTnegotiated
|
|
* OFTrue if support for the Presentation LUT SOP class
|
|
* has been negotiated at association negotiation
|
|
* @return OFTrue if N-SET operation was successful, OFFalse otherwise.
|
|
*/
|
|
OFBool printSCPSet(
|
|
DVConfiguration& cfg,
|
|
const char *cfgname,
|
|
DcmDataset *rqDataset,
|
|
T_DIMSE_Message& rsp,
|
|
DcmDataset *& rspDataset,
|
|
DcmDataset &imageDataset,
|
|
DVPSPrintPresentationLUTAlignment align,
|
|
OFBool presentationLUTnegotiated);
|
|
|
|
/** assigns new values for study instance UID, series instance UID
|
|
* and retrieve aetitle.
|
|
* @param studyUID new studyUID
|
|
* @param seriesUID new seriesUID
|
|
* @param aetitle new retrieve aetitle, must not be NULL.
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition setUIDsAndAETitle(
|
|
DcmUniqueIdentifier& studyUID,
|
|
DcmUniqueIdentifier& seriesUID,
|
|
const char *aetitle);
|
|
|
|
private:
|
|
/// private undefined assignment operator
|
|
DVPSImageBoxContent& operator=(const DVPSImageBoxContent&);
|
|
|
|
/** writes a Referenced Presentation LUT SQ to the given
|
|
* dataset. Helper function used in the more general write() method.
|
|
* @param dset the dataset to which the data is written
|
|
* @return EC_Normal if successful, an error code otherwise.
|
|
*/
|
|
OFCondition addReferencedPLUTSQ(DcmItem &dset);
|
|
|
|
/** evaluates the contents of the Basic Grayscale Image Sequence during a
|
|
* Print SCP Basic Grayscale Image Box N-SET operation.
|
|
* The results of the N-SET operation are stored in the object passed as rsp.
|
|
* @param cfg config file facility
|
|
* @param cfgname symbolic printer name in config file
|
|
* @param rqDataset first item of the Basic Grayscale Image Sequence
|
|
* @param rsp N-SET response message
|
|
* @param imageDataset a hardcopy grayscale image (without general study
|
|
* and general series modules which must be added by the caller)
|
|
* containing the image data from the N-SET request is written to
|
|
* this dataset if the method returns successfully.
|
|
* @param align describes the current Presentation LUT. Used if the Print
|
|
* SCP has been configured to enforce a matching of Presentation LUT
|
|
* and pixel data bit depth.
|
|
* @param presentationLUTnegotiated
|
|
* OFTrue if support for the Presentation LUT SOP class
|
|
* has been negotiated at association negotiation
|
|
* @return OFTrue if N-SET operation was successful, OFFalse otherwise.
|
|
*/
|
|
OFBool printSCPEvaluateBasicGrayscaleImageSequence(
|
|
DVConfiguration& cfg,
|
|
const char *cfgname,
|
|
DcmItem *rqDataset,
|
|
T_DIMSE_Message& rsp,
|
|
DcmDataset &imageDataset,
|
|
DVPSPrintPresentationLUTAlignment align,
|
|
OFBool presentationLUTnegotiated);
|
|
|
|
/// Module=Image_Box_List, VR=UI, VM=1, Type 1(c)
|
|
DcmUniqueIdentifier sOPInstanceUID;
|
|
/// Module=Image_Box_List, VR=US, VM=1, Type 1
|
|
DcmUnsignedShort imageBoxPosition;
|
|
/// Module=Image_Box_List, VR=CS, VM=1, Type 2
|
|
DcmCodeString polarity;
|
|
/// Module=Image_Box_List, VR=CS, VM=1, Type 3
|
|
DcmCodeString magnificationType;
|
|
/// Module=Image_Box_List, VR=ST, VM=1, Type 3
|
|
DcmShortText configurationInformation;
|
|
/// Module=Image_Box_List, VR=CS, VM=1, Type 3
|
|
DcmCodeString smoothingType;
|
|
/// Module=Image_Box_List, VR=DS, VM=1, Type 3
|
|
DcmDecimalString requestedImageSize;
|
|
/// Module=Image_Box_List (Supplement 38), VR=CS, VM=1, Type 3
|
|
DcmCodeString requestedDecimateCropBehavior;
|
|
|
|
/* the following attributes belong to the ReferencedImageSequence
|
|
* which must have exactly one item here.
|
|
*/
|
|
/// Module=Image_Box_List, VR=AE, VM=1-n, Type 1
|
|
DcmApplicationEntity retrieveAETitle;
|
|
/// Module=Image_Box_List, VR=UI, VM=1, Type 1
|
|
DcmUniqueIdentifier referencedSOPClassUID;
|
|
/// Module=Image_Box_List, VR=UI, VM=1, Type 1
|
|
DcmUniqueIdentifier referencedSOPInstanceUID;
|
|
/// Module=Image_Box_List, VR=UI, VM=1, Type 1
|
|
DcmUniqueIdentifier studyInstanceUID;
|
|
/// Module=Image_Box_List, VR=UI, VM=1, Type 1
|
|
DcmUniqueIdentifier seriesInstanceUID;
|
|
/// Module=Image_Box_List, VR=IS, VM=1, Type 1c
|
|
DcmIntegerString referencedFrameNumber;
|
|
/// Module=Image_Box_List, VR=LO, VM=1, Type 2
|
|
DcmLongString patientID;
|
|
|
|
// we do not support the ReferencedImageOverlayBoxSequence which is retired in Supplement 35 anyway.
|
|
|
|
// the ReferencedPresentationLUTSequence is only created/read on the fly
|
|
DcmUniqueIdentifier referencedPresentationLUTInstanceUID;
|
|
|
|
/// describes whether the image depth is 8 bit or 12 bit.
|
|
DVPSImageDepth imageDepth;
|
|
|
|
};
|
|
|
|
#endif
|