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,7 +575,7 @@ class LinearMeasure(object): | ||
| 575 | points = [] | 575 | points = [] |
| 576 | for p in self.points: | 576 | for p in self.points: |
| 577 | coord.SetValue(p) | 577 | coord.SetValue(p) |
| 578 | - cx, cy = coord.GetComputedDisplayValue(canvas.viewer.slice_data.renderer) | 578 | + cx, cy = coord.GetComputedDisplayValue(canvas.evt_renderer) |
| 579 | # canvas.draw_circle((cx, cy), 2.5) | 579 | # canvas.draw_circle((cx, cy), 2.5) |
| 580 | points.append((cx, cy)) | 580 | points.append((cx, cy)) |
| 581 | 581 |
invesalius/data/viewer_slice.py
| @@ -148,15 +148,25 @@ class ContourMIPConfig(wx.Panel): | @@ -148,15 +148,25 @@ class ContourMIPConfig(wx.Panel): | ||
| 148 | 148 | ||
| 149 | 149 | ||
| 150 | class CanvasRendererCTX: | 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 | self._size = self.canvas_renderer.GetSize() | 163 | self._size = self.canvas_renderer.GetSize() |
| 164 | + self.draw_list = [] | ||
| 155 | self.gc = None | 165 | self.gc = None |
| 156 | self.last_cam_modif_time = -1 | 166 | self.last_cam_modif_time = -1 |
| 157 | self.modified = True | 167 | self.modified = True |
| 158 | self._init_canvas() | 168 | self._init_canvas() |
| 159 | - viewer.slice_data.renderer.AddObserver("StartEvent", self.OnPaint) | 169 | + evt_renderer.AddObserver("StartEvent", self.OnPaint) |
| 160 | 170 | ||
| 161 | def _init_canvas(self): | 171 | def _init_canvas(self): |
| 162 | w, h = self._size | 172 | w, h = self._size |
| @@ -203,7 +213,7 @@ class CanvasRendererCTX: | @@ -203,7 +213,7 @@ class CanvasRendererCTX: | ||
| 203 | self._size = size | 213 | self._size = size |
| 204 | self._resize_canvas(w, h) | 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 | if (not self.modified) and cam_modif_time == self.last_cam_modif_time: | 217 | if (not self.modified) and cam_modif_time == self.last_cam_modif_time: |
| 208 | return | 218 | return |
| 209 | 219 | ||
| @@ -233,10 +243,8 @@ class CanvasRendererCTX: | @@ -233,10 +243,8 @@ class CanvasRendererCTX: | ||
| 233 | gc.Scale(1, -1) | 243 | gc.Scale(1, -1) |
| 234 | 244 | ||
| 235 | modified = False | 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 | modified = True | 248 | modified = True |
| 241 | 249 | ||
| 242 | gc.Destroy() | 250 | gc.Destroy() |
| @@ -1224,7 +1232,7 @@ class Viewer(wx.Panel): | @@ -1224,7 +1232,7 @@ class Viewer(wx.Panel): | ||
| 1224 | self.cam = self.slice_data.renderer.GetActiveCamera() | 1232 | self.cam = self.slice_data.renderer.GetActiveCamera() |
| 1225 | self.__build_cross_lines() | 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 | # Set the slice number to the last slice to ensure the camera if far | 1237 | # Set the slice number to the last slice to ensure the camera if far |
| 1230 | # enough to show all slices. | 1238 | # enough to show all slices. |
| @@ -1341,6 +1349,16 @@ class Viewer(wx.Panel): | @@ -1341,6 +1349,16 @@ class Viewer(wx.Panel): | ||
| 1341 | self.interactor.Render() | 1349 | self.interactor.Render() |
| 1342 | 1350 | ||
| 1343 | def UpdateCanvas(self, evt=None): | 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 | self.canvas.modified = True | 1362 | self.canvas.modified = True |
| 1345 | self.interactor.Render() | 1363 | self.interactor.Render() |
| 1346 | 1364 | ||
| @@ -1530,14 +1548,12 @@ class Viewer(wx.Panel): | @@ -1530,14 +1548,12 @@ class Viewer(wx.Panel): | ||
| 1530 | for actor in self.actors_by_slice_number[index]: | 1548 | for actor in self.actors_by_slice_number[index]: |
| 1531 | self.slice_data.renderer.AddActor(actor) | 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 | if self.slice_._type_projection == const.PROJECTION_NORMAL: | 1558 | if self.slice_._type_projection == const.PROJECTION_NORMAL: |
| 1543 | self.slice_data.SetNumber(index) | 1559 | self.slice_data.SetNumber(index) |