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 = { | ... | ... |