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) | ... | ... |