Commit d66bacece62858ea62e650462449be16998a5ba2

Authored by Paulo Henrique Junqueira Amorim
1 parent 7d09e69f

ADD: Planes with slices in volume or surface

invesalius/data/slice_.py
... ... @@ -58,6 +58,8 @@ class Slice(object):
58 58  
59 59 ps.Publisher().subscribe(self.UpdateColourTableBackground,\
60 60 'Change colour table from background image')
  61 +
  62 + ps.Publisher().subscribe(self.InputImageWidget, 'Input Image in the widget')
61 63  
62 64 def __set_current_mask_threshold_limits(self, pubsub_evt):
63 65 thresh_min = pubsub_evt.data[0]
... ... @@ -427,7 +429,19 @@ class Slice(object):
427 429 thresh_min, thresh_max = self.window_level.GetOutput().GetScalarRange()
428 430 self.lut_bg.SetTableRange(thresh_min, thresh_max)
429 431  
430   -
  432 +
  433 + def InputImageWidget(self, pubsub_evt):
  434 + widget = pubsub_evt.data
  435 +
  436 + flip = vtk.vtkImageFlip()
  437 + flip.SetInput(self.window_level.GetOutput())
  438 + flip.SetFilteredAxis(1)
  439 + flip.FlipAboutOriginOn()
  440 + flip.Update()
  441 +
  442 + widget.SetInput(flip.GetOutput())
  443 +
  444 +
431 445 def CreateMask(self, imagedata=None, name=None):
432 446  
433 447 future_mask = Mask()
... ...
invesalius/data/viewer_volume.py
... ... @@ -71,7 +71,7 @@ class Viewer(wx.Panel):
71 71  
72 72 self.__bind_events()
73 73 self.__bind_events_wx()
74   -
  74 +
75 75  
76 76 def OnMove(self, obj, evt):
77 77 if self.onclick and self.raycasting_volume:
... ... @@ -234,17 +234,21 @@ class Viewer(wx.Panel):
234 234 self.text.SetValue("WL: %d WW: %d"%(wl, ww))
235 235 self.ren.AddActor(self.text.actor)
236 236 self.ren.SetBackground(colour)
237   -
238   -
  237 +
239 238 if not (self.view_angle):
240 239 self.SetViewAngle(const.VOL_FRONT)
241 240 else:
242 241 self.ren.ResetCamera()
243 242 self.ren.ResetCameraClippingRange()
244 243  
245   -
246 244 self.UpdateRender()
247 245  
  246 + def LoadPlane(self):
  247 + self.plane = SlicePlane()
  248 + self.plane.EnableX()
  249 + self.plane.EnableY()
  250 + self.plane.EnableZ()
  251 +
