Commit a8bbf63e1960747a59ad28c378f43021f5d3bb9a
1 parent
29071f5b
Exists in
master
and in
68 other branches
ENH: Initial work to measures work with multiple renderers by orientation
Showing
3 changed files
with
41 additions
and
14 deletions
Show diff stats
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 |