Commit aefd974a410622be9d300330702a99e5b76a51f4
1 parent
13f819f7
Exists in
interactor_style
Created a new interactor style to handle Linear measure
Showing
2 changed files
with
39 additions
and
19 deletions
Show diff stats
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) | ... | ... |