Commit 9435ad91e2c0ec5099abba2ec77051f64d13d125
1 parent
f240a926
Exists in
master
and in
6 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') | ... | ... |