Commit aefd974a410622be9d300330702a99e5b76a51f4

Authored by Thiago Franco de Moraes
1 parent 13f819f7
Exists in interactor_style

Created a new interactor style to handle Linear measure

invesalius/data/styles.py
... ... @@ -23,6 +23,12 @@ from wx.lib.pubsub import pub as Publisher
23 23  
24 24 import constants as const
25 25  
  26 +ORIENTATIONS = {
  27 + "AXIAL": const.AXIAL,
  28 + "CORONAL": const.CORONAL,
  29 + "SAGITAL": const.SAGITAL,
  30 + }
  31 +
26 32 class BaseImageInteractorStyle(vtk.vtkInteractorStyleImage):
27 33 def __init__(self):
28 34 self.right_pressed = False
... ... @@ -216,6 +222,33 @@ class WWWLInteractorStyle(ZoomInteractorStyle):
216 222 self.last_x, self.last_y = iren.GetLastEventPosition()
217 223  
218 224  
  225 +class LinearMeasure(ZoomInteractorStyle):
  226 + def __init__(self, orientation, slice_data):
  227 + ZoomInteractorStyle.__init__(self)
  228 +
  229 + self.orientation = orientation
  230 + self.slice_data = slice_data
  231 +
  232 + self.picker = vtk.vtkCellPicker()
  233 +
  234 + self.AddObserver("LeftButtonPressEvent", self.OnInsertLinearMeasurePoint)
  235 +
  236 + def OnInsertLinearMeasurePoint(self, obj, evt):
  237 + iren = obj.GetInteractor()
  238 + x,y = iren.GetEventPosition()
  239 + render = iren.FindPokedRenderer(x, y)
  240 + slice_number = self.slice_data.number
  241 + self.picker.Pick(x, y, 0, render)
  242 + x, y, z = self.picker.GetPickPosition()
  243 + print x, y, z
  244 + if self.picker.GetViewProp():
  245 + self.render_to_add = self.slice_data.renderer
  246 + Publisher.sendMessage("Add measurement point",
  247 + ((x, y,z), const.LINEAR,
  248 + ORIENTATIONS[self.orientation],
  249 + slice_number))
  250 + Publisher.sendMessage('Update slice viewer')
  251 +
219 252 class ViewerStyle:
220 253 def __init__(self):
221 254 self.interactor = None
... ...
invesalius/data/viewer_slice.py
... ... @@ -205,6 +205,12 @@ class Viewer(wx.Panel):
205 205 self.interactor.SetInteractorStyle(style)
206 206 self.interactor.Render()
207 207  
  208 + elif state == const.STATE_MEASURE_DISTANCE:
  209 + style = styles.LinearMeasure(self.orientation, self.slice_data)
  210 + self.style = style
  211 + self.interactor.SetInteractorStyle(style)
  212 + self.interactor.Render()
  213 +
208 214 else:
209 215 self.state = state
210 216 action = {
... ... @@ -242,10 +248,6 @@ class Viewer(wx.Panel):
242 248 const.STATE_DEFAULT:
243 249 {
244 250 },
245   - const.STATE_MEASURE_DISTANCE:
246   - {
247   - "LeftButtonPressEvent": self.OnInsertLinearMeasurePoint
248   - },
249 251 const.STATE_MEASURE_ANGLE:
250 252 {
251 253 "LeftButtonPressEvent": self.OnInsertAngularMeasurePoint
... ... @@ -1451,21 +1453,6 @@ class Viewer(wx.Panel):
1451 1453 coord[index] = extent_min[index]
1452 1454 return coord
1453 1455  
1454   - def OnInsertLinearMeasurePoint(self, obj, evt):
1455   - x,y = self.interactor.GetEventPosition()
1456   - render = self.interactor.FindPokedRenderer(x, y)
1457   - slice_data = self.get_slice_data(render)
1458   - slice_number = slice_data.number
1459   - self.pick.Pick(x, y, 0, render)
1460   - x, y, z = self.pick.GetPickPosition()
1461   - print x, y, z
1462   - if self.pick.GetViewProp():
1463   - self.render_to_add = slice_data.renderer
1464   - Publisher.sendMessage("Add measurement point",
1465   - ((x, y,z), const.LINEAR, ORIENTATIONS[self.orientation],
1466   - slice_number))
1467   - self.interactor.Render()
1468   -
1469 1456 def OnInsertAngularMeasurePoint(self, obj, evt):
1470 1457 x,y = self.interactor.GetEventPosition()
1471 1458 render = self.interactor.FindPokedRenderer(x, y)
... ...