Commit 847232db6b9830ed4577317b7c12c7310c457209
1 parent
93a8d517
Exists in
master
and in
5 other branches
FIX: Measures and slice number ares working again. NOTE: the code is a mess
Showing
1 changed file
with
44 additions
and
33 deletions
Show diff stats
invesalius/data/viewer_slice.py
@@ -65,6 +65,7 @@ class Viewer(wx.Panel): | @@ -65,6 +65,7 @@ class Viewer(wx.Panel): | ||
65 | 65 | ||
66 | # All renderers and image actors in this viewer | 66 | # All renderers and image actors in this viewer |
67 | self.slice_data_list = [] | 67 | self.slice_data_list = [] |
68 | + self.slice_data = None | ||
68 | # The layout from slice_data, the first is number of cols, the second | 69 | # The layout from slice_data, the first is number of cols, the second |
69 | # is the number of rows | 70 | # is the number of rows |
70 | self.layout = (1, 1) | 71 | self.layout = (1, 1) |
@@ -163,15 +164,10 @@ class Viewer(wx.Panel): | @@ -163,15 +164,10 @@ class Viewer(wx.Panel): | ||
163 | self.SetLayout(layout) | 164 | self.SetLayout(layout) |
164 | 165 | ||
165 | def __config_interactor(self): | 166 | def __config_interactor(self): |
166 | - ren = vtk.vtkRenderer() | ||
167 | style = vtk.vtkInteractorStyleImage() | 167 | style = vtk.vtkInteractorStyleImage() |
168 | 168 | ||
169 | interactor = self.interactor | 169 | interactor = self.interactor |
170 | interactor.SetInteractorStyle(style) | 170 | interactor.SetInteractorStyle(style) |
171 | - interactor.GetRenderWindow().AddRenderer(ren) | ||
172 | - | ||
173 | - self.cam = ren.GetActiveCamera() | ||
174 | - self.ren = ren | ||
175 | 171 | ||
176 | def SetInteractorStyle(self, state): | 172 | def SetInteractorStyle(self, state): |
177 | self.state = state | 173 | self.state = state |
@@ -362,7 +358,7 @@ class Viewer(wx.Panel): | @@ -362,7 +358,7 @@ class Viewer(wx.Panel): | ||
362 | def OnChangeSliceMove(self, evt, obj): | 358 | def OnChangeSliceMove(self, evt, obj): |
363 | if (self.left_pressed): | 359 | if (self.left_pressed): |
364 | min = 0 | 360 | min = 0 |
365 | - max = self.actor.GetSliceNumberMax() | 361 | + max = self.slice_.GetMaxSliceNumber(self.orientation) |
366 | 362 | ||
367 | if (self.left_pressed): | 363 | if (self.left_pressed): |
368 | position = self.interactor.GetLastEventPosition() | 364 | position = self.interactor.GetLastEventPosition() |
@@ -484,11 +480,11 @@ class Viewer(wx.Panel): | @@ -484,11 +480,11 @@ class Viewer(wx.Panel): | ||
484 | down_text] | 480 | down_text] |
485 | 481 | ||
486 | 482 | ||
487 | - self.ren.AddActor(self.wl_text.actor) | ||
488 | - self.ren.AddActor(left_text.actor) | ||
489 | - self.ren.AddActor(right_text.actor) | ||
490 | - self.ren.AddActor(up_text.actor) | ||
491 | - self.ren.AddActor(down_text.actor) | 483 | + self.slice_data.renderer.AddActor(self.wl_text.actor) |
484 | + self.slice_data.renderer.AddActor(left_text.actor) | ||
485 | + self.slice_data.renderer.AddActor(right_text.actor) | ||
486 | + self.slice_data.renderer.AddActor(up_text.actor) | ||
487 | + self.slice_data.renderer.AddActor(down_text.actor) | ||
492 | 488 | ||
493 | def Reposition(self, slice_data): | 489 | def Reposition(self, slice_data): |
494 | """ | 490 | """ |
@@ -747,9 +743,11 @@ class Viewer(wx.Panel): | @@ -747,9 +743,11 @@ class Viewer(wx.Panel): | ||
747 | evt.StartDolly() | 743 | evt.StartDolly() |
748 | 744 | ||
749 | def get_slice_data(self, render): | 745 | def get_slice_data(self, render): |
750 | - for slice_data in self.slice_data_list: | ||
751 | - if slice_data.renderer is render: | ||
752 | - return slice_data | 746 | + #for slice_data in self.slice_data_list: |
747 | + #if slice_data.renderer is render: | ||
748 | + #return slice_data | ||
749 | + # WARN: Return the only slice_data used in this slice_viewer. | ||
750 | + return self.slice_data | ||
753 | 751 | ||
754 | def CalcultateScrollPosition(self, coord): | 752 | def CalcultateScrollPosition(self, coord): |
755 | # Based in the given coord (x, y, z), returns a list with the scroll positions for each | 753 | # Based in the given coord (x, y, z), returns a list with the scroll positions for each |
@@ -1060,11 +1058,13 @@ class Viewer(wx.Panel): | @@ -1060,11 +1058,13 @@ class Viewer(wx.Panel): | ||
1060 | self.scroll.SetScrollbar(wx.SB_VERTICAL, 1, max_slice_number, | 1058 | self.scroll.SetScrollbar(wx.SB_VERTICAL, 1, max_slice_number, |
1061 | max_slice_number) | 1059 | max_slice_number) |
1062 | 1060 | ||
1063 | - self.actor = vtk.vtkImageActor() | ||
1064 | - self.ren.AddActor(self.actor) | 1061 | + self.slice_data = self.create_slice_window() |
1062 | + self.slice_data.actor.SetInput(imagedata) | ||
1063 | + self.cam = self.slice_data.renderer.GetActiveCamera() | ||
1065 | self.set_slice_number(0) | 1064 | self.set_slice_number(0) |
1066 | self.__update_camera() | 1065 | self.__update_camera() |
1067 | - self.ren.ResetCamera() | 1066 | + self.slice_data.renderer.ResetCamera() |
1067 | + self.interactor.GetRenderWindow().AddRenderer(self.slice_data.renderer) | ||
1068 | #if slice_.imagedata is None: | 1068 | #if slice_.imagedata is None: |
1069 | #slice_.SetInput(imagedata, mask_dict) | 1069 | #slice_.SetInput(imagedata, mask_dict) |
1070 | 1070 | ||
@@ -1249,16 +1249,15 @@ class Viewer(wx.Panel): | @@ -1249,16 +1249,15 @@ class Viewer(wx.Panel): | ||
1249 | for slice_data in self.slice_data_list: | 1249 | for slice_data in self.slice_data_list: |
1250 | self.__update_camera(slice_data) | 1250 | self.__update_camera(slice_data) |
1251 | 1251 | ||
1252 | - def create_slice_window(self, imagedata): | 1252 | + def create_slice_window(self): |
1253 | renderer = vtk.vtkRenderer() | 1253 | renderer = vtk.vtkRenderer() |
1254 | self.interactor.GetRenderWindow().AddRenderer(renderer) | 1254 | self.interactor.GetRenderWindow().AddRenderer(renderer) |
1255 | actor = vtk.vtkImageActor() | 1255 | actor = vtk.vtkImageActor() |
1256 | - actor.SetInput(imagedata) | ||
1257 | slice_data = sd.SliceData() | 1256 | slice_data = sd.SliceData() |
1258 | slice_data.SetOrientation(self.orientation) | 1257 | slice_data.SetOrientation(self.orientation) |
1259 | slice_data.renderer = renderer | 1258 | slice_data.renderer = renderer |
1260 | slice_data.actor = actor | 1259 | slice_data.actor = actor |
1261 | - slice_data.SetBorderStyle(sd.BORDER_UP | sd.BORDER_DOWN) | 1260 | + slice_data.SetBorderStyle(sd.BORDER_ALL) |
1262 | renderer.AddActor(actor) | 1261 | renderer.AddActor(actor) |
1263 | renderer.AddActor(slice_data.text.actor) | 1262 | renderer.AddActor(slice_data.text.actor) |
1264 | renderer.AddViewProp(slice_data.box_actor) | 1263 | renderer.AddViewProp(slice_data.box_actor) |
@@ -1279,10 +1278,11 @@ class Viewer(wx.Panel): | @@ -1279,10 +1278,11 @@ class Viewer(wx.Panel): | ||
1279 | #slice_data.renderer.Render() | 1278 | #slice_data.renderer.Render() |
1280 | 1279 | ||
1281 | def __update_display_extent(self, image): | 1280 | def __update_display_extent(self, image): |
1282 | - self.actor.SetDisplayExtent(image.GetExtent()) | ||
1283 | - self.ren.ResetCameraClippingRange() | 1281 | + self.slice_data.actor.SetDisplayExtent(image.GetExtent()) |
1282 | + self.slice_data.renderer.ResetCameraClippingRange() | ||
1284 | 1283 | ||
1285 | def UpdateRender(self, evt): | 1284 | def UpdateRender(self, evt): |
1285 | + print "Updating viewer", self.orientation | ||
1286 | self.interactor.Render() | 1286 | self.interactor.Render() |
1287 | 1287 | ||
1288 | def __configure_scroll(self): | 1288 | def __configure_scroll(self): |
@@ -1370,15 +1370,21 @@ class Viewer(wx.Panel): | @@ -1370,15 +1370,21 @@ class Viewer(wx.Panel): | ||
1370 | 1370 | ||
1371 | def OnSize(self, evt): | 1371 | def OnSize(self, evt): |
1372 | w, h = evt.GetSize() | 1372 | w, h = evt.GetSize() |
1373 | - w = float(w) / self.layout[0] | ||
1374 | - h = float(h) / self.layout[1] | ||
1375 | - for slice_data in self.slice_data_list: | ||
1376 | - slice_data.SetSize((w, h)) | 1373 | + w = float(w) |
1374 | + h = float(h) | ||
1375 | + if self.slice_data: | ||
1376 | + self.slice_data.SetSize((w, h)) | ||
1377 | evt.Skip() | 1377 | evt.Skip() |
1378 | 1378 | ||
1379 | def set_slice_number(self, index): | 1379 | def set_slice_number(self, index): |
1380 | image = self.slice_.GetSlices(self.orientation, index) | 1380 | image = self.slice_.GetSlices(self.orientation, index) |
1381 | - self.actor.SetInput(image) | 1381 | + self.slice_data.actor.SetInput(image) |
1382 | + for actor in self.actors_by_slice_number.get(self.slice_data.number, []): | ||
1383 | + self.slice_data.renderer.RemoveActor(actor) | ||
1384 | + for actor in self.actors_by_slice_number.get(index, []): | ||
1385 | + self.slice_data.renderer.AddActor(actor) | ||
1386 | + | ||
1387 | + self.slice_data.SetNumber(index) | ||
1382 | self.__update_display_extent(image) | 1388 | self.__update_display_extent(image) |
1383 | #self.interactor.Render() | 1389 | #self.interactor.Render() |
1384 | 1390 | ||
@@ -1419,6 +1425,7 @@ class Viewer(wx.Panel): | @@ -1419,6 +1425,7 @@ class Viewer(wx.Panel): | ||
1419 | slice_number = slice_data.number | 1425 | slice_number = slice_data.number |
1420 | self.pick.Pick(x, y, 0, render) | 1426 | self.pick.Pick(x, y, 0, render) |
1421 | x, y, z = self.pick.GetPickPosition() | 1427 | x, y, z = self.pick.GetPickPosition() |
1428 | + print x, y, z | ||
1422 | if self.pick.GetViewProp(): | 1429 | if self.pick.GetViewProp(): |
1423 | self.render_to_add = slice_data.renderer | 1430 | self.render_to_add = slice_data.renderer |
1424 | ps.Publisher().sendMessage("Add measurement point", | 1431 | ps.Publisher().sendMessage("Add measurement point", |
@@ -1446,12 +1453,16 @@ class Viewer(wx.Panel): | @@ -1446,12 +1453,16 @@ class Viewer(wx.Panel): | ||
1446 | def AddActors(self, pubsub_evt): | 1453 | def AddActors(self, pubsub_evt): |
1447 | "Inserting actors" | 1454 | "Inserting actors" |
1448 | actors, n = pubsub_evt.data | 1455 | actors, n = pubsub_evt.data |
1449 | - try: | ||
1450 | - renderer = self.renderers_by_slice_number[n] | ||
1451 | - for actor in actors: | ||
1452 | - renderer.AddActor(actor) | ||
1453 | - except KeyError: | ||
1454 | - pass | 1456 | + print actors |
1457 | + #try: | ||
1458 | + #renderer = self.renderers_by_slice_number[n] | ||
1459 | + #for actor in actors: | ||
1460 | + #renderer.AddActor(actor) | ||
1461 | + #except KeyError: | ||
1462 | + #pass | ||
1463 | + for actor in actors: | ||
1464 | + self.slice_data.renderer.AddActor(actor) | ||
1465 | + | ||
1455 | try: | 1466 | try: |
1456 | self.actors_by_slice_number[n].extend(actors) | 1467 | self.actors_by_slice_number[n].extend(actors) |
1457 | except KeyError: | 1468 | except KeyError: |