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 | 65 | |
66 | 66 | # All renderers and image actors in this viewer |
67 | 67 | self.slice_data_list = [] |
68 | + self.slice_data = None | |
68 | 69 | # The layout from slice_data, the first is number of cols, the second |
69 | 70 | # is the number of rows |
70 | 71 | self.layout = (1, 1) |
... | ... | @@ -163,15 +164,10 @@ class Viewer(wx.Panel): |
163 | 164 | self.SetLayout(layout) |
164 | 165 | |
165 | 166 | def __config_interactor(self): |
166 | - ren = vtk.vtkRenderer() | |
167 | 167 | style = vtk.vtkInteractorStyleImage() |
168 | 168 | |
169 | 169 | interactor = self.interactor |
170 | 170 | interactor.SetInteractorStyle(style) |
171 | - interactor.GetRenderWindow().AddRenderer(ren) | |
172 | - | |
173 | - self.cam = ren.GetActiveCamera() | |
174 | - self.ren = ren | |
175 | 171 | |
176 | 172 | def SetInteractorStyle(self, state): |
177 | 173 | self.state = state |
... | ... | @@ -362,7 +358,7 @@ class Viewer(wx.Panel): |
362 | 358 | def OnChangeSliceMove(self, evt, obj): |
363 | 359 | if (self.left_pressed): |
364 | 360 | min = 0 |
365 | - max = self.actor.GetSliceNumberMax() | |
361 | + max = self.slice_.GetMaxSliceNumber(self.orientation) | |
366 | 362 | |
367 | 363 | if (self.left_pressed): |
368 | 364 | position = self.interactor.GetLastEventPosition() |
... | ... | @@ -484,11 +480,11 @@ class Viewer(wx.Panel): |
484 | 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 | 489 | def Reposition(self, slice_data): |
494 | 490 | """ |
... | ... | @@ -747,9 +743,11 @@ class Viewer(wx.Panel): |
747 | 743 | evt.StartDolly() |
748 | 744 | |
749 | 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 | 752 | def CalcultateScrollPosition(self, coord): |
755 | 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 | 1058 | self.scroll.SetScrollbar(wx.SB_VERTICAL, 1, max_slice_number, |
1061 | 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 | 1064 | self.set_slice_number(0) |
1066 | 1065 | self.__update_camera() |
1067 | - self.ren.ResetCamera() | |
1066 | + self.slice_data.renderer.ResetCamera() | |
1067 | + self.interactor.GetRenderWindow().AddRenderer(self.slice_data.renderer) | |
1068 | 1068 | #if slice_.imagedata is None: |
1069 | 1069 | #slice_.SetInput(imagedata, mask_dict) |
1070 | 1070 | |
... | ... | @@ -1249,16 +1249,15 @@ class Viewer(wx.Panel): |
1249 | 1249 | for slice_data in self.slice_data_list: |
1250 | 1250 | self.__update_camera(slice_data) |
1251 | 1251 | |
1252 | - def create_slice_window(self, imagedata): | |
1252 | + def create_slice_window(self): | |
1253 | 1253 | renderer = vtk.vtkRenderer() |
1254 | 1254 | self.interactor.GetRenderWindow().AddRenderer(renderer) |
1255 | 1255 | actor = vtk.vtkImageActor() |
1256 | - actor.SetInput(imagedata) | |
1257 | 1256 | slice_data = sd.SliceData() |
1258 | 1257 | slice_data.SetOrientation(self.orientation) |
1259 | 1258 | slice_data.renderer = renderer |
1260 | 1259 | slice_data.actor = actor |
1261 | - slice_data.SetBorderStyle(sd.BORDER_UP | sd.BORDER_DOWN) | |
1260 | + slice_data.SetBorderStyle(sd.BORDER_ALL) | |
1262 | 1261 | renderer.AddActor(actor) |
1263 | 1262 | renderer.AddActor(slice_data.text.actor) |
1264 | 1263 | renderer.AddViewProp(slice_data.box_actor) |
... | ... | @@ -1279,10 +1278,11 @@ class Viewer(wx.Panel): |
1279 | 1278 | #slice_data.renderer.Render() |
1280 | 1279 | |
1281 | 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 | 1284 | def UpdateRender(self, evt): |
1285 | + print "Updating viewer", self.orientation | |
1286 | 1286 | self.interactor.Render() |
1287 | 1287 | |
1288 | 1288 | def __configure_scroll(self): |
... | ... | @@ -1370,15 +1370,21 @@ class Viewer(wx.Panel): |
1370 | 1370 | |
1371 | 1371 | def OnSize(self, evt): |
1372 | 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 | 1377 | evt.Skip() |
1378 | 1378 | |
1379 | 1379 | def set_slice_number(self, index): |
1380 | 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 | 1388 | self.__update_display_extent(image) |
1383 | 1389 | #self.interactor.Render() |
1384 | 1390 | |
... | ... | @@ -1419,6 +1425,7 @@ class Viewer(wx.Panel): |
1419 | 1425 | slice_number = slice_data.number |
1420 | 1426 | self.pick.Pick(x, y, 0, render) |
1421 | 1427 | x, y, z = self.pick.GetPickPosition() |
1428 | + print x, y, z | |
1422 | 1429 | if self.pick.GetViewProp(): |
1423 | 1430 | self.render_to_add = slice_data.renderer |
1424 | 1431 | ps.Publisher().sendMessage("Add measurement point", |
... | ... | @@ -1446,12 +1453,16 @@ class Viewer(wx.Panel): |
1446 | 1453 | def AddActors(self, pubsub_evt): |
1447 | 1454 | "Inserting actors" |
1448 | 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 | 1466 | try: |
1456 | 1467 | self.actors_by_slice_number[n].extend(actors) |
1457 | 1468 | except KeyError: | ... | ... |