Commit 3fb68523a156bc0e66b1ae0765414fc2a8acb2e5

Authored by Thiago Franco de Moraes
1 parent 24de5835
Exists in master

Using canvas renderer instead of vtkLine to show a colored box around

the renderer.
invesalius/data/slice_data.py
@@ -35,14 +35,13 @@ class SliceData(object): @@ -35,14 +35,13 @@ class SliceData(object):
35 self.actor = None 35 self.actor = None
36 self.cursor = None 36 self.cursor = None
37 self.text = None 37 self.text = None
38 - 38 + self.layer = 99
39 self.number = 0 39 self.number = 0
40 self.orientation = 'AXIAL' 40 self.orientation = 'AXIAL'
41 self.renderer = None 41 self.renderer = None
42 self.canvas_renderer = None 42 self.canvas_renderer = None
43 self.overlay_renderer = None 43 self.overlay_renderer = None
44 self.__create_text() 44 self.__create_text()
45 - self.__create_box()  
46 45
47 def __create_text(self): 46 def __create_text(self):
48 colour = const.ORIENTATION_COLOUR[self.orientation] 47 colour = const.ORIENTATION_COLOUR[self.orientation]
@@ -56,83 +55,6 @@ class SliceData(object): @@ -56,83 +55,6 @@ class SliceData(object):
56 text.SetValue(self.number) 55 text.SetValue(self.number)
57 self.text = text 56 self.text = text
58 57
59 - def __create_line_actor(self, line):  
60 - line_mapper = vtk.vtkPolyDataMapper2D()  
61 - line_mapper.SetInputConnection(line.GetOutputPort())  
62 -  
63 - line_actor = vtk.vtkActor2D()  
64 - line_actor.SetMapper(line_mapper)  
65 - return line_actor  
66 -  
67 - def __create_box(self):  
68 - xi = yi = 0.1  
69 - xf = yf = 200  
70 - line_i = vtk.vtkLineSource()  
71 - line_i.SetPoint1((xi, yi, 0))  
72 - line_i.SetPoint2((xf, yi, 0))  
73 - self.line_i = line_i  
74 - self.line_i_actor = self.__create_line_actor(line_i)  
75 -  
76 - line_s = vtk.vtkLineSource()  
77 - line_s.SetPoint1((xi, yf, 0))  
78 - line_s.SetPoint2((xf, yf, 0))  
79 - self.line_s = line_s  
80 - self.line_s_actor = self.__create_line_actor(line_s)  
81 -  
82 - line_l = vtk.vtkLineSource()  
83 - line_l.SetPoint1((xi, yi, 0))  
84 - line_l.SetPoint2((xi, yf, 0))  
85 - self.line_l = line_l  
86 - self.line_l_actor = self.__create_line_actor(line_l)  
87 -  
88 - line_r = vtk.vtkLineSource()  
89 - line_r.SetPoint1((xf, yi, 0))  
90 - line_r.SetPoint2((xf, yf, 0))  
91 - self.line_r = line_r  
92 - self.line_r_actor = self.__create_line_actor(line_r)  
93 -  
94 - box_actor = vtk.vtkPropAssembly()  
95 - box_actor.AddPart(self.line_i_actor)  
96 - box_actor.AddPart(self.line_s_actor)  
97 - box_actor.AddPart(self.line_l_actor)  
98 - box_actor.AddPart(self.line_r_actor)  
99 - self.box_actor = box_actor  
100 -  
101 - def __set_border_colours(self, colours_borders):  
102 - for colour, actors in colours_borders.items():  
103 - for actor in actors:  
104 - actor.GetProperty().SetColor(colour)  
105 -  
106 - def SetBorderStyle(self, style=BORDER_NONE):  
107 - colour_e = const.ORIENTATION_COLOUR[self.orientation]  
108 - colour_i = (1, 1, 1)  
109 -  
110 - extern_borders = []  
111 - intern_borders = []  
112 -  
113 - if style & BORDER_UP:  
114 - extern_borders.append(self.line_s_actor)  
115 - else:  
116 - intern_borders.append(self.line_s_actor)  
117 -  
118 - if style & BORDER_DOWN:  
119 - extern_borders.append(self.line_i_actor)  
120 - else:  
121 - intern_borders.append(self.line_i_actor)  
122 -  
123 - if style & BORDER_LEFT:  
124 - extern_borders.append(self.line_l_actor)  
125 - else:  
126 - intern_borders.append(self.line_l_actor)  
127 -  
128 - if style & BORDER_RIGHT:  
129 - extern_borders.append(self.line_r_actor)  
130 - else:  
131 - intern_borders.append(self.line_r_actor)  
132 -  
133 - self.__set_border_colours({colour_i: intern_borders,  
134 - colour_e: extern_borders})  
135 -  
136 def SetCursor(self, cursor): 58 def SetCursor(self, cursor):
137 if self.cursor: 59 if self.cursor:
138 self.overlay_renderer.RemoveActor(self.cursor.actor) 60 self.overlay_renderer.RemoveActor(self.cursor.actor)
@@ -150,28 +72,6 @@ class SliceData(object): @@ -150,28 +72,6 @@ class SliceData(object):
150 72
151 def SetOrientation(self, orientation): 73 def SetOrientation(self, orientation):
152 self.orientation = orientation 74 self.orientation = orientation
153 - colour = const.ORIENTATION_COLOUR[self.orientation]  
154 - self.text.SetColour(colour)  
155 - #self.box_actor.GetProperty().SetColor(colour)  
156 -  
157 -  
158 - def SetSize(self, size):  
159 - w, h = size  
160 - xi = yi = 0.1  
161 - xf = w - 0.1  
162 - yf = h - 0.1  
163 -  
164 - self.line_i.SetPoint1((xi, yi, 0))  
165 - self.line_i.SetPoint2((xf, yi, 0))  
166 -  
167 - self.line_s.SetPoint1((xi, yf, 0))  
168 - self.line_s.SetPoint2((xf, yf, 0))  
169 -  
170 - self.line_l.SetPoint1((xi, yi, 0))  
171 - self.line_l.SetPoint2((xi, yf, 0))  
172 -  
173 - self.line_r.SetPoint1((xf, yi, 0))  
174 - self.line_r.SetPoint2((xf, yf, 0))  
175 75
176 def Hide(self): 76 def Hide(self):
177 self.overlay_renderer.RemoveActor(self.actor) 77 self.overlay_renderer.RemoveActor(self.actor)
@@ -180,3 +80,8 @@ class SliceData(object): @@ -180,3 +80,8 @@ class SliceData(object):
180 def Show(self): 80 def Show(self):
181 self.renderer.AddActor(self.actor) 81 self.renderer.AddActor(self.actor)
182 self.renderer.AddActor(self.text.actor) 82 self.renderer.AddActor(self.text.actor)
  83 +
  84 + def draw_to_canvas(self, gc, canvas):
  85 + w, h = self.renderer.GetSize()
  86 + colour = const.ORIENTATION_COLOUR[self.orientation]
  87 + canvas.draw_rectangle((0, 0), w, h, line_colour=[255*i for i in colour] + [255], line_width=2)
