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 160 RAYCASTING_TYPES.append(' Off')
161 161 RAYCASTING_TYPES.sort()
162 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 92 'Set raycasting refresh')
93 93 ps.Publisher().subscribe(self.OnSetRelativeWindowLevel,
94 94 'Set raycasting relative window and level')
  95 + ps.Publisher().subscribe(self.OnEnableTool,
  96 + 'Enable raycasting tool')
95 97  
96 98 def OnLoadVolume(self, pubsub_evt):
97 99 label = pubsub_evt.data
... ... @@ -386,6 +388,7 @@ class Volume():
386 388 self.Create8bOpacityTable(scale)
387 389  
388 390 image2 = self.ApplyConvolution(image2.GetOutput())
  391 + self.final_imagedata = image2
389 392  
390 393 composite_function = vtk.vtkVolumeRayCastCompositeFunction()
391 394 composite_function.SetCompositeMethodToInterpolateFirst()
... ... @@ -454,6 +457,11 @@ class Volume():
454 457 colour = self.GetBackgroundColour()
455 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 465 def TranslateScale(self, scale, value):
458 466 #if value < 0:
459 467 # valor = 2**16 - abs(value)
... ...
invesalius/gui/default_viewers.py
... ... @@ -176,7 +176,7 @@ import wx.lib.colourselect as csel
176 176 import constants as const
177 177  
178 178 [BUTTON_RAYCASTING, BUTTON_VIEW] = [wx.NewId() for num in xrange(2)]
179   -
  179 +RAYCASTING_TOOLS = wx.NewId()
180 180  
181 181 ID_TO_BMP = {const.VOL_FRONT: ["Front", "../icons/view_front.png"],
182 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 189  
190 190 ID_TO_NAME = {}
191 191 ID_TO_TOOL = {}
  192 +ID_TO_TOOL_ITEM = {}
192 193  
193 194 class VolumeViewerCover(wx.Panel):
194 195 def __init__(self, parent):
... ... @@ -208,6 +209,7 @@ class VolumeToolPanel(wx.Panel):
208 209 BMP_RAYCASTING = wx.Bitmap("../icons/volume_raycasting.png",
209 210 wx.BITMAP_TYPE_PNG)
210 211  
  212 + # MENU RELATED TO RAYCASTING TYPES
211 213 menu = wx.Menu()
212 214 for name in const.RAYCASTING_TYPES:
213 215 id = wx.NewId()
... ... @@ -218,22 +220,25 @@ class VolumeToolPanel(wx.Panel):
218 220 ID_TO_NAME[id] = name
219 221  
220 222 menu.AppendSeparator()
  223 + # MENU RELATED TO RAYCASTING TOOLS
221 224 submenu = wx.Menu()
222   - for tool in const.RAYCASTING_TOOLS:
  225 + for name in const.RAYCASTING_TOOLS:
223 226 id = wx.NewId()
224 227 item = wx.MenuItem(submenu, id, name, kind=wx.ITEM_CHECK)
225 228 submenu.AppendItem(item)
226 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 236 self.menu_raycasting = menu
229 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 239 button_raycasting = pbtn.PlateButton(self, BUTTON_RAYCASTING,"",
234 240 BMP_RAYCASTING, style=pbtn.PB_STYLE_SQUARE,
235 241 size=(24,24))
236   - #self.Bind(wx.EVT_BUTTON, self.OnToggleRaycasting)
237 242 button_raycasting.SetMenu(menu)
238 243  
239 244 self.button_raycasting = button_raycasting
... ... @@ -274,11 +279,26 @@ class VolumeToolPanel(wx.Panel):
274 279 """Events from raycasting menu."""
275 280 id = evt.GetId()
276 281 if id in ID_TO_NAME.keys():
  282 + name = ID_TO_NAME[evt.GetId()]
277 283 ps.Publisher().sendMessage('Load raycasting preset',
278 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 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 303 def OnMenuView(self, evt):
284 304 """Events from button menus."""
... ...