Commit 6e312c12c93510adda1d5e21e0e4a694ab578ec9
1 parent
486d4343
Exists in
master
FIX: create and apply vtk matrix to positioning arrow
Showing
2 changed files
with
23 additions
and
27 deletions
Show diff stats
invesalius/data/viewer_volume.py
@@ -71,7 +71,7 @@ class Viewer(wx.Panel): | @@ -71,7 +71,7 @@ class Viewer(wx.Panel): | ||
71 | self.initial_focus = None | 71 | self.initial_focus = None |
72 | 72 | ||
73 | self.static_markers = [] | 73 | self.static_markers = [] |
74 | - self.static_arrows =[] | 74 | + self.static_arrows = [] |
75 | self.style = None | 75 | self.style = None |
76 | 76 | ||
77 | interactor = wxVTKRenderWindowInteractor(self, -1, size = self.GetSize()) | 77 | interactor = wxVTKRenderWindowInteractor(self, -1, size = self.GetSize()) |
@@ -607,11 +607,11 @@ class Viewer(wx.Panel): | @@ -607,11 +607,11 @@ class Viewer(wx.Panel): | ||
607 | self.RemoveTarget() | 607 | self.RemoveTarget() |
608 | 608 | ||
609 | self.UpdateRender() | 609 | self.UpdateRender() |
610 | + | ||
610 | def AddMarkerwithOrientation(self, arrow_id, size, color, coord): | 611 | def AddMarkerwithOrientation(self, arrow_id, size, color, coord): |
611 | """ | 612 | """ |
612 | Markers arrow with orientation created by navigation tools and rendered in volume viewer. | 613 | Markers arrow with orientation created by navigation tools and rendered in volume viewer. |
613 | """ | 614 | """ |
614 | - | ||
615 | self.arrow_marker_id = arrow_id | 615 | self.arrow_marker_id = arrow_id |
616 | coord_flip = list(coord) | 616 | coord_flip = list(coord) |
617 | coord_flip[1] = -coord_flip[1] | 617 | coord_flip[1] = -coord_flip[1] |
@@ -619,10 +619,9 @@ class Viewer(wx.Panel): | @@ -619,10 +619,9 @@ class Viewer(wx.Panel): | ||
619 | arrow_actor = self.Add_ObjectArrow(coord_flip[:3], coord_flip[3:6], color, size) | 619 | arrow_actor = self.Add_ObjectArrow(coord_flip[:3], coord_flip[3:6], color, size) |
620 | self.static_markers.append(arrow_actor) | 620 | self.static_markers.append(arrow_actor) |
621 | self.ren.AddActor(self.static_markers[self.arrow_marker_id]) | 621 | self.ren.AddActor(self.static_markers[self.arrow_marker_id]) |
622 | - self.arrow_marker_id +=1 | ||
623 | - #self.UpdateRender() | ||
624 | - self.Refresh() | 622 | + self.arrow_marker_id += 1 |
625 | 623 | ||
624 | + self.Refresh() | ||
626 | 625 | ||
627 | def AddMarker(self, ball_id, size, colour, coord): | 626 | def AddMarker(self, ball_id, size, colour, coord): |
628 | """ | 627 | """ |
@@ -1009,16 +1008,10 @@ class Viewer(wx.Panel): | @@ -1009,16 +1008,10 @@ class Viewer(wx.Panel): | ||
1009 | self.RemoveTarget() | 1008 | self.RemoveTarget() |
1010 | self.DisableCoilTracker() | 1009 | self.DisableCoilTracker() |
1011 | 1010 | ||
1012 | - def CreateTargetAim(self): | ||
1013 | - if self.aim_actor: | ||
1014 | - self.RemoveTargetAim() | ||
1015 | - self.aim_actor = None | ||
1016 | - | ||
1017 | - vtk_colors = vtk.vtkNamedColors() | ||
1018 | - | 1011 | + def CreateVTKObjectMatrix(self, direction, orientation): |
1019 | m_img = dco.coordinates_to_transformation_matrix( | 1012 | m_img = dco.coordinates_to_transformation_matrix( |
1020 | - position=self.target_coord[:3], | ||
1021 | - orientation=self.target_coord[3:], | 1013 | + position=direction, |
1014 | + orientation=orientation, | ||
1022 | axes='sxyz', | 1015 | axes='sxyz', |
1023 | ) | 1016 | ) |
1024 | m_img = np.asmatrix(m_img) | 1017 | m_img = np.asmatrix(m_img) |
@@ -1029,7 +1022,16 @@ class Viewer(wx.Panel): | @@ -1029,7 +1022,16 @@ class Viewer(wx.Panel): | ||
1029 | for col in range(0, 4): | 1022 | for col in range(0, 4): |
1030 | m_img_vtk.SetElement(row, col, m_img[row, col]) | 1023 | m_img_vtk.SetElement(row, col, m_img[row, col]) |
1031 | 1024 | ||
1032 | - self.m_img_vtk = m_img_vtk | 1025 | + return m_img_vtk |
1026 | + | ||
1027 | + def CreateTargetAim(self): | ||
1028 | + if self.aim_actor: | ||
1029 | + self.RemoveTargetAim() | ||
1030 | + self.aim_actor = None | ||
1031 | + | ||
1032 | + vtk_colors = vtk.vtkNamedColors() | ||
1033 | + | ||
1034 | + self.m_img_vtk = self.CreateVTKObjectMatrix(self.target_coord[:3], self.target_coord[3:]) | ||
1033 | 1035 | ||
1034 | filename = os.path.join(inv_paths.OBJ_DIR, "aim.stl") | 1036 | filename = os.path.join(inv_paths.OBJ_DIR, "aim.stl") |
1035 | 1037 | ||
@@ -1040,7 +1042,7 @@ class Viewer(wx.Panel): | @@ -1040,7 +1042,7 @@ class Viewer(wx.Panel): | ||
1040 | 1042 | ||
1041 | # Transform the polydata | 1043 | # Transform the polydata |
1042 | transform = vtk.vtkTransform() | 1044 | transform = vtk.vtkTransform() |
1043 | - transform.SetMatrix(m_img_vtk) | 1045 | + transform.SetMatrix(self.m_img_vtk) |
1044 | transformPD = vtk.vtkTransformPolyDataFilter() | 1046 | transformPD = vtk.vtkTransformPolyDataFilter() |
1045 | transformPD.SetTransform(transform) | 1047 | transformPD.SetTransform(transform) |
1046 | transformPD.SetInputConnection(reader.GetOutputPort()) | 1048 | transformPD.SetInputConnection(reader.GetOutputPort()) |
@@ -1088,7 +1090,7 @@ class Viewer(wx.Panel): | @@ -1088,7 +1090,7 @@ class Viewer(wx.Panel): | ||
1088 | self.dummy_coil_actor.GetProperty().SetSpecularPower(10) | 1090 | self.dummy_coil_actor.GetProperty().SetSpecularPower(10) |
1089 | self.dummy_coil_actor.GetProperty().SetOpacity(.3) | 1091 | self.dummy_coil_actor.GetProperty().SetOpacity(.3) |
1090 | self.dummy_coil_actor.SetVisibility(1) | 1092 | self.dummy_coil_actor.SetVisibility(1) |
1091 | - self.dummy_coil_actor.SetUserMatrix(m_img_vtk) | 1093 | + self.dummy_coil_actor.SetUserMatrix(self.m_img_vtk) |
1092 | 1094 | ||
1093 | self.ren.AddActor(self.dummy_coil_actor) | 1095 | self.ren.AddActor(self.dummy_coil_actor) |
1094 | 1096 | ||
@@ -1441,8 +1443,9 @@ class Viewer(wx.Panel): | @@ -1441,8 +1443,9 @@ class Viewer(wx.Panel): | ||
1441 | actor.GetProperty().SetLineWidth(5) | 1443 | actor.GetProperty().SetLineWidth(5) |
1442 | actor.AddPosition(0, 0, 0) | 1444 | actor.AddPosition(0, 0, 0) |
1443 | actor.SetScale(size) | 1445 | actor.SetScale(size) |
1444 | - actor.SetPosition(direction) | ||
1445 | - actor.SetOrientation(orientation) | 1446 | + |
1447 | + m_img_vtk = self.CreateVTKObjectMatrix(direction, orientation) | ||
1448 | + actor.SetUserMatrix(m_img_vtk) | ||
1446 | 1449 | ||
1447 | return actor | 1450 | return actor |
1448 | 1451 |
invesalius/gui/task_navigator.py
@@ -1623,7 +1623,6 @@ class MarkersPanel(wx.Panel): | @@ -1623,7 +1623,6 @@ class MarkersPanel(wx.Panel): | ||
1623 | self.__set_marker_as_target(len(self.markers) - 1) | 1623 | self.__set_marker_as_target(len(self.markers) - 1) |
1624 | 1624 | ||
1625 | except Exception as e: | 1625 | except Exception as e: |
1626 | - | ||
1627 | wx.MessageBox(_("Invalid markers file."), _("InVesalius 3")) | 1626 | wx.MessageBox(_("Invalid markers file."), _("InVesalius 3")) |
1628 | 1627 | ||
1629 | def OnMarkersVisibility(self, evt, ctrl): | 1628 | def OnMarkersVisibility(self, evt, ctrl): |
@@ -1689,13 +1688,7 @@ class MarkersPanel(wx.Panel): | @@ -1689,13 +1688,7 @@ class MarkersPanel(wx.Panel): | ||
1689 | new_robot_marker.robot_target_matrix = self.current_robot_target_matrix | 1688 | new_robot_marker.robot_target_matrix = self.current_robot_target_matrix |
1690 | 1689 | ||
1691 | # Note that ball_id is zero-based, so we assign it len(self.markers) before the new marker is added | 1690 | # Note that ball_id is zero-based, so we assign it len(self.markers) before the new marker is added |
1692 | - if label in self.__list_fiducial_labels(): | ||
1693 | - Publisher.sendMessage('Add marker', ball_id=len(self.markers), | ||
1694 | - size=new_marker.size, | ||
1695 | - colour=new_marker.colour, | ||
1696 | - coord=new_marker.coord[:3]) | ||
1697 | - | ||
1698 | - elif all([elem is not None for elem in new_marker.coord[3:]]): | 1691 | + if all([elem is not None for elem in new_marker.coord[3:]]): |
1699 | Publisher.sendMessage('Add arrow marker', arrow_id=len(self.markers), | 1692 | Publisher.sendMessage('Add arrow marker', arrow_id=len(self.markers), |
1700 | size=self.arrow_marker_size, | 1693 | size=self.arrow_marker_size, |
1701 | color=new_marker.colour, | 1694 | color=new_marker.colour, |