invesalius/data/viewer_slice.py
@@ -232,11 +232,11 @@ class Viewer(wx.Panel): @@ -232,11 +232,11 @@ class Viewer(wx.Panel):
232 self.mip_ctrls.Hide() 232 self.mip_ctrls.Hide()
233 233
234 sizer = wx.BoxSizer(wx.HORIZONTAL) 234 sizer = wx.BoxSizer(wx.HORIZONTAL)
235 - sizer.Add(self.interactor, 1, wx.EXPAND|wx.GROW) 235 + sizer.Add(self.interactor, 1, wx.EXPAND)
236 sizer.Add(scroll, 0, wx.EXPAND|wx.GROW) 236 sizer.Add(scroll, 0, wx.EXPAND|wx.GROW)
237 237
238 background_sizer = wx.BoxSizer(wx.VERTICAL) 238 background_sizer = wx.BoxSizer(wx.VERTICAL)
239 - background_sizer.Add(sizer, 1, wx.EXPAND|wx.GROW|wx.ALL, 2) 239 + background_sizer.Add(sizer, 1, wx.EXPAND)
240 #background_sizer.Add(self.mip_ctrls, 0, wx.EXPAND|wx.GROW|wx.ALL, 2) 240 #background_sizer.Add(self.mip_ctrls, 0, wx.EXPAND|wx.GROW|wx.ALL, 2)
241 self.SetSizer(background_sizer) 241 self.SetSizer(background_sizer)
242 background_sizer.Fit(self) 242 background_sizer.Fit(self)
@@ -935,8 +935,6 @@ class Viewer(wx.Panel): @@ -935,8 +935,6 @@ class Viewer(wx.Panel):
935 935
936 def _export_picture(self, id, filename, filetype): 936 def _export_picture(self, id, filename, filetype):
937 view_prop_list = [] 937 view_prop_list = []
938 - view_prop_list.append(self.slice_data.box_actor)  
939 - self.slice_data.renderer.RemoveViewProp(self.slice_data.box_actor)  
940 938
941 dict = {"AXIAL": const.AXIAL, 939 dict = {"AXIAL": const.AXIAL,
942 "CORONAL": const.CORONAL, 940 "CORONAL": const.CORONAL,
@@ -1030,7 +1028,7 @@ class Viewer(wx.Panel): @@ -1030,7 +1028,7 @@ class Viewer(wx.Panel):
1030 #self.scroll.Bind(wx.EVT_SCROLL_ENDSCROLL, self.OnScrollBarRelease) 1028 #self.scroll.Bind(wx.EVT_SCROLL_ENDSCROLL, self.OnScrollBarRelease)
1031 self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) 1029 self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
1032 self.interactor.Bind(wx.EVT_RIGHT_UP, self.OnContextMenu) 1030 self.interactor.Bind(wx.EVT_RIGHT_UP, self.OnContextMenu)
1033 - self.interactor.Bind(wx.EVT_SIZE, self.OnSize) 1031 + # self.interactor.Bind(wx.EVT_SIZE, self.OnSize)
1034 1032
1035 def LoadImagedata(self, mask_dict): 1033 def LoadImagedata(self, mask_dict):
1036 self.SetInput(mask_dict) 1034 self.SetInput(mask_dict)
@@ -1071,7 +1069,7 @@ class Viewer(wx.Panel): @@ -1071,7 +1069,7 @@ class Viewer(wx.Panel):
1071 x, y = const.TEXT_POS_LEFT_DOWN 1069 x, y = const.TEXT_POS_LEFT_DOWN
1072 slice_data.text.SetPosition((x+slice_xi,y+slice_yi)) 1070 slice_data.text.SetPosition((x+slice_xi,y+slice_yi))
1073 slice_data.SetCursor(self.__create_cursor()) 1071 slice_data.SetCursor(self.__create_cursor())
1074 - slice_data.SetSize((w, h)) 1072 + # slice_data.SetSize((w, h))
1075 self.__update_camera(slice_data) 1073 self.__update_camera(slice_data)
1076 1074
1077 style = 0 1075 style = 0
@@ -1085,7 +1083,7 @@ class Viewer(wx.Panel): @@ -1085,7 +1083,7 @@ class Viewer(wx.Panel):
1085 if i == self.layout[0] - 1: 1083 if i == self.layout[0] - 1:
1086 style = style | sd.BORDER_RIGHT 1084 style = style | sd.BORDER_RIGHT
1087 1085
1088 - slice_data.SetBorderStyle(style) 1086 + # slice_data.SetBorderStyle(style)
1089 n += 1 1087 n += 1
1090 1088
1091 def __create_cursor(self): 1089 def __create_cursor(self):
@@ -1112,6 +1110,7 @@ class Viewer(wx.Panel): @@ -1112,6 +1110,7 @@ class Viewer(wx.Panel):
1112 1110
1113 self.canvas = CanvasRendererCTX(self, self.slice_data.renderer, self.slice_data.canvas_renderer, self.orientation) 1111 self.canvas = CanvasRendererCTX(self, self.slice_data.renderer, self.slice_data.canvas_renderer, self.orientation)
1114 self.canvas.draw_list.append(self.slice_data.text) 1112 self.canvas.draw_list.append(self.slice_data.text)
  1113 + self.canvas.draw_list.append(self.slice_data)
1115 1114
1116 # Set the slice number to the last slice to ensure the camera if far 1115 # Set the slice number to the last slice to ensure the camera if far
1117 # enough to show all slices. 1116 # enough to show all slices.
@@ -1207,10 +1206,10 @@ class Viewer(wx.Panel): @@ -1207,10 +1206,10 @@ class Viewer(wx.Panel):
1207 slice_data.canvas_renderer = canvas_renderer 1206 slice_data.canvas_renderer = canvas_renderer
1208 slice_data.overlay_renderer = overlay_renderer 1207 slice_data.overlay_renderer = overlay_renderer
1209 slice_data.actor = actor 1208 slice_data.actor = actor
1210 - slice_data.SetBorderStyle(sd.BORDER_ALL) 1209 + # slice_data.SetBorderStyle(sd.BORDER_ALL)
1211 renderer.AddActor(actor) 1210 renderer.AddActor(actor)
1212 # renderer.AddActor(slice_data.text.actor) 1211 # renderer.AddActor(slice_data.text.actor)
1213 - renderer.AddViewProp(slice_data.box_actor) 1212 + # renderer.AddViewProp(slice_data.box_actor)
1214 1213
1215 return slice_data 1214 return slice_data
1216 1215
invesalius/gui/widgets/canvas_renderer.py
@@ -586,7 +586,9 @@ class CanvasRendererCTX: @@ -586,7 +586,9 @@ class CanvasRendererCTX:
586 586
587 return (xi, yi, xf, yf) 587 return (xi, yi, xf, yf)
588 588
589 - def draw_rectangle(self, pos, width, height, line_colour=(255, 0, 0, 128), fill_colour=(0, 0, 0, 0)): 589 + def draw_rectangle(self, pos, width, height, line_colour=(255, 0, 0, 128),
  590 + fill_colour=(0, 0, 0, 0), line_width=1, pen_style=wx.PENSTYLE_SOLID,
  591 + brush_style=wx.BRUSHSTYLE_SOLID):
590 """ 592 """
591 Draw a rectangle with its top left at pos and with the given width and height. 593 Draw a rectangle with its top left at pos and with the given width and height.
592 594
@@ -603,9 +605,11 @@ class CanvasRendererCTX: @@ -603,9 +605,11 @@ class CanvasRendererCTX:
603 605
604 px, py = pos 606 px, py = pos
605 py = -py 607 py = -py
606 - gc.SetPen(wx.Pen(wx.Colour(*line_colour)))  
607 - gc.SetBrush(wx.Brush(wx.Colour(*fill_colour)))  
608 - gc.DrawRectangle(px, py, width, height) 608 + pen = wx.Pen(wx.Colour(*line_colour), width=line_width, style=pen_style)
  609 + brush = wx.Brush(wx.Colour(*fill_colour), style=brush_style)
  610 + gc.SetPen(pen)
  611 + gc.SetBrush(brush)
  612 + gc.DrawRectangle(px, py, width, -height)
609 self._drawn = True 613 self._drawn = True
610 614
611 def draw_text(self, text, pos, font=None, txt_colour=(255, 255, 255)): 615 def draw_text(self, text, pos, font=None, txt_colour=(255, 255, 255)):
@@ -666,7 +670,7 @@ class CanvasRendererCTX: @@ -666,7 +670,7 @@ class CanvasRendererCTX:
666 670
667 # Drawing the box 671 # Drawing the box
668 cw, ch = w + border * 2, h + border * 2 672 cw, ch = w + border * 2, h + border * 2
669 - self.draw_rectangle((px, py), cw, ch, bg_colour, bg_colour) 673 + self.draw_rectangle((px, py - ch), cw, ch, bg_colour, bg_colour)
670 674
671 # Drawing the text 675 # Drawing the text
672 tpx, tpy = px + border, py - border 676 tpx, tpy = px + border, py - border
@@ -817,7 +821,7 @@ class TextBox(CanvasHandlerBase): @@ -817,7 +821,7 @@ class TextBox(CanvasHandlerBase):
817 bg_colour=self.box_colour) 821 bg_colour=self.box_colour)
818 if self._highlight: 822 if self._highlight:
819 rw, rh = canvas.evt_renderer.GetSize() 823 rw, rh = canvas.evt_renderer.GetSize()
820 - canvas.draw_rectangle((px, py), w, h, 824 + canvas.draw_rectangle((px, py - h), w, h,
821 (255, 0, 0, 25), 825 (255, 0, 0, 25),
822 (255, 0, 0, 25)) 826 (255, 0, 0, 25))
823 827