Commit 3ecbb5f87d2bdd3e343e3db26cc4298285e258fc
1 parent
aefd974a
Exists in
interactor_style
Created a new interactor style to handle angular measurements
Showing
2 changed files
with
39 additions
and
2 deletions
Show diff stats
invesalius/data/styles.py
| ... | ... | @@ -223,6 +223,9 @@ class WWWLInteractorStyle(ZoomInteractorStyle): |
| 223 | 223 | |
| 224 | 224 | |
| 225 | 225 | class LinearMeasure(ZoomInteractorStyle): |
| 226 | + """ | |
| 227 | + Interactor style responsible for insert linear measures. | |
| 228 | + """ | |
| 226 | 229 | def __init__(self, orientation, slice_data): |
| 227 | 230 | ZoomInteractorStyle.__init__(self) |
| 228 | 231 | |
| ... | ... | @@ -240,15 +243,43 @@ class LinearMeasure(ZoomInteractorStyle): |
| 240 | 243 | slice_number = self.slice_data.number |
| 241 | 244 | self.picker.Pick(x, y, 0, render) |
| 242 | 245 | x, y, z = self.picker.GetPickPosition() |
| 243 | - print x, y, z | |
| 244 | 246 | if self.picker.GetViewProp(): |
| 245 | - self.render_to_add = self.slice_data.renderer | |
| 246 | 247 | Publisher.sendMessage("Add measurement point", |
| 247 | 248 | ((x, y,z), const.LINEAR, |
| 248 | 249 | ORIENTATIONS[self.orientation], |
| 249 | 250 | slice_number)) |
| 250 | 251 | Publisher.sendMessage('Update slice viewer') |
| 251 | 252 | |
| 253 | + | |
| 254 | +class AngularMeasure(ZoomInteractorStyle): | |
| 255 | + """ | |
| 256 | + Interactor style responsible for insert angular measurements. | |
| 257 | + """ | |
| 258 | + def __init__(self, orientation, slice_data): | |
| 259 | + ZoomInteractorStyle.__init__(self) | |
| 260 | + | |
| 261 | + self.orientation = orientation | |
| 262 | + self.slice_data = slice_data | |
| 263 | + | |
| 264 | + self.picker = vtk.vtkCellPicker() | |
| 265 | + | |
| 266 | + self.AddObserver("LeftButtonPressEvent", self.OnInsertAngularMeasurePoint) | |
| 267 | + | |
| 268 | + def OnInsertAngularMeasurePoint(self, obj, evt): | |
| 269 | + iren = obj.GetInteractor() | |
| 270 | + x,y = iren.GetEventPosition() | |
| 271 | + render = iren.FindPokedRenderer(x, y) | |
| 272 | + slice_number = self.slice_data.number | |
| 273 | + self.picker.Pick(x, y, 0, render) | |
| 274 | + x, y, z = self.picker.GetPickPosition() | |
| 275 | + if self.picker.GetViewProp(): | |
| 276 | + Publisher.sendMessage("Add measurement point", | |
| 277 | + ((x, y,z), const.ANGULAR, | |
| 278 | + ORIENTATIONS[self.orientation], | |
| 279 | + slice_number)) | |
| 280 | + Publisher.sendMessage('Update slice viewer') | |
| 281 | + | |
| 282 | + | |
| 252 | 283 | class ViewerStyle: |
| 253 | 284 | def __init__(self): |
| 254 | 285 | self.interactor = None | ... | ... |
invesalius/data/viewer_slice.py
| ... | ... | @@ -211,6 +211,12 @@ class Viewer(wx.Panel): |
| 211 | 211 | self.interactor.SetInteractorStyle(style) |
| 212 | 212 | self.interactor.Render() |
| 213 | 213 | |
| 214 | + elif state == const.STATE_MEASURE_ANGLE: | |
| 215 | + style = styles.AngularMeasure(self.orientation, self.slice_data) | |
| 216 | + self.style = style | |
| 217 | + self.interactor.SetInteractorStyle(style) | |
| 218 | + self.interactor.Render() | |
| 219 | + | |
| 214 | 220 | else: |
| 215 | 221 | self.state = state |
| 216 | 222 | action = { | ... | ... |