Commit b9f1086f35713998fe9bf0b74c48fffaeb44f6ca

Authored by Thiago Franco de Moraes
1 parent 011095a8
Exists in canvas_reeng

More generic code to canvas

invesalius/data/measures.py
... ... @@ -575,7 +575,7 @@ class LinearMeasure(object):
575 575 points = []
576 576 for p in self.points:
577 577 coord.SetValue(p)
578   - cx, cy = coord.GetComputedDisplayValue(canvas.viewer.slice_data.renderer)
  578 + cx, cy = coord.GetComputedDisplayValue(canvas.evt_renderer)
579 579 # canvas.draw_circle((cx, cy), 2.5)
580 580 points.append((cx, cy))
581 581  
... ...
invesalius/data/viewer_slice.py
... ... @@ -148,15 +148,25 @@ class ContourMIPConfig(wx.Panel):
148 148  
149 149  
150 150 class CanvasRendererCTX:
151   - def __init__(self, viewer):
152   - self.viewer = viewer
153   - self.canvas_renderer = viewer.slice_data.canvas_renderer
  151 + def __init__(self, evt_renderer, canvas_renderer):
  152 + """
  153 + A Canvas to render over a vtktRenderer.
  154 +
  155 + Params:
  156 + evt_renderer: a vtkRenderer which this class is going to watch any
  157 + render event to update the canvas content.
  158 + canvas_renderer: the vtkRenderer where the canvas is going to be
  159 + added.
  160 + """
  161 + self.canvas_renderer = canvas_renderer
  162 + self.evt_renderer = evt_renderer
154 163 self._size = self.canvas_renderer.GetSize()
  164 + self.draw_list = []
155 165 self.gc = None
156 166 self.last_cam_modif_time = -1
157 167 self.modified = True
158 168 self._init_canvas()
159   - viewer.slice_data.renderer.AddObserver("StartEvent", self.OnPaint)
  169 + evt_renderer.AddObserver("StartEvent", self.OnPaint)
160 170  
161 171 def _init_canvas(self):
162 172 w, h = self._size
... ... @@ -203,7 +213,7 @@ class CanvasRendererCTX:
203 213 self._size = size
204 214 self._resize_canvas(w, h)
205 215  
206   - cam_modif_time = self.viewer.cam.GetMTime()
  216 + cam_modif_time = self.evt_renderer.GetActiveCamera().GetMTime()
207 217 if (not self.modified) and cam_modif_time == self.last_cam_modif_time:
208 218 return
209 219  
... ... @@ -233,10 +243,8 @@ class CanvasRendererCTX:
233 243 gc.Scale(1, -1)
234 244  
235 245 modified = False
236   - for (m, mr) in self.viewer.measures.get(self.viewer.orientation, self.viewer.slice_data.number):
237   - if not m.visible:
238   - continue
239   - mr.draw_to_canvas(gc, self)
  246 + for d in self.draw_list:
  247 + d.draw_to_canvas(gc, self)
240 248 modified = True
241 249  
242 250 gc.Destroy()
... ... @@ -1224,7 +1232,7 @@ class Viewer(wx.Panel):
1224 1232 self.cam = self.slice_data.renderer.GetActiveCamera()
1225 1233 self.__build_cross_lines()
1226 1234  
1227   - self.canvas = CanvasRendererCTX(self)
  1235 + self.canvas = CanvasRendererCTX(self.slice_data.renderer, self.slice_data.canvas_renderer)
1228 1236  
1229 1237 # Set the slice number to the last slice to ensure the camera if far
1230 1238 # enough to show all slices.
... ... @@ -1341,6 +1349,16 @@ class Viewer(wx.Panel):
1341 1349 self.interactor.Render()
1342 1350  
1343 1351 def UpdateCanvas(self, evt=None):
  1352 + for (m, mr) in self.measures.get(self.orientation, self.slice_data.number):
  1353 + try:
  1354 + self.canvas.draw_list.remove(mr)
  1355 + except ValueError:
  1356 + pass
  1357 +
  1358 + for (m, mr) in self.measures.get(self.orientation, self.slice_data.number):
  1359 + if m.visible:
  1360 + self.canvas.draw_list.append(mr)
  1361 +
1344 1362 self.canvas.modified = True
1345 1363 self.interactor.Render()
1346 1364  
... ... @@ -1530,14 +1548,12 @@ class Viewer(wx.Panel):
1530 1548 for actor in self.actors_by_slice_number[index]:
1531 1549 self.slice_data.renderer.AddActor(actor)
1532 1550  
1533   - # for (m, mr) in self.measures.get(self.orientation, self.slice_data.number):
1534   - # for actor in mr.GetActors():
1535   - # self.slice_data.renderer.RemoveActor(actor)
  1551 + for (m, mr) in self.measures.get(self.orientation, self.slice_data.number):
  1552 + self.canvas.draw_list.remove(mr)
1536 1553  
1537   - # for (m, mr) in self.measures.get(self.orientation, index):
1538   - # mr.renderer = self.slice_data.renderer
1539   - # for actor in mr.GetActors():
1540   - # self.slice_data.renderer.AddActor(actor)
  1554 + for (m, mr) in self.measures.get(self.orientation, index):
  1555 + if m.visible:
  1556 + self.canvas.draw_list.append(mr)
1541 1557  
1542 1558 if self.slice_._type_projection == const.PROJECTION_NORMAL:
1543 1559 self.slice_data.SetNumber(index)
... ...