Commit 8fa40bf2cf6da2dff74f47600652a27fddd19b8b

Authored by tfmoraes
1 parent 508c5f6e

ENH: Plotting clut raycasting widget histogram in log scale

invesalius/data/volume.py
... ... @@ -289,7 +289,6 @@ class Volume():
289 289 self.config['backgroundColorBlueComponent'])
290 290 return color_background
291 291  
292   -
293 292 def BuildTable():
294 293 curve_table = p['16bitClutCurves']
295 294 color_background = (p['backgroundColorRedComponent'],
... ...
invesalius/gui/widgets/clut_raycasting.py
... ... @@ -11,6 +11,10 @@ import wx.lib.wxcairo
11 11  
12 12 FONT_COLOUR = (1, 1, 1)
13 13 LINE_COLOUR = (0.5, 0.5, 0.5)
  14 +LINE_WIDTH = 2
  15 +HISTOGRAM_LINE_WIDTH = 1
  16 +HISTOGRAM_LINE_COLOUR = (0.5, 0.5, 0.5)
  17 +HISTOGRAM_FILL_COLOUR = (0.25, 0.25, 0.25)
14 18 BACKGROUND_TEXT_COLOUR_RGBA = (1, 0, 0, 0.5)
15 19 GRADIENT_RGBA = 0.75
16 20 RADIUS = 5
... ... @@ -33,6 +37,7 @@ class CLUTRaycastingWidget(wx.Panel):
33 37 self.end = 2000
34 38 self.padding = 10
35 39 self.to_render = False
  40 + self.to_draw_points = 0
36 41 self.histogram_pixel_points = [[0,0]]
37 42 self.histogram_array = [100,100]
38 43 self.CreatePixelArray()
... ... @@ -208,7 +213,8 @@ class CLUTRaycastingWidget(wx.Panel):
208 213 dc = wx.BufferedPaintDC(self)
209 214 dc.SetBackground(wx.Brush('Black'))
210 215 dc.Clear()
211   - self.Render(dc)
  216 + if self.to_draw_points:
  217 + self.Render(dc)
212 218  
213 219 def OnSize(self, evt):
214 220 print "Resizing"
... ... @@ -287,15 +293,20 @@ class CLUTRaycastingWidget(wx.Panel):
287 293 ctx.move_to(x + RADIUS + 1, y - RADIUS - 1 - fheight)
288 294 ctx.show_text("Value: %6d" % value)
289 295  
290   - def _draw_histogram(self, ctx):
  296 + def _draw_histogram(self, ctx, height):
291 297 # The histogram
292   - ctx.set_source_rgb(0.5, 0.5, 0.5)
293 298 x,y = self.histogram_pixel_points[0]
294 299 print "=>", x,y
295 300 ctx.move_to(x,y)
296   - ctx.set_line_width(0.5)
  301 + ctx.set_line_width(HISTOGRAM_LINE_WIDTH)
297 302 for x,y in self.histogram_pixel_points:
298 303 ctx.line_to(x,y)
  304 + ctx.line_to(0, height)
  305 + x,y = self.histogram_pixel_points[0]
  306 + ctx.set_source_rgb(*HISTOGRAM_FILL_COLOUR)
  307 + ctx.line_to(x, y)
  308 + ctx.fill_preserve()
  309 + ctx.set_source_rgb(*HISTOGRAM_LINE_COLOUR)
299 310 ctx.stroke()
300 311  
301 312 def _draw_selection_curve(self, ctx, width):
... ... @@ -314,7 +325,8 @@ class CLUTRaycastingWidget(wx.Panel):
314 325 height -= self.padding
315 326 width -= self.padding
316 327  
317   - self._draw_histogram(ctx)
  328 + self._draw_histogram(ctx, height)
  329 + ctx.set_line_width(LINE_WIDTH)
318 330 self._draw_gradient(ctx, height)
319 331 self._draw_curves(ctx)
320 332 self._draw_points(ctx)
... ... @@ -328,14 +340,18 @@ class CLUTRaycastingWidget(wx.Panel):
328 340 width -= self.padding
329 341 height -= self.padding
330 342 y_init = 0
331   - y_end = max(self.histogram_array)
  343 + y_end = math.log(max(self.histogram_array))
332 344 print y_end
333 345 proportion_x = width * 1.0 / (self.end - self.init)
334 346 proportion_y = height * 1.0 / (y_end - y_init)
335 347 print ":) ", y_end, proportion_y
336 348 self.histogram_pixel_points = []
337 349 for i in xrange(len(self.histogram_array)):
338   - y = self.histogram_array[i]
  350 + if self.histogram_array[i]:
  351 + y = math.log(self.histogram_array[i])
  352 + else:
  353 + y = 0
  354 + print y
339 355 x = self.init+ i
340 356 x = (x + abs(self.init)) * proportion_x
341 357 y = height - y * proportion_y
... ... @@ -376,9 +392,13 @@ class CLUTRaycastingWidget(wx.Panel):
376 392 print x,y
377 393  
378 394 def SetRaycastPreset(self, preset):
379   - self.points = preset.data['16bitClutCurves']
380   - self.colours = preset.data['16bitClutColors']
381   - self.CreatePixelArray()
  395 + if preset.data['advancedCLUT']:
  396 + self.to_draw_points = 1
  397 + self.points = preset.data['16bitClutCurves']
  398 + self.colours = preset.data['16bitClutColors']
  399 + self.CreatePixelArray()
  400 + else:
  401 + self.to_draw_points = 0
382 402  
383 403 def SetHistrogramArray(self, h_array):
384 404 self.histogram_array = h_array
... ...