VinnoExtendedDataGenerator.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using Vinno.vCloud.Common.Vid2;
  2. using Dicom;
  3. namespace VidProcessService.Utilities
  4. {
  5. public class VinnoExtendedDataGenerator
  6. {
  7. private readonly static List<VidTag> _uploadVidTags = new List<VidTag>()
  8. {
  9. new VidTag("0028","0030"),
  10. new VidTag("0018","602E"),
  11. new VidTag("0018","602C"),
  12. new VidTag("0018","6024"),
  13. new VidTag("0018","6026"),
  14. };
  15. public static VidExtendedData Generate(DicomDataset dataSet)
  16. {
  17. var dic = new Dictionary<VidTag, IVidValue>();
  18. var vidExtendedData = new VidExtendedData(dic);
  19. AddDicomItem(dic, dataSet);
  20. return vidExtendedData;
  21. }
  22. private static void AddDicomItem(Dictionary<VidTag, IVidValue> dic, DicomDataset dataSet)
  23. {
  24. foreach (var item in dataSet)
  25. {
  26. var vidTag = new VidTag($"{item.Tag.Group:x4}".ToUpper(), $"{item.Tag.Element:x4}".ToUpper());
  27. if (item is DicomStringElement element)
  28. {
  29. AddVidValue(dic, vidTag, new VidStringValueElement(element.Get<string>()));
  30. continue;
  31. }
  32. if (item is DicomValueElement<ushort> uShortElement)
  33. {
  34. AddVidValue(dic, vidTag, new VidUshortValueElement(uShortElement.Get<ushort>()));
  35. continue;
  36. }
  37. if (item is DicomValueElement<short> shortElement)
  38. {
  39. AddVidValue(dic, vidTag, new VidShortValueElement(shortElement.Get<short>()));
  40. continue;
  41. }
  42. if (item is DicomValueElement<long> longElement)
  43. {
  44. AddVidValue(dic, vidTag, new VidLongValueElement(longElement.Get<long>()));
  45. continue;
  46. }
  47. if (item is DicomValueElement<ulong> uLongElement)
  48. {
  49. AddVidValue(dic, vidTag, new VidUlongValueElement(uLongElement.Get<ulong>()));
  50. continue;
  51. }
  52. if (item is DicomValueElement<double> doubleElement)
  53. {
  54. AddVidValue(dic, vidTag, new VidDoubleValueElement(doubleElement.Get<double>()));
  55. continue;
  56. }
  57. if (item is DicomValueElement<int> intElement)
  58. {
  59. AddVidValue(dic, vidTag, new VidIntegerValueElement(intElement.Get<int>()));
  60. continue;
  61. }
  62. if (item is DicomValueElement<uint> uIntElement)
  63. {
  64. AddVidValue(dic, vidTag, new VidUintValueElement(uIntElement.Get<uint>()));
  65. continue;
  66. }
  67. if (item is DicomValueElement<byte> byteElement)
  68. {
  69. AddVidValue(dic, vidTag, new VidByteValueElement(byteElement.Get<byte>()));
  70. continue;
  71. }
  72. if (item is DicomSequence doDicomSequence)
  73. {
  74. foreach (var dataSetItem in doDicomSequence.Items)
  75. {
  76. AddDicomItem(dic, dataSetItem);
  77. }
  78. }
  79. }
  80. }
  81. private static void AddVidValue(Dictionary<VidTag, IVidValue> dic, VidTag vidTag, IVidValue vidValue)
  82. {
  83. var vidTagkey = dic.Keys.FirstOrDefault(v => v.Group == vidTag.Group && v.Element == vidTag.Element);
  84. if (vidTagkey == null)
  85. {
  86. if (_uploadVidTags?.Count > 0)
  87. {
  88. var uploadVidTag = _uploadVidTags.FirstOrDefault(v => v.Group == vidTag.Group && v.Element == vidTag.Element);
  89. if (uploadVidTag != null)
  90. {
  91. dic.Add(vidTag, vidValue);
  92. }
  93. }
  94. else
  95. {
  96. dic.Add(vidTag, vidValue);
  97. }
  98. }
  99. }
  100. }
  101. }