Mercurial > hg > orthanc
view OrthancFramework/Resources/Graveyard/FromDcmtkBridge.cpp @ 5790:a3d283f61304 find-refactoring
improved handling of DicomSequences in parent
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Wed, 18 Sep 2024 09:34:52 +0200 |
parents | f7adfb22e20e |
children |
line wrap: on
line source
/** * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium * Copyright (C) 2017-2023 Osimis S.A., Belgium * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/>. **/ DcmElement* FromDcmtkBridge::CreateElementForTag(const DicomTag& tag) { DcmTag key(tag.GetGroup(), tag.GetElement()); if (tag.IsPrivate()) { // This raises BitBucket issue 140 (Modifying private tags with // REST API changes VR from LO to UN) // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=140 LOG(WARNING) << "You are using DCMTK < 3.6.1: All the private tags " "are considered as having a binary value representation"; return new DcmOtherByteOtherWord(key); } else if (IsBinaryTag(key)) { return new DcmOtherByteOtherWord(key); } switch (key.getEVR()) { // http://support.dcmtk.org/docs/dcvr_8h-source.html /** * Binary types, handled above **/ #if DCMTK_VERSION_NUMBER >= 361 case EVR_OD: #endif #if DCMTK_VERSION_NUMBER >= 362 case EVR_OL: #endif case EVR_OB: // other byte case EVR_OF: // other float case EVR_OW: // other word case EVR_UN: // unknown value representation case EVR_ox: // OB or OW depending on context throw OrthancException(ErrorCode_InternalError); /** * String types. * http://support.dcmtk.org/docs/classDcmByteString.html **/ case EVR_AS: // age string return new DcmAgeString(key); case EVR_AE: // application entity title return new DcmApplicationEntity(key); case EVR_CS: // code string return new DcmCodeString(key); case EVR_DA: // date string return new DcmDate(key); case EVR_DT: // date time string return new DcmDateTime(key); case EVR_DS: // decimal string return new DcmDecimalString(key); case EVR_IS: // integer string return new DcmIntegerString(key); case EVR_TM: // time string return new DcmTime(key); case EVR_UI: // unique identifier return new DcmUniqueIdentifier(key); case EVR_ST: // short text return new DcmShortText(key); case EVR_LO: // long string return new DcmLongString(key); case EVR_LT: // long text return new DcmLongText(key); case EVR_UT: // unlimited text return new DcmUnlimitedText(key); case EVR_SH: // short string return new DcmShortString(key); case EVR_PN: // person name return new DcmPersonName(key); #if DCMTK_VERSION_NUMBER >= 361 case EVR_UC: // unlimited characters return new DcmUnlimitedCharacters(key); #endif #if DCMTK_VERSION_NUMBER >= 361 case EVR_UR: // URI/URL return new DcmUniversalResourceIdentifierOrLocator(key); #endif /** * Numerical types **/ case EVR_SL: // signed long return new DcmSignedLong(key); case EVR_SS: // signed short return new DcmSignedShort(key); case EVR_UL: // unsigned long return new DcmUnsignedLong(key); case EVR_US: // unsigned short return new DcmUnsignedShort(key); case EVR_FL: // float single-precision return new DcmFloatingPointSingle(key); case EVR_FD: // float double-precision return new DcmFloatingPointDouble(key); /** * Sequence types, should never occur at this point. **/ case EVR_SQ: // sequence of items throw OrthancException(ErrorCode_ParameterOutOfRange); /** * TODO **/ case EVR_AT: // attribute tag throw OrthancException(ErrorCode_NotImplemented); /** * Internal to DCMTK. **/ case EVR_xs: // SS or US depending on context case EVR_lt: // US, SS or OW depending on context, used for LUT Data (thus the name) case EVR_na: // na="not applicable", for data which has no VR case EVR_up: // up="unsigned pointer", used internally for DICOMDIR suppor case EVR_item: // used internally for items case EVR_metainfo: // used internally for meta info datasets case EVR_dataset: // used internally for datasets case EVR_fileFormat: // used internally for DICOM files case EVR_dicomDir: // used internally for DICOMDIR objects case EVR_dirRecord: // used internally for DICOMDIR records case EVR_pixelSQ: // used internally for pixel sequences in a compressed image case EVR_pixelItem: // used internally for pixel items in a compressed image case EVR_UNKNOWN: // used internally for elements with unknown VR (encoded with 4-byte length field in explicit VR) case EVR_PixelData: // used internally for uncompressed pixeld data case EVR_OverlayData: // used internally for overlay data case EVR_UNKNOWN2B: // used internally for elements with unknown VR with 2-byte length field in explicit VR default: break; } throw OrthancException(ErrorCode_InternalError); }