diff --git a/invesalius/data/measures.py b/invesalius/data/measures.py index a8a9798..5e6199b 100644 --- a/invesalius/data/measures.py +++ b/invesalius/data/measures.py @@ -490,6 +490,7 @@ class LinearMeasure(object): a.GetPositionCoordinate().SetCoordinateSystemToWorld() a.GetPositionCoordinate().SetValue(x,y,z) a.GetProperty().SetColor((0, 1, 0)) + a.GetProperty().SetOpacity(0.75) self.text_actor = a def GetNumberOfPoints(self): diff --git a/invesalius/data/styles.py b/invesalius/data/styles.py index b79553b..4bb3b88 100644 --- a/invesalius/data/styles.py +++ b/invesalius/data/styles.py @@ -389,7 +389,7 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): ((x, y,z), const.LINEAR, ORIENTATIONS[self.orientation], slice_number, self.radius)) - self.viewer.interactor.Render() + Publisher.sendMessage('Reload actual slice %s' % self.orientation) def OnReleaseMeasurePoint(self, obj, evt): if self.selected: @@ -405,7 +405,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): mr.SetPoint2(x, y, z) m.points[1] = x, y, z - self.viewer.interactor.Render() + m.value = mr.GetValue() + Publisher.sendMessage('Reload actual slice %s' % self.orientation) self.selected = None @@ -423,7 +424,6 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): mr.SetPoint2(x, y, z) m.points[1] = x, y, z - self.viewer.interactor.Render() Publisher.sendMessage('Reload actual slice %s' % self.orientation) def CleanUp(self): @@ -441,12 +441,20 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): def _verify_clicked(self, x, y, z): slice_number = self.slice_data.number + sx, sy, sz = self.viewer.slice_.spacing + if self.orientation == "AXIAL": + max_dist = 2 * max(sx, sy) + elif self.orientation == "CORONAL": + max_dist = 2 * max(sx, sz) + elif self.orientation == "SAGITAL": + max_dist = 2 * max(sy, sz) + if slice_number in self.measures.measures[self._ori]: for m, mr in self.measures.measures[self._ori][slice_number]: for n, p in enumerate(m.points): px, py, pz = p dist = ((px-x)**2 + (py-y)**2 + (pz-z)**2)**0.5 - if dist < 2: + if dist < max_dist: return (n, m, mr) return None diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index 3974599..212a8dc 100755 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -19,6 +19,7 @@ # detalhes. #-------------------------------------------------------------------------- +import collections import itertools import tempfile @@ -172,7 +173,7 @@ class Viewer(wx.Panel): self.orientation_texts = [] self.measures = measures.MeasureData() - self.actors_by_slice_number = {} + self.actors_by_slice_number = collections.defaultdict(list) self.renderers_by_slice_number = {} self.orientation = orientation @@ -1178,9 +1179,9 @@ class Viewer(wx.Panel): image = self.slice_.GetSlices(self.orientation, index, self.number_slices, inverted, border_size) self.slice_data.actor.SetInputData(image) - for actor in self.actors_by_slice_number.get(self.slice_data.number, []): + for actor in self.actors_by_slice_number[self.slice_data.number]: self.slice_data.renderer.RemoveActor(actor) - for actor in self.actors_by_slice_number.get(index, []): + for actor in self.actors_by_slice_number[index]: self.slice_data.renderer.AddActor(actor) for (m, mr) in self.measures[self.orientation].get(self.slice_data.number, []): @@ -1247,10 +1248,7 @@ class Viewer(wx.Panel): for actor in actors: self.slice_data.renderer.AddActor(actor) - try: - self.actors_by_slice_number[n].extend(actors) - except KeyError: - self.actors_by_slice_number[n] = list(actors) + self.actors_by_slice_number[n].extend(actors) def RemoveActors(self, pubsub_evt): "Remove a list of actors" -- libgit2 0.21.2