Commit dc3edb075e04adabec5f322ea57c2c61028bce8f

Authored by Thiago Franco de Moraes
1 parent b7bb24bd

Improvements

invesalius/data/measures.py
@@ -98,6 +98,7 @@ class MeasurementManager(object): @@ -98,6 +98,7 @@ class MeasurementManager(object):
98 Publisher.subscribe(self._load_measurements, "Load measurement dict") 98 Publisher.subscribe(self._load_measurements, "Load measurement dict")
99 Publisher.subscribe(self._rm_incomplete_measurements, 99 Publisher.subscribe(self._rm_incomplete_measurements,
100 "Remove incomplete measurements") 100 "Remove incomplete measurements")
  101 + Publisher.subscribe(self._change_measure_point_pos, 'Change measurement point position')
101 102
102 def _load_measurements(self, pubsub_evt): 103 def _load_measurements(self, pubsub_evt):
103 try: 104 try:
@@ -246,6 +247,40 @@ class MeasurementManager(object): @@ -246,6 +247,40 @@ class MeasurementManager(object):
246 value)) 247 value))
247 self.current = None 248 self.current = None
248 249
  250 + def _change_measure_point_pos(self, pubsub_evt):
  251 + index, npoint, pos = pubsub_evt.data
  252 + print index, npoint, pos
  253 + m, mr = self.measures[index]
  254 + x, y, z = pos
  255 + if npoint == 0:
  256 + mr.SetPoint1(x, y, z)
  257 + m.points[0] = x, y, z
  258 + elif npoint == 1:
  259 + mr.SetPoint2(x, y, z)
  260 + m.points[1] = x, y, z
  261 + elif npoint == 2:
  262 + mr.SetPoint3(x, y, z)
  263 + m.points[2] = x, y, z
  264 +
  265 + m.value = mr.GetValue()
  266 +
  267 + name = m.name
  268 + colour = m.colour
  269 + m.value = mr.GetValue()
  270 + type_ = TYPE[m.type]
  271 + location = LOCATION[m.location]
  272 +
  273 + if m.type == const.LINEAR:
  274 + value = u"%.2f mm"% m.value
  275 + else:
  276 + value = u"%.2f°"% m.value
  277 +
  278 + Publisher.sendMessage('Update measurement info in GUI',
  279 + (index, name, colour,
  280 + location,
  281 + type_,
  282 + value))
  283 +
249 def _change_name(self, pubsub_evt): 284 def _change_name(self, pubsub_evt):
250 index, new_name = pubsub_evt.data 285 index, new_name = pubsub_evt.data
251 self.measures[index].name = new_name 286 self.measures[index].name = new_name
invesalius/data/styles.py
@@ -394,36 +394,19 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -394,36 +394,19 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
394 394
395 def OnReleaseMeasurePoint(self, obj, evt): 395 def OnReleaseMeasurePoint(self, obj, evt):
396 if self.selected: 396 if self.selected:
397 - print "Changing Position"  
398 n, m, mr = self.selected 397 n, m, mr = self.selected
399 x, y, z = self._get_pos_clicked() 398 x, y, z = self._get_pos_clicked()
400 - ren = self.slice_data.renderer  
401 - mr.renderer = ren  
402 - if n == 0:  
403 - mr.SetPoint1(x, y, z)  
404 - m.points[0] = x, y, z  
405 - elif n == 1:  
406 - mr.SetPoint2(x, y, z)  
407 - m.points[1] = x, y, z  
408 -  
409 - m.value = mr.GetValue()  
410 - 399 + idx = self.measures._list_measures.index((m, mr))
  400 + Publisher.sendMessage('Change measurement point position', (idx, n, (x, y, z)))
411 Publisher.sendMessage('Reload actual slice %s' % self.orientation) 401 Publisher.sendMessage('Reload actual slice %s' % self.orientation)
412 self.selected = None 402 self.selected = None
413 403
414 def OnMoveMeasurePoint(self, obj, evt): 404 def OnMoveMeasurePoint(self, obj, evt):
415 if self.selected: 405 if self.selected:
416 - print "Changing Position"  
417 n, m, mr = self.selected 406 n, m, mr = self.selected
418 x, y, z = self._get_pos_clicked() 407 x, y, z = self._get_pos_clicked()
419 - ren = self.slice_data.renderer  
420 - mr.renderer = ren  
421 - if n == 0:  
422 - mr.SetPoint1(x, y, z)  
423 - m.points[0] = x, y, z  
424 - elif n == 1:  
425 - mr.SetPoint2(x, y, z)  
426 - m.points[1] = x, y, z 408 + idx = self.measures._list_measures.index((m, mr))
  409 + Publisher.sendMessage('Change measurement point position', (idx, n, (x, y, z)))
427 410
428 Publisher.sendMessage('Reload actual slice %s' % self.orientation) 411 Publisher.sendMessage('Reload actual slice %s' % self.orientation)
429 412
@@ -452,11 +435,12 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -452,11 +435,12 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
452 435
453 if slice_number in self.measures.measures[self._ori]: 436 if slice_number in self.measures.measures[self._ori]:
454 for m, mr in self.measures.measures[self._ori][slice_number]: 437 for m, mr in self.measures.measures[self._ori][slice_number]:
455 - for n, p in enumerate(m.points):  
456 - px, py, pz = p  
457 - dist = ((px-x)**2 + (py-y)**2 + (pz-z)**2)**0.5  
458 - if dist < max_dist:  
459 - return (n, m, mr) 438 + if mr.IsComplete():
  439 + for n, p in enumerate(m.points):
  440 + px, py, pz = p
  441 + dist = ((px-x)**2 + (py-y)**2 + (pz-z)**2)**0.5
  442 + if dist < max_dist:
  443 + return (n, m, mr)
460 return None 444 return None
461 445
462 class AngularMeasureInteractorStyle(DefaultInteractorStyle): 446 class AngularMeasureInteractorStyle(DefaultInteractorStyle):
invesalius/gui/data_notebook.py
@@ -1127,6 +1127,8 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1127,6 +1127,8 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1127 self.UpdateItemInfo(index, name, colour, location, type_, value) 1127 self.UpdateItemInfo(index, name, colour, location, type_, value)
1128 else: 1128 else:
1129 self.InsertNewItem(index, name, colour, location, type_, value) 1129 self.InsertNewItem(index, name, colour, location, type_, value)
  1130 + else:
  1131 + self.UpdateItemInfo(index, name, colour, location, type_, value)
1130 1132
1131 1133
1132 1134