Commit 133f8acf39eff8461cd2ff8b29cc964719e48eb8

Authored by Paulo Henrique Junqueira Amorim
1 parent ebda1724

FIX: Fixed window and level in 3D slice

invesalius/control.py
@@ -353,7 +353,7 @@ class Controller(): @@ -353,7 +353,7 @@ class Controller():
353 ps.Publisher().sendMessage('Load slice to viewer', 353 ps.Publisher().sendMessage('Load slice to viewer',
354 (proj.imagedata, 354 (proj.imagedata,
355 proj.mask_dict)) 355 proj.mask_dict))
356 - #ps.Publisher().sendMessage('Load slice plane') 356 + ps.Publisher().sendMessage('Load slice plane')
357 ps.Publisher().sendMessage('Bright and contrast adjustment image',\ 357 ps.Publisher().sendMessage('Bright and contrast adjustment image',\
358 (proj.window, proj.level)) 358 (proj.window, proj.level))
359 ps.Publisher().sendMessage('Update window level value',\ 359 ps.Publisher().sendMessage('Update window level value',\
invesalius/data/slice_.py
@@ -675,29 +675,37 @@ class Slice(object): @@ -675,29 +675,37 @@ class Slice(object):
675 cast.ClampOverflowOn() 675 cast.ClampOverflowOn()
676 cast.Update() 676 cast.Update()
677 677
678 - flip = vtk.vtkImageFlip()  
679 - flip.SetInput(cast.GetOutput())  
680 - flip.SetFilteredAxis(1)  
681 - flip.FlipAboutOriginOn()  
682 - flip.Update()  
683 - widget.SetInput(flip.GetOutput()) 678 + if (original_orientation == const.AXIAL):
  679 + flip = vtk.vtkImageFlip()
  680 + flip.SetInput(cast.GetOutput())
  681 + flip.SetFilteredAxis(1)
  682 + flip.FlipAboutOriginOn()
  683 + flip.Update()
  684 + widget.SetInput(flip.GetOutput())
  685 + else:
  686 + widget.SetInput(cast.GetOutput())
684 687
685 def UpdateSlice3D(self, pubsub_evt): 688 def UpdateSlice3D(self, pubsub_evt):
686 widget, orientation = pubsub_evt.data 689 widget, orientation = pubsub_evt.data
687 img = self.buffer_slices[orientation].vtk_image 690 img = self.buffer_slices[orientation].vtk_image
688 - 691 + original_orientation = Project().original_orientation
689 cast = vtk.vtkImageCast() 692 cast = vtk.vtkImageCast()
690 cast.SetInput(img) 693 cast.SetInput(img)
691 cast.SetOutputScalarTypeToDouble() 694 cast.SetOutputScalarTypeToDouble()
692 cast.ClampOverflowOn() 695 cast.ClampOverflowOn()
693 cast.Update() 696 cast.Update()
694 697
695 - flip = vtk.vtkImageFlip()  
696 - flip.SetInput(cast.GetOutput())  
697 - flip.SetFilteredAxis(1)  
698 - flip.FlipAboutOriginOn()  
699 - flip.Update()  
700 - widget.SetInput(flip.GetOutput()) 698 + if (original_orientation == const.AXIAL):
  699 + flip = vtk.vtkImageFlip()
  700 + flip.SetInput(cast.GetOutput())
  701 + flip.SetFilteredAxis(1)
  702 + flip.FlipAboutOriginOn()
  703 + flip.Update()
  704 + widget.SetInput(flip.GetOutput())
  705 + else:
  706 + widget.SetInput(cast.GetOutput())
  707 +
  708 +
701 709
702 def CreateMask(self, imagedata=None, name=None, colour=None, 710 def CreateMask(self, imagedata=None, name=None, colour=None,
703 opacity=None, threshold_range=None, 711 opacity=None, threshold_range=None,
invesalius/data/viewer_slice.py
@@ -351,6 +351,8 @@ class Viewer(wx.Panel): @@ -351,6 +351,8 @@ class Viewer(wx.Panel):
351 window, level = pubsub_evt.data 351 window, level = pubsub_evt.data
352 self.acum_achange_window, self.acum_achange_level = (window, level) 352 self.acum_achange_window, self.acum_achange_level = (window, level)
353 self.SetWLText(window, level) 353 self.SetWLText(window, level)
  354 + ps.Publisher().sendMessage('Update all slice')
  355 +
354 356
355 def OnChangeSliceMove(self, evt, obj): 357 def OnChangeSliceMove(self, evt, obj):
356 if (self.left_pressed): 358 if (self.left_pressed):
@@ -821,7 +823,7 @@ class Viewer(wx.Panel): @@ -821,7 +823,7 @@ class Viewer(wx.Panel):
821 ps.Publisher().subscribe(self.RemoveActors, ('Remove actors', ORIENTATIONS[self.orientation])) 823 ps.Publisher().subscribe(self.RemoveActors, ('Remove actors', ORIENTATIONS[self.orientation]))
822 824
823 ps.Publisher().subscribe(self.ReloadActualSlice, 'Reload actual slice') 825 ps.Publisher().subscribe(self.ReloadActualSlice, 'Reload actual slice')
824 - 826 +
825 827
826 def SetDefaultCursor(self, pusub_evt): 828 def SetDefaultCursor(self, pusub_evt):
827 self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT)) 829 self.interactor.SetCursor(wx.StockCursor(wx.CURSOR_DEFAULT))
@@ -1150,15 +1152,6 @@ class Viewer(wx.Panel): @@ -1150,15 +1152,6 @@ class Viewer(wx.Panel):
1150 def UpdateSlice3D(self, pos): 1152 def UpdateSlice3D(self, pos):
1151 original_orientation = project.Project().original_orientation 1153 original_orientation = project.Project().original_orientation
1152 pos = self.scroll.GetThumbPosition() 1154 pos = self.scroll.GetThumbPosition()
1153 - #if (self.orientation == "CORONAL") and \  
1154 - # (original_orientation == const.AXIAL):  
1155 - # pos = abs(self.scroll.GetRange() - pos)  
1156 - #elif(self.orientation == "AXIAL") and \  
1157 - # (original_orientation == const.CORONAL):  
1158 - # pos = abs(self.scroll.GetRange() - pos)  
1159 - #elif(self.orientation == "AXIAL") and \  
1160 - # (original_orientation == const.SAGITAL):  
1161 - # pos = abs(self.scroll.GetRange() - pos)  
1162 ps.Publisher().sendMessage('Change slice from slice plane',\ 1155 ps.Publisher().sendMessage('Change slice from slice plane',\
1163 (self.orientation, pos)) 1156 (self.orientation, pos))
1164 1157
@@ -1179,7 +1172,6 @@ class Viewer(wx.Panel): @@ -1179,7 +1172,6 @@ class Viewer(wx.Panel):
1179 1172
1180 def OnScrollBarRelease(self, evt): 1173 def OnScrollBarRelease(self, evt):
1181 pos = self.scroll.GetThumbPosition() 1174 pos = self.scroll.GetThumbPosition()
1182 - #self.UpdateSlice3D(pos)  
1183 evt.Skip() 1175 evt.Skip()
1184 1176
1185 def OnKeyDown(self, evt=None, obj=None): 1177 def OnKeyDown(self, evt=None, obj=None):
invesalius/data/viewer_volume.py
@@ -806,6 +806,7 @@ class SlicePlane: @@ -806,6 +806,7 @@ class SlicePlane:
806 ps.Publisher().subscribe(self.Enable, 'Enable plane') 806 ps.Publisher().subscribe(self.Enable, 'Enable plane')
807 ps.Publisher().subscribe(self.Disable, 'Disable plane') 807 ps.Publisher().subscribe(self.Disable, 'Disable plane')
808 ps.Publisher().subscribe(self.ChangeSlice, 'Change slice from slice plane') 808 ps.Publisher().subscribe(self.ChangeSlice, 'Change slice from slice plane')
  809 + ps.Publisher().subscribe(self.UpdateAllSlice, 'Update all slice')
809 810
810 def Create(self): 811 def Create(self):
811 plane_x = self.plane_x = vtk.vtkImagePlaneWidget() 812 plane_x = self.plane_x = vtk.vtkImagePlaneWidget()
@@ -918,6 +919,12 @@ class SlicePlane: @@ -918,6 +919,12 @@ class SlicePlane:
918 919
919 self.Render() 920 self.Render()
920 921
  922 + def UpdateAllSlice(self, pubsub_evt):
  923 + ps.Publisher().sendMessage('Update slice 3D', (self.plane_y,"CORONAL"))
  924 + ps.Publisher().sendMessage('Update slice 3D', (self.plane_x,"SAGITAL"))
  925 + ps.Publisher().sendMessage('Update slice 3D', (self.plane_z,"AXIAL"))
  926 +
  927 +
921 def DeletePlanes(self): 928 def DeletePlanes(self):
922 del self.plane_x 929 del self.plane_x
923 del self.plane_y 930 del self.plane_y