Commit 35e84cbf35bb9e66f8b9a9e3f18cb69e7ef34896
1 parent
2b068431
Exists in
measure_improvements
melhorias
Showing
3 changed files
with
18 additions
and
11 deletions
Show diff stats
invesalius/data/measures.py
@@ -490,6 +490,7 @@ class LinearMeasure(object): | @@ -490,6 +490,7 @@ class LinearMeasure(object): | ||
490 | a.GetPositionCoordinate().SetCoordinateSystemToWorld() | 490 | a.GetPositionCoordinate().SetCoordinateSystemToWorld() |
491 | a.GetPositionCoordinate().SetValue(x,y,z) | 491 | a.GetPositionCoordinate().SetValue(x,y,z) |
492 | a.GetProperty().SetColor((0, 1, 0)) | 492 | a.GetProperty().SetColor((0, 1, 0)) |
493 | + a.GetProperty().SetOpacity(0.75) | ||
493 | self.text_actor = a | 494 | self.text_actor = a |
494 | 495 | ||
495 | def GetNumberOfPoints(self): | 496 | def GetNumberOfPoints(self): |
invesalius/data/styles.py
@@ -389,7 +389,7 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | @@ -389,7 +389,7 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | ||
389 | ((x, y,z), const.LINEAR, | 389 | ((x, y,z), const.LINEAR, |
390 | ORIENTATIONS[self.orientation], | 390 | ORIENTATIONS[self.orientation], |
391 | slice_number, self.radius)) | 391 | slice_number, self.radius)) |
392 | - self.viewer.interactor.Render() | 392 | + Publisher.sendMessage('Reload actual slice %s' % self.orientation) |
393 | 393 | ||
394 | def OnReleaseMeasurePoint(self, obj, evt): | 394 | def OnReleaseMeasurePoint(self, obj, evt): |
395 | if self.selected: | 395 | if self.selected: |
@@ -405,7 +405,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | @@ -405,7 +405,8 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | ||
405 | mr.SetPoint2(x, y, z) | 405 | mr.SetPoint2(x, y, z) |
406 | m.points[1] = x, y, z | 406 | m.points[1] = x, y, z |
407 | 407 | ||
408 | - self.viewer.interactor.Render() | 408 | + m.value = mr.GetValue() |
409 | + | ||
409 | Publisher.sendMessage('Reload actual slice %s' % self.orientation) | 410 | Publisher.sendMessage('Reload actual slice %s' % self.orientation) |
410 | self.selected = None | 411 | self.selected = None |
411 | 412 | ||
@@ -423,7 +424,6 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | @@ -423,7 +424,6 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | ||
423 | mr.SetPoint2(x, y, z) | 424 | mr.SetPoint2(x, y, z) |
424 | m.points[1] = x, y, z | 425 | m.points[1] = x, y, z |
425 | 426 | ||
426 | - self.viewer.interactor.Render() | ||
427 | Publisher.sendMessage('Reload actual slice %s' % self.orientation) | 427 | Publisher.sendMessage('Reload actual slice %s' % self.orientation) |
428 | 428 | ||
429 | def CleanUp(self): | 429 | def CleanUp(self): |
@@ -441,12 +441,20 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | @@ -441,12 +441,20 @@ class LinearMeasureInteractorStyle(DefaultInteractorStyle): | ||
441 | 441 | ||
442 | def _verify_clicked(self, x, y, z): | 442 | def _verify_clicked(self, x, y, z): |
443 | slice_number = self.slice_data.number | 443 | slice_number = self.slice_data.number |
444 | + sx, sy, sz = self.viewer.slice_.spacing | ||
445 | + if self.orientation == "AXIAL": | ||
446 | + max_dist = 2 * max(sx, sy) | ||
447 | + elif self.orientation == "CORONAL": | ||
448 | + max_dist = 2 * max(sx, sz) | ||
449 | + elif self.orientation == "SAGITAL": | ||
450 | + max_dist = 2 * max(sy, sz) | ||
451 | + | ||
444 | if slice_number in self.measures.measures[self._ori]: | 452 | if slice_number in self.measures.measures[self._ori]: |
445 | for m, mr in self.measures.measures[self._ori][slice_number]: | 453 | for m, mr in self.measures.measures[self._ori][slice_number]: |
446 | for n, p in enumerate(m.points): | 454 | for n, p in enumerate(m.points): |
447 | px, py, pz = p | 455 | px, py, pz = p |
448 | dist = ((px-x)**2 + (py-y)**2 + (pz-z)**2)**0.5 | 456 | dist = ((px-x)**2 + (py-y)**2 + (pz-z)**2)**0.5 |
449 | - if dist < 2: | 457 | + if dist < max_dist: |
450 | return (n, m, mr) | 458 | return (n, m, mr) |
451 | return None | 459 | return None |
452 | 460 |
invesalius/data/viewer_slice.py
@@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||
19 | # detalhes. | 19 | # detalhes. |
20 | #-------------------------------------------------------------------------- | 20 | #-------------------------------------------------------------------------- |
21 | 21 | ||
22 | +import collections | ||
22 | import itertools | 23 | import itertools |
23 | import tempfile | 24 | import tempfile |
24 | 25 | ||
@@ -172,7 +173,7 @@ class Viewer(wx.Panel): | @@ -172,7 +173,7 @@ class Viewer(wx.Panel): | ||
172 | self.orientation_texts = [] | 173 | self.orientation_texts = [] |
173 | 174 | ||
174 | self.measures = measures.MeasureData() | 175 | self.measures = measures.MeasureData() |
175 | - self.actors_by_slice_number = {} | 176 | + self.actors_by_slice_number = collections.defaultdict(list) |
176 | self.renderers_by_slice_number = {} | 177 | self.renderers_by_slice_number = {} |
177 | 178 | ||
178 | self.orientation = orientation | 179 | self.orientation = orientation |
@@ -1178,9 +1179,9 @@ class Viewer(wx.Panel): | @@ -1178,9 +1179,9 @@ class Viewer(wx.Panel): | ||
1178 | image = self.slice_.GetSlices(self.orientation, index, | 1179 | image = self.slice_.GetSlices(self.orientation, index, |
1179 | self.number_slices, inverted, border_size) | 1180 | self.number_slices, inverted, border_size) |
1180 | self.slice_data.actor.SetInputData(image) | 1181 | self.slice_data.actor.SetInputData(image) |
1181 | - for actor in self.actors_by_slice_number.get(self.slice_data.number, []): | 1182 | + for actor in self.actors_by_slice_number[self.slice_data.number]: |
1182 | self.slice_data.renderer.RemoveActor(actor) | 1183 | self.slice_data.renderer.RemoveActor(actor) |
1183 | - for actor in self.actors_by_slice_number.get(index, []): | 1184 | + for actor in self.actors_by_slice_number[index]: |
1184 | self.slice_data.renderer.AddActor(actor) | 1185 | self.slice_data.renderer.AddActor(actor) |
1185 | 1186 | ||
1186 | for (m, mr) in self.measures[self.orientation].get(self.slice_data.number, []): | 1187 | for (m, mr) in self.measures[self.orientation].get(self.slice_data.number, []): |
@@ -1247,10 +1248,7 @@ class Viewer(wx.Panel): | @@ -1247,10 +1248,7 @@ class Viewer(wx.Panel): | ||
1247 | for actor in actors: | 1248 | for actor in actors: |
1248 | self.slice_data.renderer.AddActor(actor) | 1249 | self.slice_data.renderer.AddActor(actor) |
1249 | 1250 | ||
1250 | - try: | ||
1251 | - self.actors_by_slice_number[n].extend(actors) | ||
1252 | - except KeyError: | ||
1253 | - self.actors_by_slice_number[n] = list(actors) | 1251 | + self.actors_by_slice_number[n].extend(actors) |
1254 | 1252 | ||
1255 | def RemoveActors(self, pubsub_evt): | 1253 | def RemoveActors(self, pubsub_evt): |
1256 | "Remove a list of actors" | 1254 | "Remove a list of actors" |