Commit a8bbf63e1960747a59ad28c378f43021f5d3bb9a

Authored by tfmoraes
1 parent 29071f5b

ENH: Initial work to measures work with multiple renderers by orientation

invesalius/data/measures.py
@@ -46,12 +46,16 @@ class MeasurementManager(object): @@ -46,12 +46,16 @@ class MeasurementManager(object):
46 slice_number = 0 46 slice_number = 0
47 47
48 if self.current is None: 48 if self.current is None:
  49 + print "To Create"
49 to_create = True 50 to_create = True
50 elif self.current[0].slice_number != slice_number: 51 elif self.current[0].slice_number != slice_number:
  52 + print "To Create"
51 to_create = True 53 to_create = True
52 elif self.current[0].location != location: 54 elif self.current[0].location != location:
  55 + print "To Create"
53 to_create = True 56 to_create = True
54 else: 57 else:
  58 + print "To not Create"
55 to_create = False 59 to_create = False
56 60
57 if to_create: 61 if to_create:
@@ -68,7 +72,8 @@ class MeasurementManager(object): @@ -68,7 +72,8 @@ class MeasurementManager(object):
68 72
69 x, y, z = position 73 x, y, z = position
70 actors = self.current[1].AddPoint(x, y, z) 74 actors = self.current[1].AddPoint(x, y, z)
71 - ps.Publisher().sendMessage(("Add actors", location), actors) 75 + ps.Publisher().sendMessage(("Add actors", location),
  76 + (actors, self.current[0].slice_number))
72 77
73 if self.current[1].IsComplete(): 78 if self.current[1].IsComplete():
74 index = prj.Project().AddMeasurement(self.current[0]) 79 index = prj.Project().AddMeasurement(self.current[0])
@@ -99,8 +104,10 @@ class MeasurementManager(object): @@ -99,8 +104,10 @@ class MeasurementManager(object):
99 m, mr = self.measures.pop(index) 104 m, mr = self.measures.pop(index)
100 actors = mr.GetActors() 105 actors = mr.GetActors()
101 prj.Project().RemoveMeasurement(m) 106 prj.Project().RemoveMeasurement(m)
102 - ps.Publisher().sendMessage(('Remove actors', m.location), actors) 107 + ps.Publisher().sendMessage(('Remove actors', m.location),
  108 + (actors, m.slice_number))
103 ps.Publisher().sendMessage('Update slice viewer') 109 ps.Publisher().sendMessage('Update slice viewer')
  110 + ps.Publisher().sendMessage('Render volume viewer')
104 111
105 def _set_visibility(self, pubsub_evt): 112 def _set_visibility(self, pubsub_evt):
106 index, visibility = pubsub_evt.data 113 index, visibility = pubsub_evt.data
invesalius/data/viewer_slice.py
@@ -71,6 +71,8 @@ class Viewer(wx.Panel): @@ -71,6 +71,8 @@ class Viewer(wx.Panel):
71 self.orientation_texts = [] 71 self.orientation_texts = []
72 72
73 self.measures = [] 73 self.measures = []
  74 + self.actors_by_slice_number = {}
  75 + self.renderers_by_slice_number = {}
74 76
75 self.__init_gui() 77 self.__init_gui()
76 78
@@ -1381,19 +1383,28 @@ class Viewer(wx.Panel): @@ -1381,19 +1383,28 @@ class Viewer(wx.Panel):
1381 1383
1382 def set_slice_number(self, index): 1384 def set_slice_number(self, index):
1383 self.slice_number = index 1385 self.slice_number = index
1384 - # Showing off all the measures  
1385 - if self.measures and not self.measures[-1][1].IsComplete():  
1386 - del self.measures[-1]  
1387 - [m[1].SetVisibility(0) for m in self.measures] 1386 + # for m in self.actors_by_slice_number.values():
  1387 + # for actor in m:
  1388 + # actor.SetVisibility(0)
  1389 + # Removing actor from the previous renderers/slice.
  1390 + for n in self.renderers_by_slice_number:
  1391 + renderer = self.renderers_by_slice_number[n]
  1392 + for actor in self.actors_by_slice_number.get(n, []):
  1393 + renderer.RemoveActor(actor)
  1394 + self.renderers_by_slice_number = None
  1395 +
