Commit 9435ad91e2c0ec5099abba2ec77051f64d13d125
1 parent
f240a926
Exists in
master
and in
68 other branches
ENH: Using methods from project to add and remove measures
Showing
3 changed files
with
67 additions
and
8 deletions
Show diff stats
invesalius/data/measures.py
| ... | ... | @@ -8,6 +8,7 @@ import wx.lib.pubsub as ps |
| 8 | 8 | import vtk |
| 9 | 9 | |
| 10 | 10 | import constants as const |
| 11 | +import project as prj | |
| 11 | 12 | |
| 12 | 13 | TYPE = {const.LINEAR: _(u"Linear"), |
| 13 | 14 | const.ANGULAR: _(u"Angular"), |
| ... | ... | @@ -31,6 +32,8 @@ class MeasurementManager(object): |
| 31 | 32 | |
| 32 | 33 | def _bind_events(self): |
| 33 | 34 | ps.Publisher().subscribe(self._add_point, "Add measurement point") |
| 35 | + ps.Publisher().subscribe(self._change_name, "Change measurement name") | |
| 36 | + ps.Publisher().subscribe(self._remove_measurements, "Remove measurements") | |
| 34 | 37 | ps.Publisher().subscribe(self._set_visibility, "Show measurement") |
| 35 | 38 | |
| 36 | 39 | def _add_point(self, pubsub_evt): |
| ... | ... | @@ -53,6 +56,7 @@ class MeasurementManager(object): |
| 53 | 56 | |
| 54 | 57 | if to_create: |
| 55 | 58 | m = Measurement() |
| 59 | + m.index = len(self.measures) | |
| 56 | 60 | m.location = location |
| 57 | 61 | m.points.append(position) |
| 58 | 62 | m.slice_number = slice_number |
| ... | ... | @@ -64,11 +68,12 @@ class MeasurementManager(object): |
| 64 | 68 | |
| 65 | 69 | x, y, z = position |
| 66 | 70 | actors = self.current[1].AddPoint(x, y, z) |
| 67 | - ps.Publisher().sendMessage(("Add Actors", location), actors) | |
| 71 | + ps.Publisher().sendMessage(("Add actors", location), actors) | |
| 68 | 72 | |
| 69 | 73 | if self.current[1].IsComplete(): |
| 74 | + index = prj.Project().AddMeasurement(self.current[0]) | |
| 75 | + self.current[0].index = index | |
| 70 | 76 | self.measures.append(self.current) |
| 71 | - index = self.current[0].index | |
| 72 | 77 | name = self.current[0].name |
| 73 | 78 | colour = self.current[0].colour |
| 74 | 79 | self.current[0].value = self.current[1].GetValue() |
| ... | ... | @@ -83,11 +88,26 @@ class MeasurementManager(object): |
| 83 | 88 | value)) |
| 84 | 89 | self.current = None |
| 85 | 90 | |
| 91 | + def _change_name(self, pubsub_evt): | |
| 92 | + index, new_name = pubsub_evt.data | |
| 93 | + self.measures[index][0].name = new_name | |
| 94 | + | |
| 95 | + def _remove_measurements(self, pubsub_evt): | |
| 96 | + indexes = pubsub_evt.data | |
| 97 | + print indexes | |
| 98 | + for index in indexes: | |
| 99 | + m, mr = self.measures.pop(index) | |
| 100 | + actors = mr.GetActors() | |
| 101 | + prj.Project().RemoveMeasurement(m) | |
| 102 | + ps.Publisher().sendMessage(('Remove actors', m.location), actors) | |
| 103 | + ps.Publisher().sendMessage('Update slice viewer') | |
| 104 | + | |
| 86 | 105 | def _set_visibility(self, pubsub_evt): |
| 87 | 106 | index, visibility = pubsub_evt.data |
| 88 | 107 | m, mr = self.measures[index] |
| 89 | 108 | m.is_shown = visibility |
| 90 | 109 | mr.SetVisibility(visibility) |
| 110 | + ps.Publisher().sendMessage('Update slice viewer') | |
| 91 | 111 | |
| 92 | 112 | |
| 93 | 113 | class Measurement(): |
| ... | ... | @@ -313,6 +333,21 @@ class LinearMeasure(object): |
| 313 | 333 | self.line_actor.SetVisibility(v) |
| 314 | 334 | self.text_actor.SetVisibility(v) |
| 315 | 335 | |
| 336 | + def GetActors(self): | |
| 337 | + """ | |
| 338 | + Get the actors already created in this measure. | |
| 339 | + """ | |
| 340 | + actors = [] | |
| 341 | + if self.point_actor1: | |
| 342 | + actors.append(self.point_actor1) | |
| 343 | + if self.point_actor2: | |
| 344 | + actors.append(self.point_actor2) | |
| 345 | + if self.line_actor: | |
| 346 | + actors.append(self.line_actor) | |
| 347 | + if self.text_actor: | |
| 348 | + actors.append(self.text_actor) | |
| 349 | + return actors | |
| 350 | + | |
| 316 | 351 | def Remove(self): |
| 317 | 352 | if self.point_actor1: |
| 318 | 353 | self.render.RemoveActor(self.point_actor1) |
| ... | ... | @@ -330,8 +365,8 @@ class LinearMeasure(object): |
| 330 | 365 | self.render.RemoveActor(self.text_actor) |
| 331 | 366 | del self.text_actor |
| 332 | 367 | |
| 333 | - def __del__(self): | |
| 334 | - self.Remove() | |
| 368 | + # def __del__(self): | |
| 369 | + # self.Remove() | |
| 335 | 370 | |
| 336 | 371 | |
| 337 | 372 | class AngularMeasure(object): |
| ... | ... | @@ -472,6 +507,23 @@ class AngularMeasure(object): |
| 472 | 507 | self.line_actor.SetVisibility(v) |
| 473 | 508 | self.text_actor.SetVisibility(v) |
| 474 | 509 | |
| 510 | + def GetActors(self): | |
| 511 | + """ | |
| 512 | + Get the actors already created in this measure. | |
| 513 | + """ | |
| 514 | + actors = [] | |
| 515 | + if self.point_actor1: | |
| 516 | + actors.append(self.point_actor1) | |
| 517 | + if self.point_actor2: | |
| 518 | + actors.append(self.point_actor2) | |
| 519 | + if self.point_actor3: | |
| 520 | + actors.append(self.point_actor3) | |
| 521 | + if self.line_actor: | |
| 522 | + actors.append(self.line_actor) | |
| 523 | + if self.text_actor: | |
| 524 | + actors.append(self.text_actor) | |
| 525 | + return actors | |
| 526 | + | |
| 475 | 527 | def CalculateAngle(self): |
| 476 | 528 | """ |
| 477 | 529 | Calculate the angle between 2 vectors in 3D space. It is based on law of |
| ... | ... | @@ -532,5 +584,5 @@ class AngularMeasure(object): |
| 532 | 584 | |
| 533 | 585 | self.render = renderer |
| 534 | 586 | |
| 535 | - def __del__(self): | |
| 536 | - self.Remove() | |
| 587 | + # def __del__(self): | |
| 588 | + # self.Remove() | ... | ... |
invesalius/data/viewer_slice.py
| ... | ... | @@ -863,7 +863,8 @@ class Viewer(wx.Panel): |
| 863 | 863 | ps.Publisher().subscribe(self.OnExportPicture,'Export picture to file') |
| 864 | 864 | ps.Publisher().subscribe(self.SetDefaultCursor, 'Set interactor default cursor') |
| 865 | 865 | |
| 866 | - ps.Publisher().subscribe(self.AddActors, ('Add Actors', ORIENTATIONS[self.orientation])) | |
| 866 | + ps.Publisher().subscribe(self.AddActors, ('Add actors', ORIENTATIONS[self.orientation])) | |
| 867 | + ps.Publisher().subscribe(self.RemoveActors, ('Remove actors', ORIENTATIONS[self.orientation])) | |
| 867 | 868 | |
| 868 | 869 | def SetDefaultCursor(self, pusub_evt): |
| 869 | 870 | self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) |
| ... | ... | @@ -1494,3 +1495,9 @@ class Viewer(wx.Panel): |
| 1494 | 1495 | actors = pubsub_evt.data |
| 1495 | 1496 | for actor in actors: |
| 1496 | 1497 | self.render_to_add.AddActor(actor) |
| 1498 | + | |
| 1499 | + def RemoveActors(self, pubsub_evt): | |
| 1500 | + "Remove a list of actors" | |
| 1501 | + actors = pubsub_evt.data | |
| 1502 | + for actor in actors: | |
| 1503 | + self.render_to_add.RemoveActor(actor) | ... | ... |
invesalius/data/viewer_volume.py
| ... | ... | @@ -142,7 +142,7 @@ class Viewer(wx.Panel): |
| 142 | 142 | ps.Publisher().subscribe(self.OnHideText, |
| 143 | 143 | 'Hide text actors on viewers') |
| 144 | 144 | |
| 145 | - ps.Publisher().subscribe(self.AddActors, ('Add Actors', const.SURFACE)) | |
| 145 | + ps.Publisher().subscribe(self.AddActors, ('Add actors', const.SURFACE)) | |
| 146 | 146 | |
| 147 | 147 | ps.Publisher().subscribe(self.OnShowText, |
| 148 | 148 | 'Show text actors on viewers') | ... | ... |