Commit 4ed57aabd87a640a2ad7741b67b576aec7263e6f

Authored by tatiana
1 parent fd9af976

ENH: In the process of adjusting raycasting plane

invesalius/constants.py
@@ -160,5 +160,5 @@ RAYCASTING_TYPES = [filename.split(".")[0] for filename in @@ -160,5 +160,5 @@ RAYCASTING_TYPES = [filename.split(".")[0] for filename in
160 RAYCASTING_TYPES.append(' Off') 160 RAYCASTING_TYPES.append(' Off')
161 RAYCASTING_TYPES.sort() 161 RAYCASTING_TYPES.sort()
162 RAYCASTING_OFF_LABEL = ' Off' 162 RAYCASTING_OFF_LABEL = ' Off'
163 -RAYCASTING_TOOLS = ["Plane cutter"] 163 +RAYCASTING_TOOLS = ["Cut plane"]
164 164
invesalius/data/volume.py
@@ -92,6 +92,8 @@ class Volume(): @@ -92,6 +92,8 @@ class Volume():
92 'Set raycasting refresh') 92 'Set raycasting refresh')
93 ps.Publisher().subscribe(self.OnSetRelativeWindowLevel, 93 ps.Publisher().subscribe(self.OnSetRelativeWindowLevel,
94 'Set raycasting relative window and level') 94 'Set raycasting relative window and level')
  95 + ps.Publisher().subscribe(self.OnEnableTool,
  96 + 'Enable raycasting tool')
95 97
96 def OnLoadVolume(self, pubsub_evt): 98 def OnLoadVolume(self, pubsub_evt):
97 label = pubsub_evt.data 99 label = pubsub_evt.data
@@ -386,6 +388,7 @@ class Volume(): @@ -386,6 +388,7 @@ class Volume():
386 self.Create8bOpacityTable(scale) 388 self.Create8bOpacityTable(scale)
387 389
388 image2 = self.ApplyConvolution(image2.GetOutput()) 390 image2 = self.ApplyConvolution(image2.GetOutput())
  391 + self.final_imagedata = image2
389 392
390 composite_function = vtk.vtkVolumeRayCastCompositeFunction() 393 composite_function = vtk.vtkVolumeRayCastCompositeFunction()
391 composite_function.SetCompositeMethodToInterpolateFirst() 394 composite_function.SetCompositeMethodToInterpolateFirst()
@@ -454,6 +457,11 @@ class Volume(): @@ -454,6 +457,11 @@ class Volume():
454 colour = self.GetBackgroundColour() 457 colour = self.GetBackgroundColour()
455 ps.Publisher().sendMessage('Load volume into viewer', (volume, colour)) 458 ps.Publisher().sendMessage('Load volume into viewer', (volume, colour))
456 459
  460 + def OnEnableTool(self, pubsub_evt):
  461 + tool_name = pubsub_evt.data
  462 + if tool_name == "Cut plane":
  463 + plane = CutPlane(self.final_imagedata, self.volume_mapper)
  464 +
457 def TranslateScale(self, scale, value): 465 def TranslateScale(self, scale, value):
458 #if value < 0: 466 #if value < 0:
459 # valor = 2**16 - abs(value) 467 # valor = 2**16 - abs(value)
invesalius/gui/default_viewers.py
@@ -176,7 +176,7 @@ import wx.lib.colourselect as csel @@ -176,7 +176,7 @@ import wx.lib.colourselect as csel
176 import constants as const 176 import constants as const
177 177
178 [BUTTON_RAYCASTING, BUTTON_VIEW] = [wx.NewId() for num in xrange(2)] 178 [BUTTON_RAYCASTING, BUTTON_VIEW] = [wx.NewId() for num in xrange(2)]
179 - 179 +RAYCASTING_TOOLS = wx.NewId()
180 180
181 ID_TO_BMP = {const.VOL_FRONT: ["Front", "../icons/view_front.png"], 181 ID_TO_BMP = {const.VOL_FRONT: ["Front", "../icons/view_front.png"],
182 const.VOL_BACK: ["Back", "../icons/view_back.png"], 182 const.VOL_BACK: ["Back", "../icons/view_back.png"],
@@ -189,6 +189,7 @@ ID_TO_BMP = {const.VOL_FRONT: [&quot;Front&quot;, &quot;../icons/view_front.png&quot;], @@ -189,6 +189,7 @@ ID_TO_BMP = {const.VOL_FRONT: [&quot;Front&quot;, &quot;../icons/view_front.png&quot;],
189 189
190 ID_TO_NAME = {} 190 ID_TO_NAME = {}
191 ID_TO_TOOL = {} 191 ID_TO_TOOL = {}
  192 +ID_TO_TOOL_ITEM = {}
192 193
193 class VolumeViewerCover(wx.Panel): 194 class VolumeViewerCover(wx.Panel):
194 def __init__(self, parent): 195 def __init__(self, parent):
@@ -208,6 +209,7 @@ class VolumeToolPanel(wx.Panel): @@ -208,6 +209,7 @@ class VolumeToolPanel(wx.Panel):
208 BMP_RAYCASTING = wx.Bitmap("../icons/volume_raycasting.png", 209 BMP_RAYCASTING = wx.Bitmap("../icons/volume_raycasting.png",
209 wx.BITMAP_TYPE_PNG) 210 wx.BITMAP_TYPE_PNG)
210 211
  212 + # MENU RELATED TO RAYCASTING TYPES
211 menu = wx.Menu() 213 menu = wx.Menu()
212 for name in const.RAYCASTING_TYPES: 214 for name in const.RAYCASTING_TYPES:
213 id = wx.NewId() 215 id = wx.NewId()
@@ -218,22 +220,25 @@ class VolumeToolPanel(wx.Panel): @@ -218,22 +220,25 @@ class VolumeToolPanel(wx.Panel):
218 ID_TO_NAME[id] = name 220 ID_TO_NAME[id] = name
219 221
220 menu.AppendSeparator() 222 menu.AppendSeparator()
  223 + # MENU RELATED TO RAYCASTING TOOLS
221 submenu = wx.Menu() 224 submenu = wx.Menu()
222 - for tool in const.RAYCASTING_TOOLS: 225 + for name in const.RAYCASTING_TOOLS:
223 id = wx.NewId() 226 id = wx.NewId()
224 item = wx.MenuItem(submenu, id, name, kind=wx.ITEM_CHECK) 227 item = wx.MenuItem(submenu, id, name, kind=wx.ITEM_CHECK)
225 submenu.AppendItem(item) 228 submenu.AppendItem(item)
226 ID_TO_TOOL[id] = name 229 ID_TO_TOOL[id] = name
  230 + ID_TO_TOOL_ITEM[id] = item
  231 + #submenu.Enable(0)
  232 + self.submenu_raycasting_tools = submenu
  233 + menu.AppendMenu(RAYCASTING_TOOLS, "Tools", submenu)
  234 + menu.Enable(RAYCASTING_TOOLS, 0)
227 235
228 self.menu_raycasting = menu 236 self.menu_raycasting = menu
229 menu.Bind(wx.EVT_MENU, self.OnMenuRaycasting) 237 menu.Bind(wx.EVT_MENU, self.OnMenuRaycasting)
230 238
231 - #button_raycasting=btn.GenBitmapToggleButton(self, 1, BMP_RAYCASTING, size=(24,24))  
232 - #self.button_raycasting_toggle = 0  
233 button_raycasting = pbtn.PlateButton(self, BUTTON_RAYCASTING,"", 239 button_raycasting = pbtn.PlateButton(self, BUTTON_RAYCASTING,"",
234 BMP_RAYCASTING, style=pbtn.PB_STYLE_SQUARE, 240 BMP_RAYCASTING, style=pbtn.PB_STYLE_SQUARE,
235 size=(24,24)) 241 size=(24,24))
236 - #self.Bind(wx.EVT_BUTTON, self.OnToggleRaycasting)  
237 button_raycasting.SetMenu(menu) 242 button_raycasting.SetMenu(menu)
238 243
239 self.button_raycasting = button_raycasting 244 self.button_raycasting = button_raycasting
@@ -274,11 +279,26 @@ class VolumeToolPanel(wx.Panel): @@ -274,11 +279,26 @@ class VolumeToolPanel(wx.Panel):
274 """Events from raycasting menu.""" 279 """Events from raycasting menu."""
275 id = evt.GetId() 280 id = evt.GetId()
276 if id in ID_TO_NAME.keys(): 281 if id in ID_TO_NAME.keys():
  282 + name = ID_TO_NAME[evt.GetId()]
277 ps.Publisher().sendMessage('Load raycasting preset', 283 ps.Publisher().sendMessage('Load raycasting preset',
278 ID_TO_NAME[evt.GetId()]) 284 ID_TO_NAME[evt.GetId()])
  285 + if name != const.RAYCASTING_OFF_LABEL:
  286 + self.menu_raycasting.Enable(RAYCASTING_TOOLS, 1)
  287 + else:
  288 + self.menu_raycasting.Enable(RAYCASTING_TOOLS, 0)
279 else: 289 else:
280 - ps.Publisher().sendMessage('Enable raycasting tool',  
281 - ID_TO_TOOL(evt.GetId()) 290 + item = ID_TO_TOOL_ITEM[evt.GetId()]
  291 + if not item.IsChecked():
  292 + for i in ID_TO_TOOL_ITEM.values():
  293 + if i is not item:
  294 + i.Check(0)
  295 +
  296 + ps.Publisher().sendMessage('Enable raycasting tool',
  297 + [ID_TO_TOOL[evt.GetId()],1])
  298 + else:
  299 + ps.Publisher().sendMessage('Enable raycasting tool',
  300 + [ID_TO_TOOL[evt.GetId()],0])
  301 +
282 302
283 def OnMenuView(self, evt): 303 def OnMenuView(self, evt):
284 """Events from button menus.""" 304 """Events from button menus."""