Commit 53293b76a35f96c1806b4110485cc5b62fe3f493

Authored by Paulo Henrique Junqueira Amorim
1 parent e7bf8988

FIX: Fixed encoding problem

invesalius/gui/import_network_panel.py
... ... @@ -389,12 +389,11 @@ class FindPanel(wx.Panel):
389 389  
390 390 sizer_txt_find = wx.BoxSizer(wx.HORIZONTAL)
391 391 sizer_txt_find.Add((5, 0), 0, wx.EXPAND|wx.HORIZONTAL)
392   - find_txt = wx.TextCtrl(self, -1,size=(225, -1))
  392 + self.find_txt = wx.TextCtrl(self, -1,size=(225, -1))
393 393  
394 394 self.btn_find = wx.Button(self, -1, _("Search"))
395   -
396 395  
397   - sizer_txt_find.Add(find_txt)
  396 + sizer_txt_find.Add(self.find_txt)
398 397 sizer_txt_find.Add(self.btn_find)
399 398  
400 399 self.sizer.Add((0, 5), 0, wx.EXPAND|wx.HORIZONTAL)
... ... @@ -415,6 +414,7 @@ class FindPanel(wx.Panel):
415 414 self._bind_gui_evt()
416 415  
417 416 def __bind_evt(self):
  417 + ps.Publisher().subscribe(self.SetHostsList, 'Set FindPanel hosts list')
418 418 #ps.Publisher().subscribe(self.ShowDicomSeries, 'Load dicom preview')
419 419 #ps.Publisher().subscribe(self.SetDicomSeries, 'Load group into import panel')
420 420 #ps.Publisher().subscribe(self.SetPatientSeries, 'Load patient into import panel')
... ... @@ -426,9 +426,26 @@ class FindPanel(wx.Panel):
426 426 self.Bind(wx.EVT_BUTTON, self.OnButtonFind, self.btn_find)
427 427  
428 428 def OnButtonFind(self, evt):
429   - print "clicked...."
  429 + hosts = self.GetHostList()
  430 +
  431 + for key in hosts.keys():
  432 + if key != 0:
  433 + dn = dcm_net.DicomNet()
  434 + dn.SetHost(self.hosts[key][1])
  435 + dn.SetPort(self.hosts[key][2])
  436 + dn.SetAETitleCall(self.hosts[key][3])
  437 + dn.SetAETitle(self.hosts[0][3])
  438 + dn.SetSearchWord(self.find_txt.GetValue())
  439 + print dn.RunCFind()
430 440  
431 441  
  442 + def SetHostsList(self, evt_pub):
  443 + self.hosts = evt_pub.data
  444 +
  445 + def GetHostList(self):
  446 + ps.Publisher().sendMessage('Get NodesPanel host list')
  447 + return self.hosts
  448 +
432 449 class HostFindPanel(wx.Panel):
433 450 def __init__(self, parent):
434 451 wx.Panel.__init__(self, parent, -1)
... ... @@ -525,6 +542,7 @@ class NodesPanel(wx.Panel):
525 542 self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.EndEdition, self.tree_node)
526 543  
527 544 ps.Publisher().subscribe(self.CheckItemDict, "Check item dict")
  545 + ps.Publisher().subscribe(self.GetHostsList, "Get NodesPanel host list")
528 546 #ps.Publisher().subscribe(self.UnCheckItemDict, "Uncheck item dict")
529 547  
530 548  
... ... @@ -583,6 +601,10 @@ class NodesPanel(wx.Panel):
583 601 self.SetAutoLayout(1)
584 602 self.sizer = sizer
585 603  
  604 + def GetHostsList(self, pub_evt):
  605 + ps.Publisher().sendMessage('Set FindPanel hosts list', self.hosts)
  606 +
  607 +
586 608 def EndEdition(self, evt):
587 609 index = evt.m_itemIndex
588 610 item = evt.m_item
... ... @@ -637,9 +659,6 @@ class NodesPanel(wx.Panel):
637 659 else:
638 660 self.tree_node.SetStringItem(key, 4, _("error"))
639 661  
640   -
641   -
642   -
643 662 def RightButton(self,evt):
644 663 event.Skip()
645 664  
... ... @@ -651,7 +670,6 @@ class NodesPanel(wx.Panel):
651 670 if evt.m_itemIndex != 0:
652 671 self.tree_node.SetDeselected(evt.m_itemIndex)
653 672  
654   -
655 673 def CheckItemDict(self, evt_pub):
656 674 index, flag = evt_pub.data
657 675 if index != 0:
... ...
invesalius/net/dicom.py
... ... @@ -7,6 +7,11 @@ class DicomNet:
7 7 self.port = ''
8 8 self.aetitle_call = ''
9 9 self.aetitle = ''
  10 + self.search_word = ''
  11 + self.search_type = 'patient'
  12 +
  13 + def __call__(self):
  14 + return self
