diff --git a/invesalius/data/slice_data.py b/invesalius/data/slice_data.py index e0fc9d6..0c0134d 100644 --- a/invesalius/data/slice_data.py +++ b/invesalius/data/slice_data.py @@ -35,14 +35,13 @@ class SliceData(object): self.actor = None self.cursor = None self.text = None - + self.layer = 99 self.number = 0 self.orientation = 'AXIAL' self.renderer = None self.canvas_renderer = None self.overlay_renderer = None self.__create_text() - self.__create_box() def __create_text(self): colour = const.ORIENTATION_COLOUR[self.orientation] @@ -56,83 +55,6 @@ class SliceData(object): text.SetValue(self.number) self.text = text - def __create_line_actor(self, line): - line_mapper = vtk.vtkPolyDataMapper2D() - line_mapper.SetInputConnection(line.GetOutputPort()) - - line_actor = vtk.vtkActor2D() - line_actor.SetMapper(line_mapper) - return line_actor - - def __create_box(self): - xi = yi = 0.1 - xf = yf = 200 - line_i = vtk.vtkLineSource() - line_i.SetPoint1((xi, yi, 0)) - line_i.SetPoint2((xf, yi, 0)) - self.line_i = line_i - self.line_i_actor = self.__create_line_actor(line_i) - - line_s = vtk.vtkLineSource() - line_s.SetPoint1((xi, yf, 0)) - line_s.SetPoint2((xf, yf, 0)) - self.line_s = line_s - self.line_s_actor = self.__create_line_actor(line_s) - - line_l = vtk.vtkLineSource() - line_l.SetPoint1((xi, yi, 0)) - line_l.SetPoint2((xi, yf, 0)) - self.line_l = line_l - self.line_l_actor = self.__create_line_actor(line_l) - - line_r = vtk.vtkLineSource() - line_r.SetPoint1((xf, yi, 0)) - line_r.SetPoint2((xf, yf, 0)) - self.line_r = line_r - self.line_r_actor = self.__create_line_actor(line_r) - - box_actor = vtk.vtkPropAssembly() - box_actor.AddPart(self.line_i_actor) - box_actor.AddPart(self.line_s_actor) - box_actor.AddPart(self.line_l_actor) - box_actor.AddPart(self.line_r_actor) - self.box_actor = box_actor - - def __set_border_colours(self, colours_borders): - for colour, actors in colours_borders.items(): - for actor in actors: - actor.GetProperty().SetColor(colour) - - def SetBorderStyle(self, style=BORDER_NONE): - colour_e = const.ORIENTATION_COLOUR[self.orientation] - colour_i = (1, 1, 1) - - extern_borders = [] - intern_borders = [] - - if style & BORDER_UP: - extern_borders.append(self.line_s_actor) - else: - intern_borders.append(self.line_s_actor) - - if style & BORDER_DOWN: - extern_borders.append(self.line_i_actor) - else: - intern_borders.append(self.line_i_actor) - - if style & BORDER_LEFT: - extern_borders.append(self.line_l_actor) - else: - intern_borders.append(self.line_l_actor) - - if style & BORDER_RIGHT: - extern_borders.append(self.line_r_actor) - else: - intern_borders.append(self.line_r_actor) - - self.__set_border_colours({colour_i: intern_borders, - colour_e: extern_borders}) - def SetCursor(self, cursor): if self.cursor: self.overlay_renderer.RemoveActor(self.cursor.actor) @@ -150,28 +72,6 @@ class SliceData(object): def SetOrientation(self, orientation): self.orientation = orientation - colour = const.ORIENTATION_COLOUR[self.orientation] - self.text.SetColour(colour) - #self.box_actor.GetProperty().SetColor(colour) - - - def SetSize(self, size): - w, h = size - xi = yi = 0.1 - xf = w - 0.1 - yf = h - 0.1 - - self.line_i.SetPoint1((xi, yi, 0)) - self.line_i.SetPoint2((xf, yi, 0)) - - self.line_s.SetPoint1((xi, yf, 0)) - self.line_s.SetPoint2((xf, yf, 0)) - - self.line_l.SetPoint1((xi, yi, 0)) - self.line_l.SetPoint2((xi, yf, 0)) - - self.line_r.SetPoint1((xf, yi, 0)) - self.line_r.SetPoint2((xf, yf, 0)) def Hide(self): self.overlay_renderer.RemoveActor(self.actor) @@ -180,3 +80,8 @@ class SliceData(object): def Show(self): self.renderer.AddActor(self.actor) self.renderer.AddActor(self.text.actor) + + def draw_to_canvas(self, gc, canvas): + w, h = self.renderer.GetSize() + colour = const.ORIENTATION_COLOUR[self.orientation] + canvas.draw_rectangle((0, 0), w, h, line_colour=[255*i for i in colour] + [255], line_width=2) diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index 0739b63..0e27f02 100644 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -232,11 +232,11 @@ class Viewer(wx.Panel): self.mip_ctrls.Hide() sizer = wx.BoxSizer(wx.HORIZONTAL) - sizer.Add(self.interactor, 1, wx.EXPAND|wx.GROW) + sizer.Add(self.interactor, 1, wx.EXPAND) sizer.Add(scroll, 0, wx.EXPAND|wx.GROW) background_sizer = wx.BoxSizer(wx.VERTICAL) - background_sizer.Add(sizer, 1, wx.EXPAND|wx.GROW|wx.ALL, 2) + background_sizer.Add(sizer, 1, wx.EXPAND) #background_sizer.Add(self.mip_ctrls, 0, wx.EXPAND|wx.GROW|wx.ALL, 2) self.SetSizer(background_sizer) background_sizer.Fit(self) @@ -935,8 +935,6 @@ class Viewer(wx.Panel): def _export_picture(self, id, filename, filetype): view_prop_list = [] - view_prop_list.append(self.slice_data.box_actor) - self.slice_data.renderer.RemoveViewProp(self.slice_data.box_actor) dict = {"AXIAL": const.AXIAL, "CORONAL": const.CORONAL, @@ -1030,7 +1028,7 @@ class Viewer(wx.Panel): #self.scroll.Bind(wx.EVT_SCROLL_ENDSCROLL, self.OnScrollBarRelease) self.interactor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) self.interactor.Bind(wx.EVT_RIGHT_UP, self.OnContextMenu) - self.interactor.Bind(wx.EVT_SIZE, self.OnSize) + # self.interactor.Bind(wx.EVT_SIZE, self.OnSize) def LoadImagedata(self, mask_dict): self.SetInput(mask_dict) @@ -1071,7 +1069,7 @@ class Viewer(wx.Panel): x, y = const.TEXT_POS_LEFT_DOWN slice_data.text.SetPosition((x+slice_xi,y+slice_yi)) slice_data.SetCursor(self.__create_cursor()) - slice_data.SetSize((w, h)) + # slice_data.SetSize((w, h)) self.__update_camera(slice_data) style = 0 @@ -1085,7 +1083,7 @@ class Viewer(wx.Panel): if i == self.layout[0] - 1: style = style | sd.BORDER_RIGHT - slice_data.SetBorderStyle(style) + # slice_data.SetBorderStyle(style) n += 1 def __create_cursor(self): @@ -1112,6 +1110,7 @@ class Viewer(wx.Panel): self.canvas = CanvasRendererCTX(self, self.slice_data.renderer, self.slice_data.canvas_renderer, self.orientation) self.canvas.draw_list.append(self.slice_data.text) + self.canvas.draw_list.append(self.slice_data) # Set the slice number to the last slice to ensure the camera if far # enough to show all slices. @@ -1207,10 +1206,10 @@ class Viewer(wx.Panel): slice_data.canvas_renderer = canvas_renderer slice_data.overlay_renderer = overlay_renderer slice_data.actor = actor - slice_data.SetBorderStyle(sd.BORDER_ALL) + # slice_data.SetBorderStyle(sd.BORDER_ALL) renderer.AddActor(actor) # renderer.AddActor(slice_data.text.actor) - renderer.AddViewProp(slice_data.box_actor) + # renderer.AddViewProp(slice_data.box_actor) return slice_data diff --git a/invesalius/gui/widgets/canvas_renderer.py b/invesalius/gui/widgets/canvas_renderer.py index 99713d9..948f337 100644 --- a/invesalius/gui/widgets/canvas_renderer.py +++ b/invesalius/gui/widgets/canvas_renderer.py @@ -586,7 +586,9 @@ class CanvasRendererCTX: return (xi, yi, xf, yf) - def draw_rectangle(self, pos, width, height, line_colour=(255, 0, 0, 128), fill_colour=(0, 0, 0, 0)): + def draw_rectangle(self, pos, width, height, line_colour=(255, 0, 0, 128), + fill_colour=(0, 0, 0, 0), line_width=1, pen_style=wx.PENSTYLE_SOLID, + brush_style=wx.BRUSHSTYLE_SOLID): """ Draw a rectangle with its top left at pos and with the given width and height. @@ -603,9 +605,11 @@ class CanvasRendererCTX: px, py = pos py = -py - gc.SetPen(wx.Pen(wx.Colour(*line_colour))) - gc.SetBrush(wx.Brush(wx.Colour(*fill_colour))) - gc.DrawRectangle(px, py, width, height) + pen = wx.Pen(wx.Colour(*line_colour), width=line_width, style=pen_style) + brush = wx.Brush(wx.Colour(*fill_colour), style=brush_style) + gc.SetPen(pen) + gc.SetBrush(brush) + gc.DrawRectangle(px, py, width, -height) self._drawn = True def draw_text(self, text, pos, font=None, txt_colour=(255, 255, 255)): @@ -666,7 +670,7 @@ class CanvasRendererCTX: # Drawing the box cw, ch = w + border * 2, h + border * 2 - self.draw_rectangle((px, py), cw, ch, bg_colour, bg_colour) + self.draw_rectangle((px, py - ch), cw, ch, bg_colour, bg_colour) # Drawing the text tpx, tpy = px + border, py - border @@ -817,7 +821,7 @@ class TextBox(CanvasHandlerBase): bg_colour=self.box_colour) if self._highlight: rw, rh = canvas.evt_renderer.GetSize() - canvas.draw_rectangle((px, py), w, h, + canvas.draw_rectangle((px, py - h), w, h, (255, 0, 0, 25), (255, 0, 0, 25)) -- libgit2 0.21.2