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 | 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 | ... | ... |