248 252 def ChangeBackgroundColour(self, pubsub_evt):
249 253 colour = pubsub_evt.data
250 254 self.ren.SetBackground(colour)
... ... @@ -263,7 +267,6 @@ class Viewer(wx.Panel):
263 267 ren.ResetCamera()
264 268 ren.ResetCameraClippingRange()
265 269  
266   -
267 270 #self.ShowOrientationCube()
268 271  
269 272 self.interactor.Render()
... ... @@ -292,40 +295,92 @@ class Viewer(wx.Panel):
292 295  
293 296 def UpdateRender(self, evt_pubsub=None):
294 297 self.interactor.Render()
295   -
296   - def CreatePlanes(self):
297   -
298   - imagedata = self.imagedata
299   - ren = self.ren
300   - interactor = self.interactor
301   -
302   - import ivVolumeWidgets as vw
303   - axial_plane = vw.Plane()
304   - axial_plane.SetRender(ren)
305   - axial_plane.SetInteractor(interactor)
306   - axial_plane.SetOrientation(vw.AXIAL)
307   - axial_plane.SetInput(imagedata)
308   - axial_plane.Show()
309   - axial_plane.Update()
310   -
311   - coronal_plane = vw.Plane()
312   - coronal_plane.SetRender(ren)
313   - coronal_plane.SetInteractor(interactor)
314   - coronal_plane.SetOrientation(vw.CORONAL)
315   - coronal_plane.SetInput(imagedata)
316   - coronal_plane.Show()
317   - coronal_plane.Update()
318   -
319   - sagital_plane = vw.Plane()
320   - sagital_plane.SetRender(ren)
321   - sagital_plane.SetInteractor(interactor)
322   - sagital_plane.SetOrientation(vw.SAGITAL)
323   - sagital_plane.SetInput(imagedata)
324   - sagital_plane.Show()
325   - sagital_plane.Update()
326 298  
327 299 def SetWidgetInteractor(self, evt_pubsub=None):
328 300 evt_pubsub.data.SetInteractor(self.interactor._Iren)
329 301  
330 302 def AppendActor(self, evt_pubsub=None):
331 303 self.ren.AddActor(evt_pubsub.data)
  304 +
  305 +
  306 +
  307 +
  308 +class SlicePlane:
  309 +
  310 + def __init__(self):
  311 +
  312 + self.Create()
  313 + self.__bind_events()
  314 +
  315 + def __bind_events(self):
  316 + self.plane_x.AddObserver("InteractionEvent", self.Update)
  317 +
  318 + def Create(self):
  319 +
  320 + plane_x = self.plane_x = vtk.vtkImagePlaneWidget()
  321 + plane_x.DisplayTextOff()
  322 + ps.Publisher().sendMessage('Input Image in the widget', plane_x)
  323 + plane_x.SetPlaneOrientationToXAxes()
  324 + plane_x.TextureVisibilityOn()
  325 + plane_x.SetLeftButtonAction(1)
  326 + plane_x.SetRightButtonAction(0)
  327 + prop1 = plane_x.GetPlaneProperty()
  328 + prop1.SetColor(0, 0, 1)
  329 + cursor_property = plane_x.GetCursorProperty()
  330 + cursor_property.SetOpacity(0)
  331 +
  332 + plane_y = self.plane_y = vtk.vtkImagePlaneWidget()
  333 + plane_y.DisplayTextOff()
  334 + ps.Publisher().sendMessage('Input Image in the widget', plane_y)
  335 + plane_y.SetPlaneOrientationToYAxes()
  336 + plane_y.TextureVisibilityOn()
  337 + plane_y.SetLeftButtonAction(1)
  338 + plane_y.SetRightButtonAction(0)
  339 + prop1 = plane_y.GetPlaneProperty()
  340 + prop1.SetColor(0, 1, 0)
  341 + cursor_property = plane_y.GetCursorProperty()
  342 + cursor_property.SetOpacity(0)
  343 +
  344 + plane_z = self.plane_z = vtk.vtkImagePlaneWidget()
  345 + plane_z.DisplayTextOff()
  346 + ps.Publisher().sendMessage('Input Image in the widget', plane_z)
  347 + plane_z.SetPlaneOrientationToZAxes()
  348 + plane_z.TextureVisibilityOn()
  349 + plane_z.SetLeftButtonAction(1)
  350 + plane_z.SetRightButtonAction(0)
  351 + prop1 = plane_z.GetPlaneProperty()
  352 + prop1.SetColor(1, 0, 0)
  353 + cursor_property = plane_z.GetCursorProperty()
  354 + cursor_property.SetOpacity(0)
  355 +
  356 + ps.Publisher().sendMessage('Set Widget Interactor', plane_x)
  357 + ps.Publisher().sendMessage('Set Widget Interactor', plane_y)
  358 + ps.Publisher().sendMessage('Set Widget Interactor', plane_z)
  359 +
  360 + def EnableX(self, evt_pubsub=None):
  361 + self.plane_x.On()
  362 + self.Update()
  363 +
  364 + def EnableY(self, evt_pubsub=None):
  365 + self.plane_y.On()
  366 + self.Update()
  367 +
  368 + def EnableZ(self, evt_pubsub=None):
  369 + self.plane_z.On()
  370 + self.Update()
  371 +
  372 + def DisableX(self, evt_pubsub=None):
  373 + self.plane_x.Off()
  374 + self.Update()
  375 +
  376 + def DisableY(self, evt_pubsub=None):
  377 + self.plane_y.Off()
  378 + self.Update()
  379 +
  380 + def DisableZ(self, evt_pubsub=None):
  381 + self.plane_z.Off()
  382 + self.Update()
  383 +
  384 + def Update(self, obj, evt):
  385 + ps.Publisher().sendMessage('Render volume viewer', None)
  386 +
332 387 \ No newline at end of file
... ...