Commit 847232db6b9830ed4577317b7c12c7310c457209
1 parent
93a8d517
Exists in
master
and in
67 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: |