Commit b9f1086f35713998fe9bf0b74c48fffaeb44f6ca
1 parent
011095a8
Exists in
canvas_reeng
More generic code to canvas
Showing
2 changed files
with
34 additions
and
18 deletions
Show diff stats
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) | ... | ... |