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 | 71 | self.initial_focus = None |
72 | 72 | |
73 | 73 | self.static_markers = [] |
74 | - self.static_arrows =[] | |
74 | + self.static_arrows = [] | |
75 | 75 | self.style = None |
76 | 76 | |
77 | 77 | interactor = wxVTKRenderWindowInteractor(self, -1, size = self.GetSize()) |
... | ... | @@ -607,11 +607,11 @@ class Viewer(wx.Panel): |
607 | 607 | self.RemoveTarget() |
608 | 608 | |
609 | 609 | self.UpdateRender() |
610 | + | |
610 | 611 | def AddMarkerwithOrientation(self, arrow_id, size, color, coord): |
611 | 612 | """ |
612 | 613 | Markers arrow with orientation created by navigation tools and rendered in volume viewer. |
613 | 614 | """ |
614 | - | |
615 | 615 | self.arrow_marker_id = arrow_id |
616 | 616 | coord_flip = list(coord) |
617 | 617 | coord_flip[1] = -coord_flip[1] |
... | ... | @@ -619,10 +619,9 @@ class Viewer(wx.Panel): |
619 | 619 | arrow_actor = self.Add_ObjectArrow(coord_flip[:3], coord_flip[3:6], color, size) |
620 | 620 | self.static_markers.append(arrow_actor) |
621 | 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 | 626 | def AddMarker(self, ball_id, size, colour, coord): |
628 | 627 | """ |
... | ... | @@ -1009,16 +1008,10 @@ class Viewer(wx.Panel): |
1009 | 1008 | self.RemoveTarget() |
1010 | 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 | 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 | 1015 | axes='sxyz', |
1023 | 1016 | ) |
1024 | 1017 | m_img = np.asmatrix(m_img) |
... | ... | @@ -1029,7 +1022,16 @@ class Viewer(wx.Panel): |
1029 | 1022 | for col in range(0, 4): |
1030 | 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 | 1036 | filename = os.path.join(inv_paths.OBJ_DIR, "aim.stl") |
1035 | 1037 | |
... | ... | @@ -1040,7 +1042,7 @@ class Viewer(wx.Panel): |
1040 | 1042 | |
1041 | 1043 | # Transform the polydata |
1042 | 1044 | transform = vtk.vtkTransform() |
1043 | - transform.SetMatrix(m_img_vtk) | |
1045 | + transform.SetMatrix(self.m_img_vtk) | |
1044 | 1046 | transformPD = vtk.vtkTransformPolyDataFilter() |
1045 | 1047 | transformPD.SetTransform(transform) |
1046 | 1048 | transformPD.SetInputConnection(reader.GetOutputPort()) |
... | ... | @@ -1088,7 +1090,7 @@ class Viewer(wx.Panel): |
1088 | 1090 | self.dummy_coil_actor.GetProperty().SetSpecularPower(10) |
1089 | 1091 | self.dummy_coil_actor.GetProperty().SetOpacity(.3) |
1090 | 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 | 1095 | self.ren.AddActor(self.dummy_coil_actor) |
1094 | 1096 | |
... | ... | @@ -1441,8 +1443,9 @@ class Viewer(wx.Panel): |
1441 | 1443 | actor.GetProperty().SetLineWidth(5) |
1442 | 1444 | actor.AddPosition(0, 0, 0) |
1443 | 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 | 1450 | return actor |
1448 | 1451 | ... | ... |
invesalius/gui/task_navigator.py
... | ... | @@ -1623,7 +1623,6 @@ class MarkersPanel(wx.Panel): |
1623 | 1623 | self.__set_marker_as_target(len(self.markers) - 1) |
1624 | 1624 | |
1625 | 1625 | except Exception as e: |
1626 | - | |
1627 | 1626 | wx.MessageBox(_("Invalid markers file."), _("InVesalius 3")) |
1628 | 1627 | |
1629 | 1628 | def OnMarkersVisibility(self, evt, ctrl): |
... | ... | @@ -1689,13 +1688,7 @@ class MarkersPanel(wx.Panel): |
1689 | 1688 | new_robot_marker.robot_target_matrix = self.current_robot_target_matrix |
1690 | 1689 | |
1691 | 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 | 1692 | Publisher.sendMessage('Add arrow marker', arrow_id=len(self.markers), |
1700 | 1693 | size=self.arrow_marker_size, |
1701 | 1694 | color=new_marker.colour, | ... | ... |