2011年9月17日土曜日

DICOMDIR から TreeNode へ

  1. string path;
  2. if (Path.GetFileName(path).Equals("DICOMDIR"))
  3. retern;
  4. TreeView treeView = new TreeView();
  5. TreeNode treeNode = new TreeNode();
  6. List<string[]> imageList = new List<string[]>();
  7. treeNode.Nodes.Clear();
  8. treeView.Nodes.Clear();
  9. //DicomDir dicomDir = new DicomDir(path);
  10. //ReadDicomDir(dicomDir);
  11. Stream stream = null;
  12. DcmParser parser = null;
  13. Dataset ds = null;
  14. try
  15. {
  16. stream = new BufferedStream(new FileStream(path, FileMode.Open, FileAccess.Read));
  17. parser = new org.dicomcs.data.DcmParser(stream);
  18. org.dicomcs.data.FileFormat format = parser.DetectFileFormat();
  19. if (format != null)
  20. {
  21. ds = new org.dicomcs.data.Dataset();
  22. parser.DcmHandler = ds.DcmHandler;
  23. parser.ParseDcmFile(format);
  24. TreeNode nodePatient = new TreeNode();
  25. TreeNode nodeStudy = new TreeNode();
  26. TreeNode nodeSeries = new TreeNode();
  27. TreeNode nodeStudat = new TreeNode();
  28. //
  29. int tmpStudat = 0;
  30. int patBirdat = 0;
  31. string patName = string.Empty;
  32. //
  33. DcmObject doRoot = (DcmObject)ds;
  34. IEnumerator enuRoot = doRoot.GetEnumerator();
  35. int count = 0;
  36. while (enuRoot.MoveNext())
  37. {
  38. DcmElement elRoot = (DcmElement)enuRoot.Current;
  39. if (elRoot.HasItems())
  40. {
  41. for (int i = 0; i < elRoot.vm(); i++)
  42. {
  43. DcmObject dcmObj = (DcmObject)elRoot.GetItem(i);
  44. IEnumerator enu = dcmObj.GetEnumerator();
  45. while (enu.MoveNext())
  46. {
  47. DcmElement el = (DcmElement)enu.Current;
  48. if (el.tag() == DcmTags.DirectoryRecordType)
  49. {
  50. string rs = el.GetString(Encoding.Unicode);
  51. if (rs == "PATIENT")
  52. {
  53. PatientTable pt = new PatientTable();
  54. if (dcmObj.Contains(Tags.PatientBirthDate))
  55. patBirdat = Convert.ToInt32(dcmObj.GetDate(DcmTags.PatientBirthDate).ToString("yyyyMMdd"));
  56. if (dcmObj.Contains(Tags.PatientName))
  57. patName = dcmObj.GetString(DcmTags.PatientName);
  58. }
  59. else if (rs == "STUDY")
  60. {
  61. if (dcmObj.Contains(DcmTags.StudyDate))
  62. {
  63. int studat = Convert.ToInt32(dcmObj.GetDate(Tags.StudyDate).ToString("yyyyMMdd"));
  64. string stuinsuid = string.Empty;
  65. string studes = string.Empty;
  66. if (dcmObj.Contains(DcmTags.StudyInstanceUID))
  67. stuinsuid = dcmObj.GetString(DcmTags.StudyInstanceUID);
  68. if (dcmObj.Contains(DcmTags.StudyDescription))
  69. studes = dcmObj.GetString(DcmTags.StudyInstanceUID);
  70. if (studat != tmpStudat)
  71. {
  72. nodeStudat = new TreeNode(studat.ToString("####/##/##"));
  73. nodeStudat.Tag = studat;
  74. treeViewStudy.Nodes.Add(nodeStudat);
  75. tmpStudat = studat;
  76. }
  77. nodeStudy = new TreeNode("");
  78. nodeStudat.Nodes.Add(nodeStudy);
  79. }
  80. }
  81. else if (rs == "SERIES")
  82. {
  83. imageList = new List<string[]>();
  84. string serinsuid = string.Empty;
  85. string sernum = string.Empty; ;
  86. string numserrelima = string.Empty;
  87. string serdes = string.Empty;
  88. string bodparexa = string.Empty;
  89. string modality = string.Empty;
  90. if (dcmObj.Contains(DcmTags.SeriesInstanceUID))
  91. serinsuid = dcmObj.GetString(DcmTags.SeriesInstanceUID);
  92. if (dcmObj.Contains(DcmTags.SeriesNumber))
  93. sernum = dcmObj.GetString(DcmTags.SeriesNumber);
  94. if (dcmObj.Contains(DcmTags.SeriesDescription))
  95. serdes = dcmObj.GetString(DcmTags.SeriesDescription);
  96. if (dcmObj.Contains(DcmTags.Modality))
  97. modality = dcmObj.GetString(DcmTags.Modality);
  98. nodeSeries = new TreeNode(modality + "." + sernum);
  99. nodeStudy.Nodes.Add(nodeSeries);
  100. if (nodeStudy.Text == string.Empty)
  101. nodeStudy.Text = modality;
  102. nodeSeries.Tag=imageList; //Add (refFile and uid)List
  103. }
  104. else if (rs == "IMAGE")
  105. {
  106. string refFileID = string.Empty;
  107. string uid = string.Empty;
  108. if (dcmObj.Contains(DcmTags.RefFileID))
  109. refFileID = dcmObj.GetString(DcmTags.RefFileID);
  110. if (dcmObj.Contains(DcmTags.RefSOPInstanceUIDInFile))
  111. uid = dcmObj.GetString(DcmTags.RefSOPInstanceUIDInFile);
  112. string[] ss = new string[2];
  113. ss[0] = refFileID;
  114. ss[1] = uid;
  115. imageList.Add(ss);
  116. }
  117. }
  118. }
  119. }
  120. }
  121. }