Commit a8bbf63e1960747a59ad28c378f43021f5d3bb9a
1 parent
29071f5b
Exists in
master
and in
6 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 | 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 | ... | ... |