Commit 35e84cbf35bb9e66f8b9a9e3f18cb69e7ef34896

Authored by Thiago Franco de Moraes
1 parent 2b068431

melhorias

invesalius/data/measures.py
@@ -490,6 +490,7 @@ class LinearMeasure(object): @@ -490,6 +490,7 @@ class LinearMeasure(object):
490 a.GetPositionCoordinate().SetCoordinateSystemToWorld() 490 a.GetPositionCoordinate().SetCoordinateSystemToWorld()
491 a.GetPositionCoordinate().SetValue(x,y,z) 491 a.GetPositionCoordinate().SetValue(x,y,z)
492 a.GetProperty().SetColor((0, 1, 0)) 492 a.GetProperty().SetColor((0, 1, 0))
  493 + a.GetProperty().SetOpacity(0.75)
493 self.text_actor = a 494 self.text_actor = a
494 495
495 def GetNumberOfPoints(self): 496 def GetNumberOfPoints(self):
invesalius/data/styles.py
@@ -389,7 +389,7 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -389,7 +389,7 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
389 ((x, y,z), const.LINEAR, 389 ((x, y,z), const.LINEAR,
390 ORIENTATIONS[self.orientation], 390 ORIENTATIONS[self.orientation],
391 slice_number, self.radius)) 391 slice_number, self.radius))
392 - self.viewer.interactor.Render() 392 + Publisher.sendMessage('Reload actual slice %s' % self.orientation)
393 393
394 def OnReleaseMeasurePoint(self, obj, evt): 394 def OnReleaseMeasurePoint(self, obj, evt):
395 if self.selected: 395 if self.selected:
@@ -405,7 +405,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -405,7 +405,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
405 mr.SetPoint2(x, y, z) 405 mr.SetPoint2(x, y, z)
406 m.points[1] = x, y, z 406 m.points[1] = x, y, z
407 407
408 - self.viewer.interactor.Render() 408 + m.value = mr.GetValue()
  409 +
409 Publisher.sendMessage('Reload actual slice %s' % self.orientation) 410 Publisher.sendMessage('Reload actual slice %s' % self.orientation)
410 self.selected = None 411 self.selected = None
411 412
@@ -423,7 +424,6 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -423,7 +424,6 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
423 mr.SetPoint2(x, y, z) 424 mr.SetPoint2(x, y, z)
424 m.points[1] = x, y, z 425 m.points[1] = x, y, z
425 426
426 - self.viewer.interactor.Render()  
427 Publisher.sendMessage('Reload actual slice %s' % self.orientation) 427 Publisher.sendMessage('Reload actual slice %s' % self.orientation)
428 428
429 def CleanUp(self): 429 def CleanUp(self):
@@ -441,12 +441,20 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): @@ -441,12 +441,20 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle):
441 441
442 def _verify_clicked(self, x, y, z): 442 def _verify_clicked(self, x, y, z):
443 slice_number = self.slice_data.number 443 slice_number = self.slice_data.number
  444 + sx, sy, sz = self.viewer.slice_.spacing
  445 + if self.orientation == "AXIAL":
  446 + max_dist = 2 * max(sx, sy)
  447 + elif self.orientation == "CORONAL":
  448 + max_dist = 2 * max(sx, sz)
  449 + elif self.orientation == "SAGITAL":
  450 + max_dist = 2 * max(sy, sz)
  451 +
444 if slice_number in self.measures.measures[self._ori]: 452 if slice_number in self.measures.measures[self._ori]:
445 for m, mr in self.measures.measures[self._ori][slice_number]: 453 for m, mr in self.measures.measures[self._ori][slice_number]:
446 for n, p in enumerate(m.points): 454 for n, p in enumerate(m.points):
447 px, py, pz = p 455 px, py, pz = p
448 dist = ((px-x)**2 + (py-y)**2 + (pz-z)**2)**0.5 456 dist = ((px-x)**2 + (py-y)**2 + (pz-z)**2)**0.5
449 - if dist < 2: 457 + if dist < max_dist:
450 return (n, m, mr) 458 return (n, m, mr)
451 return None 459 return None
452 460
invesalius/data/viewer_slice.py
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
19 # detalhes. 19 # detalhes.
20 #-------------------------------------------------------------------------- 20 #--------------------------------------------------------------------------
21 21
  22 +import collections
22 import itertools 23 import itertools
23 import tempfile 24 import tempfile
24 25
@@ -172,7 +173,7 @@ class Viewer(wx.Panel): @@ -172,7 +173,7 @@ class Viewer(wx.Panel):
172 self.orientation_texts = [] 173 self.orientation_texts = []
173 174
174 self.measures = measures.MeasureData() 175 self.measures = measures.MeasureData()
175 - self.actors_by_slice_number = {} 176 + self.actors_by_slice_number = collections.defaultdict(list)
176 self.renderers_by_slice_number = {} 177 self.renderers_by_slice_number = {}
177 178
178 self.orientation = orientation 179 self.orientation = orientation
@@ -1178,9 +1179,9 @@ class Viewer(wx.Panel): @@ -1178,9 +1179,9 @@ class Viewer(wx.Panel):
1178 image = self.slice_.GetSlices(self.orientation, index, 1179 image = self.slice_.GetSlices(self.orientation, index,
1179 self.number_slices, inverted, border_size) 1180 self.number_slices, inverted, border_size)
1180 self.slice_data.actor.SetInputData(image) 1181 self.slice_data.actor.SetInputData(image)
1181 - for actor in self.actors_by_slice_number.get(self.slice_data.number, []): 1182 + for actor in self.actors_by_slice_number[self.slice_data.number]:
1182 self.slice_data.renderer.RemoveActor(actor) 1183 self.slice_data.renderer.RemoveActor(actor)
1183 - for actor in self.actors_by_slice_number.get(index, []): 1184 + for actor in self.actors_by_slice_number[index]:
1184 self.slice_data.renderer.AddActor(actor) 1185 self.slice_data.renderer.AddActor(actor)
1185 1186
1186 for (m, mr) in self.measures[self.orientation].get(self.slice_data.number, []): 1187 for (m, mr) in self.measures[self.orientation].get(self.slice_data.number, []):
@@ -1247,10 +1248,7 @@ class Viewer(wx.Panel): @@ -1247,10 +1248,7 @@ class Viewer(wx.Panel):
1247 for actor in actors: 1248 for actor in actors:
1248 self.slice_data.renderer.AddActor(actor) 1249 self.slice_data.renderer.AddActor(actor)
1249 1250
1250 - try:  
1251 - self.actors_by_slice_number[n].extend(actors)  
1252 - except KeyError:  
1253 - self.actors_by_slice_number[n] = list(actors) 1251 + self.actors_by_slice_number[n].extend(actors)
1254 1252
1255 def RemoveActors(self, pubsub_evt): 1253 def RemoveActors(self, pubsub_evt):
1256 "Remove a list of actors" 1254 "Remove a list of actors"