Commit e5349ae2bcb47728d4148adde4547f6f2582b3d9
1 parent
973bc3c1
Exists in
measure_improvements
Picking only the slice actor when adding measure
Showing
3 changed files
with
27 additions
and
4 deletions
Show diff stats
invesalius/data/measures.py
... | ... | @@ -10,6 +10,7 @@ import vtk |
10 | 10 | import constants as const |
11 | 11 | import project as prj |
12 | 12 | import session as ses |
13 | +import utils | |
13 | 14 | |
14 | 15 | TYPE = {const.LINEAR: _(u"Linear"), |
15 | 16 | const.ANGULAR: _(u"Angular"), |
... | ... | @@ -26,6 +27,7 @@ class MeasureData: |
26 | 27 | """ |
27 | 28 | Responsible to keep measures data. |
28 | 29 | """ |
30 | + __metaclass__= utils.Singleton | |
29 | 31 | def __init__(self): |
30 | 32 | self.measures = {const.SURFACE: {}, |
31 | 33 | const.AXIAL: {}, |
... | ... | @@ -34,7 +36,6 @@ class MeasureData: |
34 | 36 | self._list_measures = [] |
35 | 37 | |
36 | 38 | def append(self, m): |
37 | - print m[0].location, m[0].slice_number | |
38 | 39 | try: |
39 | 40 | self.measures[m[0].location][m[0].slice_number].append(m) |
40 | 41 | except KeyError: | ... | ... |
invesalius/data/styles.py
... | ... | @@ -40,6 +40,8 @@ from scipy.ndimage import watershed_ift, generate_binary_structure |
40 | 40 | from skimage.morphology import watershed |
41 | 41 | from skimage import filter |
42 | 42 | |
43 | +from .measures import MeasureData | |
44 | + | |
43 | 45 | import watershed_process |
44 | 46 | |
45 | 47 | import utils |
... | ... | @@ -350,28 +352,37 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): |
350 | 352 | self.orientation = viewer.orientation |
351 | 353 | self.slice_data = viewer.slice_data |
352 | 354 | |
355 | + self.measures = MeasureData() | |
356 | + | |
353 | 357 | spacing = self.slice_data.actor.GetInput().GetSpacing() |
354 | 358 | |
355 | 359 | if self.orientation == "AXIAL": |
356 | 360 | self.radius = min(spacing[1], spacing[2]) * 0.8 |
361 | + self._ori = const.AXIAL | |
357 | 362 | |
358 | 363 | elif self.orientation == 'CORONAL': |
359 | 364 | self.radius = min(spacing[0], spacing[1]) * 0.8 |
365 | + self._ori = const.CORONAL | |
360 | 366 | |
361 | 367 | elif self.orientation == 'SAGITAL': |
362 | 368 | self.radius = min(spacing[1], spacing[2]) * 0.8 |
369 | + self._ori = const.SAGITAL | |
363 | 370 | |
364 | 371 | self.picker = vtk.vtkCellPicker() |
372 | + self.picker.PickFromListOn() | |
365 | 373 | |
366 | 374 | self.AddObserver("LeftButtonPressEvent", self.OnInsertLinearMeasurePoint) |
367 | 375 | |
368 | 376 | def OnInsertLinearMeasurePoint(self, obj, evt): |
369 | 377 | iren = obj.GetInteractor() |
370 | - x,y = iren.GetEventPosition() | |
371 | - render = iren.FindPokedRenderer(x, y) | |
378 | + mx,my = iren.GetEventPosition() | |
379 | + render = iren.FindPokedRenderer(mx, my) | |
372 | 380 | slice_number = self.slice_data.number |
373 | - self.picker.Pick(x, y, 0, render) | |
381 | + self.picker.AddPickList(self.slice_data.actor) | |
382 | + self.picker.Pick(mx, my, 0, render) | |
374 | 383 | x, y, z = self.picker.GetPickPosition() |
384 | + self.picker.DeletePickList(self.slice_data.actor) | |
385 | + | |
375 | 386 | if self.picker.GetViewProp(): |
376 | 387 | Publisher.sendMessage("Add measurement point", |
377 | 388 | ((x, y,z), const.LINEAR, |
... | ... | @@ -379,6 +390,7 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): |
379 | 390 | slice_number, self.radius)) |
380 | 391 | self.viewer.interactor.Render() |
381 | 392 | |
393 | + | |
382 | 394 | def CleanUp(self): |
383 | 395 | Publisher.sendMessage("Remove incomplete measurements") |
384 | 396 | ... | ... |
invesalius/utils.py
... | ... | @@ -23,6 +23,8 @@ import re |
23 | 23 | import locale |
24 | 24 | import math |
25 | 25 | |
26 | +import numpy as np | |
27 | + | |
26 | 28 | def format_time(value): |
27 | 29 | sp1 = value.split(".") |
28 | 30 | sp2 = value.split(":") |
... | ... | @@ -418,3 +420,11 @@ def UpdateCheck(): |
418 | 420 | if (last!=const.INVESALIUS_VERSION): |
419 | 421 | print " ...New update found!!! -> version:", last #, ", url=",url |
420 | 422 | wx.CallAfter(wx.CallLater, 1000, _show_update_info) |
423 | + | |
424 | + | |
425 | +def vtkarray_to_numpy(m): | |
426 | + nm = np.zeros((4, 4)) | |
427 | + for i in xrange(4): | |
428 | + for j in xrange(4): | |
429 | + nm[i, j] = m.GetElement(i, j) | |
430 | + return nm | ... | ... |