Commit 847232db6b9830ed4577317b7c12c7310c457209

Authored by tfmoraes
1 parent 93a8d517

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: