From 4701ce10df1ca19c7bfa2d483f94e183d89c2726 Mon Sep 17 00:00:00 2001 From: tfmoraes Date: Mon, 14 Sep 2009 18:35:59 +0000 Subject: [PATCH] ENH: Removing curve from clut raycasting widget --- invesalius/constants.py | 2 +- invesalius/data/viewer_slice.py | 2 +- invesalius/data/volume.py | 11 +++++------ invesalius/gui/default_viewers.py | 10 +++++++--- invesalius/gui/widgets/clut_raycasting.py | 24 ++++++++++++++++++++---- 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/invesalius/constants.py b/invesalius/constants.py index fb774ff..1981d5e 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -161,7 +161,7 @@ WINDOW_LEVEL = {"Abdomen":(350,50), "Vasculature - Hard":(240,80), "Vasculature - Soft":(650,160)} -REDUCE_IMAGEDATA_QUALITY = 1 +REDUCE_IMAGEDATA_QUALITY = 0 # if 1, use vtkVolumeRaycastMapper, if 0, use vtkFixedPointVolumeRayCastMapper TYPE_RAYCASTING_MAPPER = 0 diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index d1deb06..432256e 100755 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -66,7 +66,7 @@ class Viewer(wx.Panel): self.text = None # VTK pipeline and actors #self.__config_interactor() - self.pick = vtk.vtkWorldPointPicker() + self.pick = vtk.vtkPropPicker() self.__bind_events() self.__bind_events_wx() diff --git a/invesalius/data/volume.py b/invesalius/data/volume.py index c72f667..d2d4850 100755 --- a/invesalius/data/volume.py +++ b/invesalius/data/volume.py @@ -140,11 +140,6 @@ class Volume(): if self.config['advancedCLUT']: self.Create16bColorTable(self.scale) self.CreateOpacityTable(self.scale) - self.CalculateWWWL() - ww = self.ww - wl = self.wl - ps.Publisher().sendMessage('Set volume window and level text', - (ww, wl)) else: self.Create8bColorTable(self.scale) self.Create8bOpacityTable(self.scale) @@ -225,7 +220,11 @@ class Volume(): """ Get the window width & level from the selected curve """ - curve = self.config['16bitClutCurves'][self.curve] + try: + curve = self.config['16bitClutCurves'][self.curve] + except IndexError: + self.curve -= 1 + curve = self.config['16bitClutCurves'][self.curve] first_point = curve[0]['x'] last_point = curve[-1]['x'] self.ww = last_point - first_point diff --git a/invesalius/gui/default_viewers.py b/invesalius/gui/default_viewers.py index 3cf82c1..b79e54c 100755 --- a/invesalius/gui/default_viewers.py +++ b/invesalius/gui/default_viewers.py @@ -240,6 +240,10 @@ class VolumeInteraction(wx.Panel): ps.Publisher().subscribe( self.RefreshPoints, 'Refresh raycasting widget points') + def __update_curve_wwwl_text(self, curve): + ww, wl = self.clut_raycasting.GetCurveWWWl(curve) + ps.Publisher().sendMessage('Set raycasting wwwl', (ww, wl, curve)) + def ShowRaycastingWidget(self, evt_pubsub=None): self.can_show_raycasting_widget = 1 if self.clut_raycasting.to_draw_points: @@ -254,9 +258,10 @@ class VolumeInteraction(wx.Panel): self.aui_manager.Update() def OnPointChanged(self, evt): + print "Removed" ps.Publisher.sendMessage('Set raycasting refresh', None) ps.Publisher.sendMessage('Set raycasting curve', evt.GetCurve()) - ps.Publisher().sendMessage('Render volume viewer', None) + ps.Publisher().sendMessage('Render volume viewer') def OnCurveSelected(self, evt): ps.Publisher.sendMessage('Set raycasting curve', evt.GetCurve()) @@ -264,8 +269,7 @@ class VolumeInteraction(wx.Panel): def OnChangeCurveWL(self, evt): curve = evt.GetCurve() - ww, wl = self.clut_raycasting.GetCurveWWWl(curve) - ps.Publisher().sendMessage('Set raycasting wwwl', (ww, wl, curve)) + self.__update_curve_wwwl_text(curve) ps.Publisher().sendMessage('Render volume viewer') def OnSetRaycastPreset(self, evt_pubsub): diff --git a/invesalius/gui/widgets/clut_raycasting.py b/invesalius/gui/widgets/clut_raycasting.py index df34460..a66e2d3 100644 --- a/invesalius/gui/widgets/clut_raycasting.py +++ b/invesalius/gui/widgets/clut_raycasting.py @@ -176,6 +176,13 @@ class CLUTRaycastingWidget(wx.Panel): nevt = CLUTEvent(myEVT_CLUT_POINT_CHANGED, self.GetId(), i) self.GetEventHandler().ProcessEvent(nevt) return + n_curve = self._has_clicked_in_selection_curve(evt.GetPositionTuple()) + if n_curve is not None: + print "Removing a curve" + self.RemoveCurve(n_curve) + self.Refresh() + nevt = CLUTEvent(myEVT_CLUT_POINT_CHANGED, self.GetId(), n_curve) + self.GetEventHandler().ProcessEvent(nevt) evt.Skip() def OnRelease(self, evt): @@ -339,11 +346,20 @@ class CLUTRaycastingWidget(wx.Panel): self.point_dragged = (new_i, new_j) # Can't have only one point in the curve if len(self.points[i]) == 1: - self.points.pop(i) - self.colours.pop(i) - self.point_dragged = None + self.RemoveCurve(i) + else: + curve = self.curves[i] + curve.CalculateWWWl() + curve.wl_px = (self.HounsfieldToPixel(curve.wl), + self.OpacityToPixel(0)) + + def RemoveCurve(self, n_curve): + self.points.pop(n_curve) + self.colours.pop(n_curve) + self.point_dragged = None + + self.curves.pop(n_curve) - self.curves.pop(i) def _draw_gradient(self, ctx, height): #The gradient -- libgit2 0.21.2