# HG changeset patch # User Sebastien Jodogne # Date 1355853661 -3600 # Node ID c76a35a85c691b078f9859f8d20b0c1dedc37899 # Parent 23813408113616ccf24a73c8283a4cbe6924849f ready for anonymization diff -r 238134081136 -r c76a35a85c69 Core/DicomFormat/DicomTag.h --- a/Core/DicomFormat/DicomTag.h Tue Dec 18 17:29:30 2012 +0100 +++ b/Core/DicomFormat/DicomTag.h Tue Dec 18 19:01:01 2012 +0100 @@ -100,4 +100,9 @@ static const DicomTag DICOM_TAG_IMAGES_IN_ACQUISITION(0x0020, 0x1002); static const DicomTag DICOM_TAG_PATIENT_NAME(0x0010, 0x0010); + + // The following is used for "modify" operations + static const DicomTag DICOM_TAG_SOP_CLASS_UID(0x0008, 0x0016); + static const DicomTag DICOM_TAG_MEDIA_STORAGE_SOP_CLASS_UID(0x0002, 0x0002); + static const DicomTag DICOM_TAG_MEDIA_STORAGE_SOP_INSTANCE_UID(0x0002, 0x0003); } diff -r 238134081136 -r c76a35a85c69 OrthancServer/FromDcmtkBridge.cpp --- a/OrthancServer/FromDcmtkBridge.cpp Tue Dec 18 17:29:30 2012 +0100 +++ b/OrthancServer/FromDcmtkBridge.cpp Tue Dec 18 19:01:01 2012 +0100 @@ -616,6 +616,21 @@ { FillElementWithString(*element, tag, value); } + + + /** + * dcmodify will automatically correct 'Media Storage SOP Class + * UID' and 'Media Storage SOP Instance UID' in the metaheader, if + * you make changes to the related tags in the dataset ('SOP Class + * UID' and 'SOP Instance UID') via insert or modify mode + * options. You can disable this behaviour by using the -nmu + * option. + **/ + if (tag == DICOM_TAG_SOP_CLASS_UID) + ReplaceInternal(DICOM_TAG_MEDIA_STORAGE_SOP_CLASS_UID, value, true); + + if (tag == DICOM_TAG_SOP_INSTANCE_UID) + ReplaceInternal(DICOM_TAG_MEDIA_STORAGE_SOP_INSTANCE_UID, value, true); } diff -r 238134081136 -r c76a35a85c69 OrthancServer/OrthancRestApi.cpp --- a/OrthancServer/OrthancRestApi.cpp Tue Dec 18 17:29:30 2012 +0100 +++ b/OrthancServer/OrthancRestApi.cpp Tue Dec 18 19:01:01 2012 +0100 @@ -882,8 +882,16 @@ std::auto_ptr modified(dicom.Clone()); + std::string studyUid = FromDcmtkBridge::GenerateUniqueIdentifier(DicomRootLevel_Study); + std::string seriesUid = FromDcmtkBridge::GenerateUniqueIdentifier(DicomRootLevel_Series); + std::string instanceUid = FromDcmtkBridge::GenerateUniqueIdentifier(DicomRootLevel_Instance); + + modified->Replace(DICOM_TAG_SOP_INSTANCE_UID, instanceUid); + modified->Replace(DICOM_TAG_SERIES_INSTANCE_UID, seriesUid); + modified->Replace(DICOM_TAG_STUDY_INSTANCE_UID, studyUid); + modified->InsertOrReplace(DicomTag(0x0010,0x0010), "0.42"); - modified->Remove(DicomTag(0x0010,0x0020)); + //modified->Remove(DicomTag(0x0010,0x0020)); /*modified->Insert(DicomTag(0x0018,0x9082), "0.42"); modified->Replace(DicomTag(0x0010,0x0010), "Hello");*/ modified->Answer(call.GetOutput());