# HG changeset patch # User Sebastien Jodogne # Date 1764078683 -3600 # Node ID 08fdc3215398fcced9df91556e9bcf5e6f934dbc # Parent 10784233f0e0fe18491b255113178105b3228500 added missing file diff -r 10784233f0e0 -r 08fdc3215398 OrthancFramework/Sources/DicomParsing/Internals/SopInstanceUidFixer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancFramework/Sources/DicomParsing/Internals/SopInstanceUidFixer.cpp Tue Nov 25 14:51:23 2025 +0100 @@ -0,0 +1,85 @@ +/** + * 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-2025 Orthanc Team SRL, Belgium + * Copyright (C) 2021-2025 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 + * . + **/ + + +#include "../../PrecompiledHeaders.h" +#include "SopInstanceUidFixer.h" + +#include "../../OrthancException.h" + +#include + + +namespace Orthanc +{ + namespace Internals + { + SopInstanceUidFixer::SopInstanceUidFixer(TranscodingSopInstanceUidMode mode, + IDicomTranscoder::DicomImage& source) : + fix_(mode == TranscodingSopInstanceUidMode_Preserve) + { + if (fix_) + { + sopInstanceUid_ = IDicomTranscoder::GetSopInstanceUid(source.GetParsed()); + } + } + + + SopInstanceUidFixer::SopInstanceUidFixer(TranscodingSopInstanceUidMode mode, + DcmFileFormat& source) : + fix_(mode == TranscodingSopInstanceUidMode_Preserve) + { + if (fix_) + { + sopInstanceUid_ = IDicomTranscoder::GetSopInstanceUid(source); + } + } + + + void SopInstanceUidFixer::Apply(DcmFileFormat& target) const + { + if (fix_) + { + if (target.getDataset() == NULL || + !target.getDataset()->putAndInsertString( + DCM_SOPInstanceUID, sopInstanceUid_.c_str(), OFTrue /* replace */).good()) + { + throw OrthancException(ErrorCode_InternalError); + } + } + } + + + void SopInstanceUidFixer::Apply(IDicomTranscoder::DicomImage& target) const + { + if (fix_) + { + std::unique_ptr dicom(target.ReleaseParsed()); + Apply(*dicom); + + target.Clear(); + target.AcquireParsed(dicom.release()); + } + } + } +} diff -r 10784233f0e0 -r 08fdc3215398 OrthancFramework/Sources/DicomParsing/Internals/SopInstanceUidFixer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancFramework/Sources/DicomParsing/Internals/SopInstanceUidFixer.h Tue Nov 25 14:51:23 2025 +0100 @@ -0,0 +1,60 @@ +/** + * 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-2025 Orthanc Team SRL, Belgium + * Copyright (C) 2021-2025 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 + * . + **/ + + +#pragma once + +#include "../../Enumerations.h" +#include "../IDicomTranscoder.h" + +#if ORTHANC_ENABLE_DCMTK != 1 +# error The macro ORTHANC_ENABLE_DCMTK must be set to 1 +#endif + +#include +#include + + +namespace Orthanc +{ + namespace Internals + { + class SopInstanceUidFixer : public boost::noncopyable + { + private: + bool fix_; + std::string sopInstanceUid_; + + public: + SopInstanceUidFixer(TranscodingSopInstanceUidMode mode, + IDicomTranscoder::DicomImage& source); + + SopInstanceUidFixer(TranscodingSopInstanceUidMode mode, + DcmFileFormat& source); + + void Apply(IDicomTranscoder::DicomImage& target) const; + + void Apply(DcmFileFormat& target) const; + }; + } +}