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" |