Commit 4ed57aabd87a640a2ad7741b67b576aec7263e6f
1 parent
fd9af976
Exists in
master
and in
68 other branches
ENH: In the process of adjusting raycasting plane
Showing
3 changed files
with
36 additions
and
8 deletions
Show diff stats
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: ["Front", "../icons/view_front.png"], | @@ -189,6 +189,7 @@ ID_TO_BMP = {const.VOL_FRONT: ["Front", "../icons/view_front.png"], | ||
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.""" |