DYT/Tool/3rdParty_x64/include/dcmtk/dcmiod/iodcommn.h
2024-11-22 23:19:31 +08:00

226 lines
7.4 KiB
C++

/*
*
* Copyright (C) 2015, 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: dcmiod
*
* Author: Michael Onken
*
* Purpose: Class representing IODs by exposing common DICOM module attributes
*
*/
#ifndef IODCOMMN_H
#define IODCOMMN_H
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmiod/iodrules.h"
#include "dcmtk/dcmiod/modpatient.h"
#include "dcmtk/dcmiod/modpatientstudy.h"
#include "dcmtk/dcmiod/modgeneralstudy.h"
#include "dcmtk/dcmiod/modequipment.h"
#include "dcmtk/dcmiod/modgeneralseries.h"
#include "dcmtk/dcmiod/modfor.h"
#include "dcmtk/dcmiod/modsopcommon.h"
#include "dcmtk/dcmiod/modcommoninstanceref.h"
/** Interface class to those modules and data attributes are common for many
* DICOM IODs. The class offers a dedicated API for getting and settings those
* attributes. Modules included: Patient Module, General Study Module, General
* Equipment Module, General Series Module, Frame of Reference Module, SOP
* Common Module.
*/
class DCMTK_DCMIOD_EXPORT DcmIODCommon
{
public:
/** Constructor
*/
DcmIODCommon();
/** Get rules handled by this IOD
* @return The rules
*/
OFshared_ptr<IODRules> getRules();
/** Get item managed by this IOD
* @return The item
*/
OFshared_ptr<DcmItem> getData();
/** Get Patient Module
* @return Reference to Patient Module
*/
IODPatientModule& getPatient();
/** Get Patient Study Module
* @return Reference to Patient Study Module
*/
IODPatientStudyModule& getPatientStudy();
/** Get General Study Module
* @return Reference to General Study Module
*/
IODGeneralStudyModule& getStudy();
/** Get General Equipment Module
* @return Reference to General Equipment Module
*/
IODGeneralEquipmentModule& getEquipment();
/** Get Series Module
* @return Reference to General Series Module
*/
IODGeneralSeriesModule& getSeries();
/** Get Frame of Reference Module
* @return Reference to Frame of Reference Module
*/
IODFoRModule& getFrameOfReference();
/** Get SOP Common Module
* @return Reference to SOP Common Module
*/
IODSOPCommonModule& getSOPCommon();
/** Get Common Instance Reference Module
* @return Common Instance Reference Module
*/
IODCommonInstanceReferenceModule& getCommonInstanceReference();
/** Destructor
*/
virtual ~DcmIODCommon();
/** Clear (removes) all attributes handled by the modules of this IOD.
* IOD Rules are not reset.
*/
virtual void clearData();
/** Create new study.
* After generating a new Study Instance UID the method createNewSeries() is
* called, i.e.\ also a new Series Instance UID and SOP instance UID are
* generated. This is a requirement of the DICOM standard. All other
* study-related attributes from the study-level modules managed by this class
* are cleared (as well as Series and Instance level attributes).
* @param clearEquipment If OFTrue (default), also the equipment information is
* cleared (General Equipment Module))
*/
virtual void createNewStudy(const OFBool clearEquipment = OFTrue);
/** Create a new series.
* After generating a new Series Instance UID the method
* createNewSOPInstance() is called, i.e.\ Series-related attributes managed
* by the series-level modules of this class are cleared, as well as
* instance-level data.
* @param clearFoR If OFTrue (default), also the frame of reference is
* cleared (FoR Module)
*/
virtual void createNewSeries(const OFBool clearFoR = OFTrue);
/** Create a new SOP instance.
* Generate a new SOP Instance UID and set the Instance Creation Date/Time
* to the current date and time.
* It could be used explicitly from the calling application if a new UID
* should be created (this is the case if the Study Instance UID or Series
* Instance UID has changed as well as any other attribute on the instance
* level, e.g.\ image pixel data). Also clears other instance related data.
*/
virtual void createNewSOPInstance();
/** Make sure that the IOD contains a SOP Instance, Series Instance and Study
* Instance UID. They are created if empty. Invalid UIDs are corrected if
* desired.
*/
virtual void ensureInstanceUIDs(const OFBool correctInvalid = OFFalse);
/** Read data into this class.
* Please note that the current content is also deleted if the reading
* process fails. If the log stream is set and valid the reason for any
* error might be obtained from the error/warning output. The reading
* process will ignore missing attributes or values as possible in order
* to read as as much as possible.
* @param dataset DICOM dataset from which the document should be read
* @return EC_Normal if successful, an error code otherwise
*/
virtual OFCondition read(DcmItem &dataset);
/** Import common module attributes from dataset but only read Patient, Study,
* Series and/or Frame of Reference level portions. The current content
* is not deleted before reading. If the log stream is set and valid the
* reason for any error might be obtained from the error/warning output.
* @param dataset Reference to DICOM dataset from which the document
* should be read
* @param readPatient Read Patient-level information if OFTrue
* @param readStudy Read Study-level information if OFTrue, including
* equipment module
* @param readFoR Read Frame of Reference information if OFTrue. See
* also readSeries parameter.
* @param readSeries Read Series-level information if OFTrue, always
* includes Frame of Reference, i.e.\ readFoR is
* considered to be OFTrue
* @return EC_Normal if successful, an error code otherwise
*/
virtual OFCondition import(DcmItem& dataset,
OFBool readPatient,
OFBool readStudy,
OFBool readFoR = OFFalse,
OFBool readSeries = OFFalse);
/** Write the attributes managed by this class to DICOM dataset.
* @param dataset Reference to DICOM dataset to which the current document
* should be written. The dataset is not cleared
* before writing to it.
* @return EC_Normal if successful, an error code otherwise
*/
virtual OFCondition write(DcmItem &dataset);
private:
/// The data hold by this class (shared with modules below)
OFshared_ptr<DcmItem> m_Item;
/// The rules hold by this class (shared with modules below)
OFshared_ptr<IODRules> m_Rules;
/// Patient Module
IODPatientModule m_Patient;
/// Patient Study Module
IODPatientStudyModule m_PatientStudy;
/// General Study Module
IODGeneralStudyModule m_Study;
/// General Equipment Module
IODGeneralEquipmentModule m_Equipment;
/// General Series Module
IODGeneralSeriesModule m_Series;
/// Frame of Reference Module
IODFoRModule m_FrameOfReference;
/// SOP Common Module
IODSOPCommonModule m_SOPCommon;
/// Common Instance Reference Module
IODCommonInstanceReferenceModule m_CommonInstanceReferenceModule;
/// Collects all modules of this class for convenience (iteration)
OFVector<IODModule*> m_Modules;
};
#endif // IODCOMMN_H