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 46 slice_number = 0
47 47  
48 48 if self.current is None:
  49 + print "To Create"
49 50 to_create = True
50 51 elif self.current[0].slice_number != slice_number:
  52 + print "To Create"
51 53 to_create = True
52 54 elif self.current[0].location != location:
  55 + print "To Create"
53 56 to_create = True
54 57 else:
  58 + print "To not Create"
55 59 to_create = False
56 60  
57 61 if to_create:
... ... @@ -68,7 +72,8 @@ class MeasurementManager(object):
68 72  
69 73 x, y, z = position
70 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 78 if self.current[1].IsComplete():
74 79 index = prj.Project().AddMeasurement(self.current[0])
... ... @@ -99,8 +104,10 @@ class MeasurementManager(object):
99 104 m, mr = self.measures.pop(index)
100 105 actors = mr.GetActors()
101 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 109 ps.Publisher().sendMessage('Update slice viewer')
  110 + ps.Publisher().sendMessage('Render volume viewer')
104 111  
105 112 def _set_visibility(self, pubsub_evt):
106 113 index, visibility = pubsub_evt.data
... ...
invesalius/data/viewer_slice.py
... ... @@ -71,6 +71,8 @@ class Viewer(wx.Panel):
71 71 self.orientation_texts = []
72 72  
73 73 self.measures = []
  74 + self.actors_by_slice_number = {}
  75 + self.renderers_by_slice_number = {}
74 76  
75 77 self.__init_gui()
76 78  
... ... @@ -1381,19 +1383,28 @@ class Viewer(wx.Panel):
1381 1383  
1382 1384 def set_slice_number(self, index):
1383 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 1396 for n, slice_data in enumerate(self.slice_data_list):
1389 1397 ren = slice_data.renderer
1390 1398 actor = slice_data.actor
1391 1399 pos = self.layout[0] * self.layout[1] * index + n
1392 1400 max = actor.GetSliceNumberMax() + 1
1393 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 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 1408 self.__update_display_extent(slice_data)
1398 1409 slice_data.Show()
1399 1410 else:
... ... @@ -1492,12 +1503,21 @@ class Viewer(wx.Panel):
1492 1503  
1493 1504 def AddActors(self, pubsub_evt):
1494 1505 "Inserting actors"
1495   - actors = pubsub_evt.data
  1506 + actors, n = pubsub_evt.data
  1507 + renderer = self.renderers_by_slice_number[n]
1496 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 1515 def RemoveActors(self, pubsub_evt):
1500 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 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 231  
232 232 def AddActors(self, pubsub_evt):
233 233 "Inserting actors"
234   - actors = pubsub_evt.data
  234 + actors = pubsub_evt.data[0]
235 235 for actor in actors:
236 236 self.ren.AddActor(actor)
237 237  
238 238 def RemoveActors(self, pubsub_evt):
239 239 "Remove a list of actors"
240   - actors = pubsub_evt.data
  240 + actors = pubsub_evt.data[0]
241 241 for actor in actors:
242 242 self.ren.RemoveActor(actor)
243 243  
... ...