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