10 15  
11 16 def SetHost(self, address):
12 17 self.address = address
... ... @@ -20,7 +25,93 @@ class DicomNet:
20 25 def SetAETitle(self, ae_title):
21 26 self.aetitle = ae_title
22 27  
  28 + def SetSearchWord(self, word):
  29 + self.search_word = word
  30 +
  31 + def SetSearchType(self, stype):
  32 + self.search_type = stype
  33 +
  34 + def GetValueFromDICOM(self, ret, tag):
  35 + value = str(ret.GetDataElement(gdcm.Tag(tag[0],\
  36 + tag[1])).GetValue())
  37 + return value
  38 +
  39 +
23 40 def RunCEcho(self):
24 41 cnf = gdcm.CompositeNetworkFunctions()
25 42 return cnf.CEcho(self.address, int(self.port),\
26 43 self.aetitle, self.aetitle_call)
  44 +
  45 + def RunCFind(self):
  46 +
  47 + tags = [(0x0010, 0x0010), (0x0010, 0x1010), (0x0010,0x0040), (0x0008,0x1030),\
  48 + (0x0008,0x0060), (0x0008,0x0022), (0x0008,0x0080), (0x0010,0x0030),\
  49 + (0x0008,0x0050), (0x0008,0x0090)]
  50 +
  51 +
  52 + ds = gdcm.DataSet()
  53 +
  54 + for tag in tags:
  55 +
  56 + bit_size = len(self.search_word) + 1
  57 +
  58 + tg = gdcm.Tag(tag[0], tag[1])
  59 +
  60 + de = gdcm.DataElement(tg)
  61 +
  62 + if self.search_type == 'patient':
  63 + de.SetByteValue(str(self.search_word + '*'), gdcm.VL(bit_size))
  64 + else:
  65 + de.SetByteValue('*', gdcm.VL(1))
  66 +
  67 + ds.Insert(de)
  68 +
  69 +
  70 + cnf = gdcm.CompositeNetworkFunctions()
  71 + theQuery = cnf.ConstructQuery(gdcm.ePatientRootType, gdcm.eImageOrFrame, ds)
  72 + ret = gdcm.DataSetArrayType()
  73 +
  74 + cnf.CFind(self.address, int(self.port), theQuery, ret, self.aetitle,\
  75 + self.aetitle_call)
  76 +
  77 + patients = {}
  78 +
  79 + exist_images = False
  80 + c = 0
  81 + for i in range(0,ret.size()):
  82 + patient_id = str(ret[i].GetDataElement(gdcm.Tag(0x0010, 0x0020)).GetValue())
  83 + serie_id = str(ret[i].GetDataElement(gdcm.Tag(0x0020, 0x000e)).GetValue())
  84 +
  85 + if not(patient_id in patients.keys()):
  86 + patients[patient_id] = {}
  87 +
  88 +
  89 + if not(serie_id in patients[patient_id]):
  90 +
  91 + rt = ret[i]
  92 +
  93 +
  94 + name = self.GetValueFromDICOM(rt, ((0x0010, 0x0010)))
  95 + age = self.GetValueFromDICOM(rt, ((0x0010, 0x1010)))
  96 + gender = self.GetValueFromDICOM(rt, ((0x0010),(0x0040)))
  97 + study_description = self.GetValueFromDICOM(rt, ((0x0008),(0x1030)))
  98 + modality = self.GetValueFromDICOM(rt, ((0x0008),(0x0060)))
  99 + date_acquisition = self.GetValueFromDICOM(rt, ((0x0008),(0x0022)))
  100 + institution = self.GetValueFromDICOM(rt, ((0x0008),(0x0080)))
  101 + date_of_birth = self.GetValueFromDICOM(rt, ((0x0010),(0x0030)))
  102 + acession_number = self.GetValueFromDICOM(rt, ((0x0008),(0x0050)))
  103 + ref_physician = self.GetValueFromDICOM(rt, ((0x0008),(0x0090)))
  104 +
  105 + patients[patient_id][serie_id] = {'name':name, 'age':age, 'gender':gender,\
  106 + 'study_description':study_description,\
  107 + 'modality':modality, \
  108 + 'date_acquision':date_acquisition,\
  109 + 'institution':institution,\
  110 + 'date_of_birth':date_of_birth,\
  111 + 'acession_number':acession_number,\
  112 + 'ref_physician':ref_physician}
  113 +
  114 + patients[patient_id][serie_id]['n_images'] = 1
  115 + else:
  116 + patients[patient_id][serie_id]['n_images'] += 1
  117 +
... ...
invesalius/reader/dicom_reader.py
... ... @@ -125,7 +125,10 @@ class LoadDicom:
125 125 encoding = "ISO_IR 100"
126 126 else:
127 127 encoding = const.DICOM_ENCODING_TO_PYTHON[encoding_value]
128   -
  128 + else:
  129 + encoding = "ISO_IR 100"
  130 +
  131 +
129 132 # Iterate through the Header
130 133 iterator = header.GetDES().begin()
131 134 while (not iterator.equal(header.GetDES().end())):
... ...