diff --git a/invesalius/constants.py b/invesalius/constants.py index 84edc3a..f96b01e 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -782,7 +782,7 @@ ARROW_UPPER_LIMIT = 15 COIL_ANGLES_THRESHOLD = 3 COIL_COORD_THRESHOLD = 3 TIMESTAMP = 2.0 -COIL_ANGLE_ARROW_PROJECTION_THRESHOLD = 10 +COIL_ANGLE_ARROW_PROJECTION_THRESHOLD = 5 CAM_MODE = True diff --git a/invesalius/data/viewer_volume.py b/invesalius/data/viewer_volume.py index 9df646a..d883e7d 100644 --- a/invesalius/data/viewer_volume.py +++ b/invesalius/data/viewer_volume.py @@ -174,7 +174,7 @@ class Viewer(wx.Panel): self.z_actor = None self.mark_actor = None self.obj_projection_arrow_actor = None - self.object_orientation_disk_actor = None + self.object_orientation_torus_actor = None self._mode_cross = False self._to_show_ball = 0 @@ -1316,17 +1316,18 @@ class Viewer(wx.Panel): self.z_actor = self.add_line([0., 0., 0.], [0., 0., 1.], color=[1.0, .0, .0]) self.obj_projection_arrow_actor = self.Add_ObjectArrow([0., 0., 0.], [0., 0., 0.], vtk_colors.GetColor3d('Red'), - 15) - self.object_orientation_disk_actor = self.Add_Object_Orientation_Disk([0., 0., 0.], [0., 0., 0.], - vtk_colors.GetColor3d('Red')) + 8) + self.object_orientation_torus_actor = self.Add_Torus([0., 0., 0.], [0., 0., 0.], + vtk_colors.GetColor3d('Red')) + #self.obj_projection_arrow_actor.SetVisibility(False) - #self.object_orientation_disk_actor.SetVisibility(False) + #self.object_orientation_torus_actor.SetVisibility(False) self.ren.AddActor(self.obj_actor) self.ren.AddActor(self.x_actor) self.ren.AddActor(self.y_actor) self.ren.AddActor(self.z_actor) #self.ren.AddActor(self.obj_projection_arrow_actor) - #self.ren.AddActor(self.object_orientation_disk_actor) + #self.ren.AddActor(self.object_orientation_torus_actor) # self.obj_axes = vtk.vtkAxesActor() # self.obj_axes.SetShaftTypeToCylinder() # self.obj_axes.SetXAxisLabelText("x") @@ -1356,10 +1357,36 @@ class Viewer(wx.Panel): return disk_actor + def Add_Torus(self, position, orientation, color=[0.0, 0.0, 1.0]): + torus = vtk.vtkParametricTorus() + torus.SetRingRadius(2) + torus.SetCrossSectionRadius(1) + + torusSource = vtk.vtkParametricFunctionSource() + torusSource.SetParametricFunction(torus) + torusSource.Update() + + torusMapper = vtk.vtkPolyDataMapper() + torusMapper.SetInputConnection(torusSource.GetOutputPort()) + torusMapper.SetScalarRange(0, 360) + + torusActor = vtk.vtkActor() + torusActor.SetMapper(torusMapper) + torusActor.GetProperty().SetDiffuseColor(color) + torusActor.SetPosition(position) + torusActor.SetOrientation(orientation) + + return torusActor + def Add_ObjectArrow(self, direction, orientation, color=[0.0, 0.0, 1.0], size=2): vtk_colors = vtk.vtkNamedColors() arrow = vtk.vtkArrowSource() + arrow.SetTipResolution(40) + arrow.SetShaftResolution(40) + arrow.SetShaftRadius(0.05) + arrow.SetTipRadius(0.15) + arrow.SetTipLength(0.35) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(arrow.GetOutputPort()) @@ -1410,10 +1437,14 @@ class Viewer(wx.Panel): def AddPeeledSurface(self, flag, actor): if self.actor_peel: self.ren.RemoveActor(self.actor_peel) + self.ren.RemoveActor(self.object_orientation_torus_actor) + self.ren.RemoveActor(self.obj_projection_arrow_actor) self.actor_peel = None if flag and actor: self.ren.AddActor(actor) self.actor_peel = actor + self.ren.AddActor(self.object_orientation_torus_actor) + self.ren.AddActor(self.obj_projection_arrow_actor) self.Refresh() def GetPeelCenters(self, centers, normals): @@ -1465,27 +1496,27 @@ class Viewer(wx.Panel): self.ren.AddActor(self.obj_projection_arrow_actor) - self.ren.AddActor(self.object_orientation_disk_actor) + self.ren.AddActor(self.object_orientation_torus_actor) self.obj_projection_arrow_actor.SetPosition(closestPoint) self.obj_projection_arrow_actor.SetOrientation(coil_dir) - self.object_orientation_disk_actor.SetPosition(closestPoint) - self.object_orientation_disk_actor.SetOrientation(coil_dir) + self.object_orientation_torus_actor.SetPosition(closestPoint) + self.object_orientation_torus_actor.SetOrientation(coil_dir) # change color of arrow and disk according to angle if angle < self.angle_arrow_projection_threshold: - self.object_orientation_disk_actor.GetProperty().SetColor(vtk_colors.GetColor3d('Green')) - self.obj_projection_arrow_actor.GetProperty().SetColor(vtk_colors.GetColor3d('Green')) + self.object_orientation_torus_actor.GetProperty().SetDiffuseColor([51/255,176/255,102/255]) + self.obj_projection_arrow_actor.GetProperty().SetColor([55/255,120/255,163/255]) else: - self.object_orientation_disk_actor.GetProperty().SetColor(vtk_colors.GetColor3d('indian_red')) - self.obj_projection_arrow_actor.GetProperty().SetColor(vtk_colors.GetColor3d('indian_red')) + self.object_orientation_torus_actor.GetProperty().SetDiffuseColor([240/255,146/255,105/255]) + self.obj_projection_arrow_actor.GetProperty().SetColor([240/255,146/255,105/255]) else: self.ren.RemoveActor(self.y_actor) else: self.ren.RemoveActor(self.obj_projection_arrow_actor) - self.ren.RemoveActor(self.object_orientation_disk_actor) + self.ren.RemoveActor(self.object_orientation_torus_actor) self.ren.RemoveActor(self.x_actor) #self.ren.RemoveActor(self.y_actor) self.Refresh() @@ -1501,7 +1532,7 @@ class Viewer(wx.Panel): self.x_actor.SetVisibility(self.obj_state) self.y_actor.SetVisibility(self.obj_state) self.z_actor.SetVisibility(self.obj_state) - #self.object_orientation_disk_actor.SetVisibility(self.obj_state) + #self.object_orientation_torus_actor.SetVisibility(self.obj_state) #self.obj_projection_arrow_actor.SetVisibility(self.obj_state) self.Refresh() @@ -1562,7 +1593,7 @@ class Viewer(wx.Panel): self.ren.RemoveActor(self.x_actor) #self.ren.RemoveActor(self.y_actor) self.ren.RemoveActor(self.obj_projection_arrow_actor) - self.ren.RemoveActor(self.object_orientation_disk_actor) + self.ren.RemoveActor(self.object_orientation_torus_actor) self.GetCellIntersection(p1, norm, coil_norm, coil_dir) self.Refresh() @@ -1580,14 +1611,14 @@ class Viewer(wx.Panel): self.ren.RemoveActor(self.z_actor) self.ren.RemoveActor(self.mark_actor) self.ren.RemoveActor(self.obj_projection_arrow_actor) - self.ren.RemoveActor(self.object_orientation_disk_actor) + self.ren.RemoveActor(self.object_orientation_torus_actor) self.obj_actor = None self.x_actor = None self.y_actor = None self.z_actor = None self.mark_actor = None self.obj_projection_arrow_actor = None - self.object_orientation_disk_actor=None + self.object_orientation_torus_actor=None self.Refresh() def UpdateShowObjectState(self, state): diff --git a/invesalius/gui/task_navigator.py b/invesalius/gui/task_navigator.py index d884d06..6c3985c 100644 --- a/invesalius/gui/task_navigator.py +++ b/invesalius/gui/task_navigator.py @@ -2022,8 +2022,13 @@ class TractographyPanel(wx.Panel): # self.view_peeling = ctrl.GetValue() if ctrl.GetValue(): actor = self.brain_peel.get_actor(self.peel_depth, self.affine_vtk) + self.peel_loaded = True + Publisher.sendMessage('Update peel visualization', data=self.peel_loaded) else: actor = None + self.peel_loaded = False + Publisher.sendMessage('Update peel visualization', data= self.peel_loaded) + Publisher.sendMessage('Update peel', flag=ctrl.GetValue(), actor=actor) def OnEnableTracts(self, evt, ctrl): -- libgit2 0.21.2