1388 for n, slice_data in enumerate(self.slice_data_list): 1396 for n, slice_data in enumerate(self.slice_data_list):
1389 ren = slice_data.renderer 1397 ren = slice_data.renderer
1390 actor = slice_data.actor 1398 actor = slice_data.actor
1391 pos = self.layout[0] * self.layout[1] * index + n 1399 pos = self.layout[0] * self.layout[1] * index + n
1392 max = actor.GetSliceNumberMax() + 1 1400 max = actor.GetSliceNumberMax() + 1
1393 if pos < max: 1401 if pos < max:
  1402 + self.renderers_by_slice_number[pos] = ren
  1403 + for m_actor in self.actors_by_slice_number.get(pos, []):
  1404 + ren.AddActor(m_actor)
1394 slice_data.SetNumber(pos) 1405 slice_data.SetNumber(pos)
1395 - [m[1].SetRenderer(ren) for m in self.measures if m[0] == pos]  
1396 - [m[1].SetVisibility(1) for m in self.measures if m[0] == pos] 1406 + # for actor in self.actors_by_slice_number.get(pos, []):
  1407 + # actor.SetVisibility(1)
1397 self.__update_display_extent(slice_data) 1408 self.__update_display_extent(slice_data)
1398 slice_data.Show() 1409 slice_data.Show()
1399 else: 1410 else:
@@ -1492,12 +1503,21 @@ class Viewer(wx.Panel): @@ -1492,12 +1503,21 @@ class Viewer(wx.Panel):
1492 1503
1493 def AddActors(self, pubsub_evt): 1504 def AddActors(self, pubsub_evt):
1494 "Inserting actors" 1505 "Inserting actors"
1495 - actors = pubsub_evt.data 1506 + actors, n = pubsub_evt.data
  1507 + renderer = self.renderers_by_slice_number[n]
1496 for actor in actors: 1508 for actor in actors:
1497 - self.render_to_add.AddActor(actor) 1509 + renderer.AddActor(actor)
  1510 + try:
  1511 + self.actors_by_slice_number[n].extend(actors)
  1512 + except KeyError:
  1513 + self.actors_by_slice_number[n] = list(actors)
1498 1514
1499 def RemoveActors(self, pubsub_evt): 1515 def RemoveActors(self, pubsub_evt):
1500 "Remove a list of actors" 1516 "Remove a list of actors"
1501 - actors = pubsub_evt.data 1517 + actors, n = pubsub_evt.data[0]
  1518 + renderer = self.renderers_by_slice_number[n]
1502 for actor in actors: 1519 for actor in actors:
1503 - self.render_to_add.RemoveActor(actor) 1520 + # Remove the actor from the renderer
  1521 + self.renderer.RemoveActor(actor)
  1522 + # and remove the actor from the actor's list
  1523 + self.actors_by_slice_number.remove(actor)
invesalius/data/viewer_volume.py
@@ -231,13 +231,13 @@ class Viewer(wx.Panel): @@ -231,13 +231,13 @@ class Viewer(wx.Panel):
231 231
232 def AddActors(self, pubsub_evt): 232 def AddActors(self, pubsub_evt):
233 "Inserting actors" 233 "Inserting actors"
234 - actors = pubsub_evt.data 234 + actors = pubsub_evt.data[0]
235 for actor in actors: 235 for actor in actors:
236 self.ren.AddActor(actor) 236 self.ren.AddActor(actor)
237 237
238 def RemoveActors(self, pubsub_evt): 238 def RemoveActors(self, pubsub_evt):
239 "Remove a list of actors" 239 "Remove a list of actors"
240 - actors = pubsub_evt.data 240 + actors = pubsub_evt.data[0]
241 for actor in actors: 241 for actor in actors:
242 self.ren.RemoveActor(actor) 242 self.ren.RemoveActor(actor)
243 243