Mercurial > hg > orthanc
diff Core/DicomParsing/FromDcmtkBridge.cpp @ 2409:e4045b3c9772
ignore-length argument if retrieving DICOM tags
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 27 Sep 2017 17:36:13 +0200 |
parents | 7284093111b0 |
children | 14537babc1e6 |
line wrap: on
line diff
--- a/Core/DicomParsing/FromDcmtkBridge.cpp Mon Sep 25 14:50:13 2017 +0200 +++ b/Core/DicomParsing/FromDcmtkBridge.cpp Wed Sep 27 17:36:13 2017 +0200 @@ -395,6 +395,8 @@ unsigned int maxStringLength, Encoding defaultEncoding) { + std::set<DicomTag> ignoreTagLength; + Encoding encoding = DetectEncoding(dataset, defaultEncoding); target.Clear(); @@ -405,7 +407,8 @@ { target.SetValue(element->getTag().getGTag(), element->getTag().getETag(), - ConvertLeafElement(*element, DicomToJsonFlags_Default, maxStringLength, encoding)); + ConvertLeafElement(*element, DicomToJsonFlags_Default, + maxStringLength, encoding, ignoreTagLength)); } } } @@ -426,7 +429,8 @@ DicomValue* FromDcmtkBridge::ConvertLeafElement(DcmElement& element, DicomToJsonFlags flags, unsigned int maxStringLength, - Encoding encoding) + Encoding encoding, + const std::set<DicomTag>& ignoreTagLength) { if (!element.isLeaf()) { @@ -448,7 +452,8 @@ std::string utf8 = Toolbox::ConvertToUtf8(s, encoding); if (maxStringLength != 0 && - utf8.size() > maxStringLength) + utf8.size() > maxStringLength && + ignoreTagLength.find(GetTag(element)) == ignoreTagLength.end()) { return new DicomValue; // Too long, create a NULL value } @@ -486,7 +491,8 @@ return new DicomValue("", false); // Empty string } else if (maxStringLength != 0 && - element.getLength() > maxStringLength) + element.getLength() > maxStringLength && + ignoreTagLength.find(GetTag(element)) == ignoreTagLength.end()) { return new DicomValue; // Too long, create a NULL value } @@ -499,7 +505,7 @@ } } - + try { // http://support.dcmtk.org/docs/dcvr_8h-source.html @@ -814,7 +820,8 @@ DicomToJsonFormat format, DicomToJsonFlags flags, unsigned int maxStringLength, - Encoding encoding) + Encoding encoding, + const std::set<DicomTag>& ignoreTagLength) { if (parent.type() == Json::nullValue) { @@ -827,8 +834,17 @@ if (element.isLeaf()) { // The "0" below lets "LeafValueToJson()" take care of "TooLong" values - std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement(element, flags, 0, encoding)); - LeafValueToJson(target, *v, format, flags, maxStringLength); + std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement + (element, flags, 0, encoding, ignoreTagLength)); + + if (ignoreTagLength.find(GetTag(element)) == ignoreTagLength.end()) + { + LeafValueToJson(target, *v, format, flags, maxStringLength); + } + else + { + LeafValueToJson(target, *v, format, flags, 0); + } } else { @@ -844,7 +860,7 @@ { DcmItem* child = sequence.getItem(i); Json::Value& v = target.append(Json::objectValue); - DatasetToJson(v, *child, format, flags, maxStringLength, encoding); + DatasetToJson(v, *child, format, flags, maxStringLength, encoding, ignoreTagLength); } } } @@ -855,7 +871,8 @@ DicomToJsonFormat format, DicomToJsonFlags flags, unsigned int maxStringLength, - Encoding encoding) + Encoding encoding, + const std::set<DicomTag>& ignoreTagLength) { assert(parent.type() == Json::objectValue); @@ -900,7 +917,8 @@ } } - FromDcmtkBridge::ElementToJson(parent, *element, format, flags, maxStringLength, encoding); + FromDcmtkBridge::ElementToJson(parent, *element, format, flags, + maxStringLength, encoding, ignoreTagLength); } } @@ -910,12 +928,13 @@ DicomToJsonFormat format, DicomToJsonFlags flags, unsigned int maxStringLength, - Encoding defaultEncoding) + Encoding defaultEncoding, + const std::set<DicomTag>& ignoreTagLength) { Encoding encoding = DetectEncoding(dataset, defaultEncoding); target = Json::objectValue; - DatasetToJson(target, dataset, format, flags, maxStringLength, encoding); + DatasetToJson(target, dataset, format, flags, maxStringLength, encoding, ignoreTagLength); } @@ -925,8 +944,9 @@ DicomToJsonFlags flags, unsigned int maxStringLength) { + std::set<DicomTag> ignoreTagLength; target = Json::objectValue; - DatasetToJson(target, dataset, format, flags, maxStringLength, Encoding_Ascii); + DatasetToJson(target, dataset, format, flags, maxStringLength, Encoding_Ascii, ignoreTagLength); } @@ -2036,13 +2056,15 @@ void FromDcmtkBridge::ExtractDicomAsJson(Json::Value& target, - DcmDataset& dataset) + DcmDataset& dataset, + const std::set<DicomTag>& ignoreTagLength) { ExtractDicomAsJson(target, dataset, DicomToJsonFormat_Full, DicomToJsonFlags_Default, ORTHANC_MAXIMUM_TAG_LENGTH, - GetDefaultDicomEncoding()); + GetDefaultDicomEncoding(), + ignoreTagLength); }