From 3ecbb5f87d2bdd3e343e3db26cc4298285e258fc Mon Sep 17 00:00:00 2001 From: Thiago Franco de Moraes Date: Fri, 22 Mar 2013 16:38:50 -0300 Subject: [PATCH] Created a new interactor style to handle angular measurements --- invesalius/data/styles.py | 35 +++++++++++++++++++++++++++++++++-- invesalius/data/viewer_slice.py | 6 ++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/invesalius/data/styles.py b/invesalius/data/styles.py index a99c392..81a01ba 100644 --- a/invesalius/data/styles.py +++ b/invesalius/data/styles.py @@ -223,6 +223,9 @@ class WWWLInteractorStyle(ZoomInteractorStyle): class LinearMeasure(ZoomInteractorStyle): + """ + Interactor style responsible for insert linear measures. + """ def __init__(self, orientation, slice_data): ZoomInteractorStyle.__init__(self) @@ -240,15 +243,43 @@ class LinearMeasure(ZoomInteractorStyle): slice_number = self.slice_data.number self.picker.Pick(x, y, 0, render) x, y, z = self.picker.GetPickPosition() - print x, y, z if self.picker.GetViewProp(): - self.render_to_add = self.slice_data.renderer Publisher.sendMessage("Add measurement point", ((x, y,z), const.LINEAR, ORIENTATIONS[self.orientation], slice_number)) Publisher.sendMessage('Update slice viewer') + +class AngularMeasure(ZoomInteractorStyle): + """ + Interactor style responsible for insert angular measurements. + """ + def __init__(self, orientation, slice_data): + ZoomInteractorStyle.__init__(self) + + self.orientation = orientation + self.slice_data = slice_data + + self.picker = vtk.vtkCellPicker() + + self.AddObserver("LeftButtonPressEvent", self.OnInsertAngularMeasurePoint) + + def OnInsertAngularMeasurePoint(self, obj, evt): + iren = obj.GetInteractor() + x,y = iren.GetEventPosition() + render = iren.FindPokedRenderer(x, y) + slice_number = self.slice_data.number + self.picker.Pick(x, y, 0, render) + x, y, z = self.picker.GetPickPosition() + if self.picker.GetViewProp(): + Publisher.sendMessage("Add measurement point", + ((x, y,z), const.ANGULAR, + ORIENTATIONS[self.orientation], + slice_number)) + Publisher.sendMessage('Update slice viewer') + + class ViewerStyle: def __init__(self): self.interactor = None diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index ff08e8c..04007a1 100755 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -211,6 +211,12 @@ class Viewer(wx.Panel): self.interactor.SetInteractorStyle(style) self.interactor.Render() + elif state == const.STATE_MEASURE_ANGLE: + style = styles.AngularMeasure(self.orientation, self.slice_data) + self.style = style + self.interactor.SetInteractorStyle(style) + self.interactor.Render() + else: self.state = state action = { -- libgit2 0.21.2