Commit 900a2fafea57ae0592fb69e6d05923bb5ee4a5f8
1 parent
f8b595d9
Exists in
master
FIX: standardized viewer volume marker id
Showing
2 changed files
with
57 additions
and
60 deletions
Show diff stats
invesalius/data/viewer_volume.py
| ... | ... | @@ -281,7 +281,6 @@ class Viewer(wx.Panel): |
| 281 | 281 | |
| 282 | 282 | # Related to marker creation in navigation tools |
| 283 | 283 | Publisher.subscribe(self.AddMarker, 'Add marker') |
| 284 | - Publisher.subscribe(self.AddMarkerwithOrientation, 'Add arrow marker') | |
| 285 | 284 | Publisher.subscribe(self.HideAllMarkers, 'Hide all markers') |
| 286 | 285 | Publisher.subscribe(self.ShowAllMarkers, 'Show all markers') |
| 287 | 286 | Publisher.subscribe(self.RemoveAllMarkers, 'Remove all markers') |
| ... | ... | @@ -616,7 +615,7 @@ class Viewer(wx.Panel): |
| 616 | 615 | target = marker["target"] |
| 617 | 616 | |
| 618 | 617 | self.AddMarker( |
| 619 | - ball_id=ball_id, | |
| 618 | + marker_id=ball_id, | |
| 620 | 619 | size=size, |
| 621 | 620 | colour=colour, |
| 622 | 621 | coord=position, |
| ... | ... | @@ -631,49 +630,28 @@ class Viewer(wx.Panel): |
| 631 | 630 | |
| 632 | 631 | self.UpdateRender() |
| 633 | 632 | |
| 634 | - def AddMarkerwithOrientation(self, arrow_id, size, color, coord): | |
| 635 | - """ | |
| 636 | - Markers arrow with orientation created by navigation tools and rendered in volume viewer. | |
| 637 | - """ | |
| 638 | - self.arrow_marker_id = arrow_id | |
| 639 | - coord_flip = list(coord) | |
| 640 | - coord_flip[1] = -coord_flip[1] | |
| 641 | - | |
| 642 | - arrow_actor = self.Add_ObjectArrow(coord_flip[:3], coord_flip[3:6], color, size) | |
| 643 | - self.static_markers.append(arrow_actor) | |
| 644 | - self.ren.AddActor(self.static_markers[self.arrow_marker_id]) | |
| 645 | - self.arrow_marker_id += 1 | |
| 646 | - | |
| 647 | - self.Refresh() | |
| 648 | - | |
| 649 | - def AddMarker(self, ball_id, size, colour, coord): | |
| 633 | + def AddMarker(self, marker_id, size, colour, coord, arrow_flag): | |
| 650 | 634 | """ |
| 651 | 635 | Markers created by navigation tools and rendered in volume viewer. |
| 652 | 636 | """ |
| 653 | - self.ball_id = ball_id | |
| 637 | + self.marker_id = marker_id | |
| 654 | 638 | coord_flip = list(coord) |
| 655 | 639 | coord_flip[1] = -coord_flip[1] |
| 656 | 640 | |
| 657 | - ball_ref = vtk.vtkSphereSource() | |
| 658 | - ball_ref.SetRadius(size) | |
| 659 | - ball_ref.SetCenter(coord_flip) | |
| 660 | - | |
| 661 | - mapper = vtk.vtkPolyDataMapper() | |
| 662 | - mapper.SetInputConnection(ball_ref.GetOutputPort()) | |
| 663 | - | |
| 664 | - prop = vtk.vtkProperty() | |
| 665 | - prop.SetColor(colour) | |
| 666 | - | |
| 667 | - # adding a new actor for the present ball | |
| 668 | - self.static_markers.append(vtk.vtkActor()) | |
| 641 | + if arrow_flag: | |
| 642 | + """ | |
| 643 | + Markers arrow with orientation created by navigation tools and rendered in volume viewer. | |
| 644 | + """ | |
| 645 | + marker_actor = self.CreateActorArrow(coord_flip[:3], coord_flip[3:6], colour, const.ARROW_MARKER_SIZE) | |
| 646 | + else: | |
| 647 | + marker_actor = self.CreateActorBall(coord_flip[:3], colour, size) | |
| 669 | 648 | |
| 670 | - self.static_markers[self.ball_id].SetMapper(mapper) | |
| 671 | - self.static_markers[self.ball_id].SetProperty(prop) | |
| 649 | + # adding a new actor for the marker | |
| 650 | + self.static_markers.append(marker_actor) | |
| 672 | 651 | |
| 673 | - self.ren.AddActor(self.static_markers[self.ball_id]) | |
| 674 | - self.ball_id += 1 | |
| 652 | + self.ren.AddActor(self.static_markers[self.marker_id]) | |
| 653 | + self.marker_id += 1 | |
| 675 | 654 | |
| 676 | - #self.UpdateRender() | |
| 677 | 655 | self.Refresh() |
| 678 | 656 | |
| 679 | 657 | def add_marker(self, coord, color): |
| ... | ... | @@ -726,7 +704,7 @@ class Viewer(wx.Panel): |
| 726 | 704 | for i in reversed(index): |
| 727 | 705 | self.ren.RemoveActor(self.static_markers[i]) |
| 728 | 706 | del self.static_markers[i] |
| 729 | - self.ball_id = self.ball_id - 1 | |
| 707 | + self.marker_id = self.marker_id - 1 | |
| 730 | 708 | self.UpdateRender() |
| 731 | 709 | |
| 732 | 710 | def BlinkMarker(self, index): |
| ... | ... | @@ -1383,8 +1361,8 @@ class Viewer(wx.Panel): |
| 1383 | 1361 | self.y_actor = self.add_line([0., 0., 0.], [0., 1., 0.], color=[.0, 1.0, .0]) |
| 1384 | 1362 | self.z_actor = self.add_line([0., 0., 0.], [0., 0., 1.], color=[1.0, .0, .0]) |
| 1385 | 1363 | |
| 1386 | - self.obj_projection_arrow_actor = self.Add_ObjectArrow([0., 0., 0.], [0., 0., 0.], vtk_colors.GetColor3d('Red'), | |
| 1387 | - 8) | |
| 1364 | + self.obj_projection_arrow_actor = self.CreateActorArrow([0., 0., 0.], [0., 0., 0.], vtk_colors.GetColor3d('Red'), | |
| 1365 | + 8) | |
| 1388 | 1366 | self.object_orientation_torus_actor = self.Add_Torus([0., 0., 0.], [0., 0., 0.], |
| 1389 | 1367 | vtk_colors.GetColor3d('Red')) |
| 1390 | 1368 | |
| ... | ... | @@ -1449,9 +1427,24 @@ class Viewer(wx.Panel): |
| 1449 | 1427 | |
| 1450 | 1428 | return torusActor |
| 1451 | 1429 | |
| 1452 | - def Add_ObjectArrow(self, direction, orientation, color=[0.0, 0.0, 1.0], size=2): | |
| 1453 | - vtk_colors = vtk.vtkNamedColors() | |
| 1430 | + def CreateActorBall(self, coord_flip, colour=[0.0, 0.0, 1.0], size=2): | |
| 1431 | + ball_ref = vtk.vtkSphereSource() | |
| 1432 | + ball_ref.SetRadius(size) | |
| 1433 | + ball_ref.SetCenter(coord_flip) | |
| 1434 | + | |
| 1435 | + mapper = vtk.vtkPolyDataMapper() | |
| 1436 | + mapper.SetInputConnection(ball_ref.GetOutputPort()) | |
| 1437 | + | |
| 1438 | + prop = vtk.vtkProperty() | |
| 1439 | + prop.SetColor(colour) | |
| 1454 | 1440 | |
| 1441 | + actor = vtk.vtkActor() | |
| 1442 | + actor.SetMapper(mapper) | |
| 1443 | + actor.SetProperty(prop) | |
| 1444 | + | |
| 1445 | + return actor | |
| 1446 | + | |
| 1447 | + def CreateActorArrow(self, direction, orientation, colour=[0.0, 0.0, 1.0], size=const.ARROW_MARKER_SIZE): | |
| 1455 | 1448 | arrow = vtk.vtkArrowSource() |
| 1456 | 1449 | arrow.SetTipResolution(40) |
| 1457 | 1450 | arrow.SetShaftResolution(40) |
| ... | ... | @@ -1464,7 +1457,7 @@ class Viewer(wx.Panel): |
| 1464 | 1457 | |
| 1465 | 1458 | actor = vtk.vtkActor() |
| 1466 | 1459 | actor.SetMapper(mapper) |
| 1467 | - actor.GetProperty().SetColor(color) | |
| 1460 | + actor.GetProperty().SetColor(colour) | |
| 1468 | 1461 | actor.GetProperty().SetLineWidth(5) |
| 1469 | 1462 | actor.AddPosition(0, 0, 0) |
| 1470 | 1463 | actor.SetScale(size) | ... | ... |
invesalius/gui/task_navigator.py
| ... | ... | @@ -172,13 +172,16 @@ class InnerFoldPanel(wx.Panel): |
| 172 | 172 | fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition, |
| 173 | 173 | (10, 330), 0, fpb.FPB_SINGLE_FOLD) |
| 174 | 174 | |
| 175 | - # Initialize Tracker and PedalConnection objects here so that they are available to several panels. | |
| 175 | + # Initialize Navigation, Tracker and PedalConnection objects here so that they are available to several panels. | |
| 176 | 176 | # |
| 177 | 177 | tracker = Tracker() |
| 178 | 178 | pedal_connection = PedalConnection() if HAS_PEDAL_CONNECTION else None |
| 179 | 179 | |
| 180 | 180 | neuronavigation_api = NeuronavigationApi() |
| 181 | - | |
| 181 | + navigation = Navigation( | |
| 182 | + pedal_connection=pedal_connection, | |
| 183 | + neuronavigation_api=neuronavigation_api, | |
| 184 | + ) | |
| 182 | 185 | # Fold panel style |
| 183 | 186 | style = fpb.CaptionBarStyle() |
| 184 | 187 | style.SetCaptionStyle(fpb.CAPTIONBAR_GRADIENT_V) |
| ... | ... | @@ -189,6 +192,7 @@ class InnerFoldPanel(wx.Panel): |
| 189 | 192 | item = fold_panel.AddFoldPanel(_("Neuronavigation"), collapsed=True) |
| 190 | 193 | ntw = NeuronavigationPanel( |
| 191 | 194 | parent=item, |
| 195 | + navigation=navigation, | |
| 192 | 196 | tracker=tracker, |
| 193 | 197 | pedal_connection=pedal_connection, |
| 194 | 198 | neuronavigation_api=neuronavigation_api, |
| ... | ... | @@ -209,7 +213,7 @@ class InnerFoldPanel(wx.Panel): |
| 209 | 213 | |
| 210 | 214 | # Fold 3 - Markers panel |
| 211 | 215 | item = fold_panel.AddFoldPanel(_("Markers"), collapsed=True) |
| 212 | - mtw = MarkersPanel(item, tracker) | |
| 216 | + mtw = MarkersPanel(item, navigation, tracker) | |
| 213 | 217 | |
| 214 | 218 | fold_panel.ApplyCaptionStyle(item, style) |
| 215 | 219 | fold_panel.AddFoldPanelWindow(item, mtw, spacing= 0, |
| ... | ... | @@ -348,7 +352,7 @@ class InnerFoldPanel(wx.Panel): |
| 348 | 352 | |
| 349 | 353 | |
| 350 | 354 | class NeuronavigationPanel(wx.Panel): |
| 351 | - def __init__(self, parent, tracker, pedal_connection, neuronavigation_api): | |
| 355 | + def __init__(self, parent, navigation, tracker, pedal_connection, neuronavigation_api): | |
| 352 | 356 | wx.Panel.__init__(self, parent) |
| 353 | 357 | try: |
| 354 | 358 | default_colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENUBAR) |
| ... | ... | @@ -364,10 +368,7 @@ class NeuronavigationPanel(wx.Panel): |
| 364 | 368 | self.pedal_connection = pedal_connection |
| 365 | 369 | self.neuronavigation_api = neuronavigation_api |
| 366 | 370 | |
| 367 | - self.navigation = Navigation( | |
| 368 | - pedal_connection=pedal_connection, | |
| 369 | - neuronavigation_api=neuronavigation_api, | |
| 370 | - ) | |
| 371 | + self.navigation = navigation | |
| 371 | 372 | self.icp = ICP() |
| 372 | 373 | self.tracker = tracker |
| 373 | 374 | self.robot = Robot(tracker) |
| ... | ... | @@ -1260,7 +1261,7 @@ class MarkersPanel(wx.Panel): |
| 1260 | 1261 | def robot_target_matrix(self, new_m_robot_target): |
| 1261 | 1262 | self.m_robot_target = new_m_robot_target |
| 1262 | 1263 | |
| 1263 | - def __init__(self, parent, tracker): | |
| 1264 | + def __init__(self, parent, navigation, tracker): | |
| 1264 | 1265 | wx.Panel.__init__(self, parent) |
| 1265 | 1266 | try: |
| 1266 | 1267 | default_colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENUBAR) |
| ... | ... | @@ -1270,6 +1271,7 @@ class MarkersPanel(wx.Panel): |
| 1270 | 1271 | |
| 1271 | 1272 | self.SetAutoLayout(1) |
| 1272 | 1273 | |
| 1274 | + self.navigation = navigation | |
| 1273 | 1275 | self.tracker = tracker |
| 1274 | 1276 | |
| 1275 | 1277 | self.__bind_events() |
| ... | ... | @@ -1455,11 +1457,13 @@ class MarkersPanel(wx.Panel): |
| 1455 | 1457 | |
| 1456 | 1458 | def UpdateCurrentCoord(self, position): |
| 1457 | 1459 | self.current_coord = list(position) |
| 1460 | + if not self.navigation.track_obj: | |
| 1461 | + self.current_coord[3:] = None, None, None | |
| 1458 | 1462 | |
| 1459 | 1463 | def UpdateNavigationStatus(self, nav_status, vis_status): |
| 1460 | 1464 | if not nav_status: |
| 1461 | - self.current_coord = [None, None, None] | |
| 1462 | 1465 | self.nav_status = False |
| 1466 | + self.current_coord[3:] = None, None, None | |
| 1463 | 1467 | else: |
| 1464 | 1468 | self.nav_status = True |
| 1465 | 1469 | |
| ... | ... | @@ -1703,15 +1707,15 @@ class MarkersPanel(wx.Panel): |
| 1703 | 1707 | |
| 1704 | 1708 | # Note that ball_id is zero-based, so we assign it len(self.markers) before the new marker is added |
| 1705 | 1709 | if all([elem is not None for elem in new_marker.coord[3:]]): |
| 1706 | - Publisher.sendMessage('Add arrow marker', arrow_id=len(self.markers), | |
| 1707 | - size=self.arrow_marker_size, | |
| 1708 | - color=new_marker.colour, | |
| 1709 | - coord=new_marker.coord) | |
| 1710 | + arrow_flag = True | |
| 1710 | 1711 | else: |
| 1711 | - Publisher.sendMessage('Add marker', ball_id=len(self.markers), | |
| 1712 | - size=new_marker.size, | |
| 1713 | - colour=new_marker.colour, | |
| 1714 | - coord=new_marker.coord[:3]) | |
| 1712 | + arrow_flag = False | |
| 1713 | + | |
| 1714 | + Publisher.sendMessage('Add marker', marker_id=len(self.markers), | |
| 1715 | + size=new_marker.size, | |
| 1716 | + colour=new_marker.colour, | |
| 1717 | + coord=new_marker.coord, | |
| 1718 | + arrow_flag=arrow_flag) | |
| 1715 | 1719 | |
| 1716 | 1720 | |
| 1717 | 1721 | self.markers.append(new_marker) | ... | ... |