Skip to content

Commit 9b91f05

Browse files
author
David C. Lonie
committed
Store backend as a weakref.
1 parent 0ab3230 commit 9b91f05

File tree

8 files changed

+84
-72
lines changed

8 files changed

+84
-72
lines changed

Packages/vcs/Lib/vcsvtk/boxfillpipeline.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ def _updateScalarData(self):
3131
if self._gm.boxfill_type == "log10":
3232
data = numpy.ma.log10(data)
3333

34-
self._data1 = self._context.trimData2D(data)
35-
self._data2 = self._context.trimData2D(self._originalData2)
34+
self._data1 = self._context().trimData2D(data)
35+
self._data2 = self._context().trimData2D(self._originalData2)
3636

3737
def _updateContourLevelsAndColors(self):
3838
"""Overrides baseclass implementation."""
@@ -174,7 +174,7 @@ def _plotInternal(self):
174174

175175
# create a new renderer for this mapper
176176
# (we need one for each mapper because of camera flips)
177-
self._context.fitToViewport(
177+
self._context().fitToViewport(
178178
act, [self._template.data.x1, self._template.data.x2,
179179
self._template.data.y1, self._template.data.y2],
180180
wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform,
@@ -187,9 +187,9 @@ def _plotInternal(self):
187187
z = self._originalData1.getAxis(-3)
188188
else:
189189
z = None
190-
self._resultDict.update(self._context.renderTemplate(self._template,
191-
self._data1,
192-
self._gm, t, z))
190+
self._resultDict.update(self._context().renderTemplate(self._template,
191+
self._data1,
192+
self._gm, t, z))
193193

194194
if getattr(self._gm, "legend", None) is not None:
195195
self._contourLabels = self._gm.legend
@@ -216,17 +216,18 @@ def _plotInternal(self):
216216
self._contourLevels.append(1.e20)
217217

218218
self._resultDict.update(
219-
self._context.renderColorBar(self._template, self._contourLevels,
220-
self._contourColors,
221-
self._contourLabels,
222-
self._colorMap))
219+
self._context().renderColorBar(self._template, self._contourLevels,
220+
self._contourColors,
221+
self._contourLabels,
222+
self._colorMap))
223223

224-
if self._context.canvas._continents is None:
224+
if self._context().canvas._continents is None:
225225
self._useContinents = False
226226
if self._useContinents:
227227
projection = vcs.elements["projection"][self._gm.projection]
228-
self._context.plotContinents(x1, x2, y1, y2, projection,
229-
self._dataWrapModulo, self._template)
228+
self._context().plotContinents(x1, x2, y1, y2, projection,
229+
self._dataWrapModulo,
230+
self._template)
230231

231232
def _plotInternalBoxfill(self):
232233
"""Implements the logic to render a non-custom boxfill."""

Packages/vcs/Lib/vcsvtk/isofillpipeline.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ def _plotInternal(self):
218218

219219
# create a new renderer for this mapper
220220
# (we need one for each mapper because of cmaera flips)
221-
self._context.fitToViewport(
221+
self._context().fitToViewport(
222222
act, [self._template.data.x1, self._template.data.x2,
223223
self._template.data.y1, self._template.data.y2],
224224
wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform,
@@ -232,9 +232,9 @@ def _plotInternal(self):
232232
else:
233233
z = None
234234

235-
self._resultDict.update(self._context.renderTemplate(self._template,
236-
self._data1,
237-
self._gm, t, z))
235+
self._resultDict.update(self._context().renderTemplate(self._template,
236+
self._data1,
237+
self._gm, t, z))
238238

239239
legend = getattr(self._gm, "legend", None)
240240

@@ -259,13 +259,14 @@ def _plotInternal(self):
259259
self._contourLevels.append(1.e20)
260260

261261
self._resultDict.update(
262-
self._context.renderColorBar(self._template, self._contourLevels,
263-
self._contourColors, legend,
264-
self._colorMap))
262+
self._context().renderColorBar(self._template, self._contourLevels,
263+
self._contourColors, legend,
264+
self._colorMap))
265265

266-
if self._context.canvas._continents is None:
266+
if self._context().canvas._continents is None:
267267
self._useContinents = False
268268
if self._useContinents:
269269
projection = vcs.elements["projection"][self._gm.projection]
270-
self._context.plotContinents(x1, x2, y1, y2, projection,
271-
self._dataWrapModulo, self._template)
270+
self._context().plotContinents(x1, x2, y1, y2, projection,
271+
self._dataWrapModulo,
272+
self._template)

Packages/vcs/Lib/vcsvtk/isolinepipeline.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ def _plotInternal(self):
8585

8686
lut = vtk.vtkLookupTable()
8787
lut.SetNumberOfTableValues(len(self._contourColors))
88-
cmap = vcs.elements["colormap"][self._context.canvas.getcolormapname()]
88+
cmap = self._context().canvas.getcolormapname()
89+
cmap = vcs.elements["colormap"][cmap]
8990
for i, col in enumerate(self._contourColors):
9091
r, g, b = cmap.index[col]
9192
lut.SetTableValue(i, r / 100., g / 100., b / 100.)
@@ -136,14 +137,15 @@ def _plotInternal(self):
136137
tt = tt.name
137138
tprop = vtk.vtkTextProperty()
138139
vcs2vtk.prepTextProperty(tprop,
139-
self._context.renWin.GetSize(),
140+
self._context().renWin.GetSize(),
140141
to, tt)
141142
tprops.AddItem(tprop)
142143
if colorOverride is not None:
143144
del(vcs.elements["texttable"][tt])
144145
else: # No text properties specified. Use the default:
145146
tprop = vtk.vtkTextProperty()
146-
vcs2vtk.prepTextProperty(tprop, self._context.renWin.GetSize())
147+
vcs2vtk.prepTextProperty(tprop,
148+
self._context().renWin.GetSize())
147149
tprops.AddItem(tprop)
148150
self._resultDict["vtk_backend_contours_labels_text_properties"] = \
149151
tprops
@@ -204,7 +206,7 @@ def _plotInternal(self):
204206

205207
# create a new renderer for this mapper
206208
# (we need one for each mapper because of cmaera flips)
207-
self._context.fitToViewport(
209+
self._context().fitToViewport(
208210
act, [self._template.data.x1, self._template.data.x2,
209211
self._template.data.y1, self._template.data.y2],
210212
wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform,
@@ -218,13 +220,14 @@ def _plotInternal(self):
218220
else:
219221
z = None
220222

221-
self._resultDict.update(self._context.renderTemplate(self._template,
222-
self._data1,
223-
self._gm, t, z))
223+
self._resultDict.update(self._context().renderTemplate(self._template,
224+
self._data1,
225+
self._gm, t, z))
224226

225-
if self._context.canvas._continents is None:
227+
if self._context().canvas._continents is None:
226228
self._useContinents = False
227229
if self._useContinents:
228230
projection = vcs.elements["projection"][self._gm.projection]
229-
self._context.plotContinents(x1, x2, y1, y2, projection,
230-
self._dataWrapModulo, self._template)
231+
self._context().plotContinents(x1, x2, y1, y2, projection,
232+
self._dataWrapModulo,
233+
self._template)

Packages/vcs/Lib/vcsvtk/meshfillpipeline.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def __init__(self, context_):
1717
def _updateScalarData(self):
1818
"""Overrides baseclass implementation."""
1919
# We don't trim _data2 for meshfill:
20-
self._data1 = self._context.trimData2D(self._originalData1)
20+
self._data1 = self._context().trimData2D(self._originalData1)
2121
self._data2 = self._originalData2
2222

2323
def _updateContourLevelsAndColors(self):
@@ -240,7 +240,7 @@ def _plotInternal(self):
240240

241241
# create a new renderer for this mapper
242242
# (we need one for each mapper because of cmaera flips)
243-
self._context.fitToViewport(
243+
self._context().fitToViewport(
244244
act, [self._template.data.x1,
245245
self._template.data.x2,
246246
self._template.data.y1,
@@ -250,8 +250,8 @@ def _plotInternal(self):
250250

251251
self._resultDict["vtk_backend_actors"] = actors
252252

253-
self._template.plot(self._context.canvas, self._data1, self._gm,
254-
bg=self._context.bg,
253+
self._template.plot(self._context().canvas, self._data1, self._gm,
254+
bg=self._context().bg,
255255
X=numpy.arange(self._vtkDataSetBounds[0],
256256
self._vtkDataSetBounds[1] * 1.1,
257257
(self._vtkDataSetBounds[1] -
@@ -285,13 +285,14 @@ def _plotInternal(self):
285285
self._contourLevels.append(1.e20)
286286

287287
self._resultDict.update(
288-
self._context.renderColorBar(self._template, self._contourLevels,
289-
self._contourColors, legend,
290-
self._colorMap))
288+
self._context().renderColorBar(self._template, self._contourLevels,
289+
self._contourColors, legend,
290+
self._colorMap))
291291

292-
if self._context.canvas._continents is None:
292+
if self._context().canvas._continents is None:
293293
self._useContinents = False
294294
if self._useContinents:
295295
projection = vcs.elements["projection"][self._gm.projection]
296-
self._context.plotContinents(x1, x2, y1, y2, projection,
297-
self._dataWrapModulo, self._template)
296+
self._context().plotContinents(x1, x2, y1, y2, projection,
297+
self._dataWrapModulo,
298+
self._template)

Packages/vcs/Lib/vcsvtk/pipeline.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import weakref
2+
3+
14
class Pipeline(object):
25

36
"""Base class for a VTK pipeline implementation of a VCS plot command.
@@ -9,9 +12,10 @@ class Pipeline(object):
912
def __init__(self, context_):
1013
"""Initialize the pipeline object.
1114
12-
context is the VTKVCSBackend object that created this Pipeline.
15+
_context is a weakref of the VTKVCSBackend object that created this
16+
Pipeline.
1317
"""
14-
self._context = context_
18+
self._context = weakref.ref(context_)
1519

1620
# For now, we'll just throw everything at plot. This might need to be
1721
# broken up into set_data, set_template, etc methods...

Packages/vcs/Lib/vcsvtk/pipeline1d.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ def __init__(self, context_):
2323

2424
def plot(self, data1, data2, tmpl, gm, grid, transform):
2525
"""Overrides baseclass implementation."""
26-
Y = self._context.trimData1D(data1)
26+
Y = self._context().trimData1D(data1)
2727
if data2 is None:
2828
X = Y.getAxis(0)
2929
else:
3030
X = Y
3131
data1._yname = data2.id
32-
Y = self._context.trimData1D(data2)
32+
Y = self._context().trimData1D(data2)
3333

3434
if gm.flip:
3535
tmp = Y
@@ -39,7 +39,7 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
3939
if gm.smooth is not None:
4040
Y = smooth(Y, gm.smooth)
4141

42-
l = self._context.canvas.createline()
42+
l = self._context().canvas.createline()
4343
Xs = X[:].tolist()
4444
Ys = Y[:].tolist()
4545
xs = []
@@ -83,7 +83,7 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
8383
x2 += .0001
8484
l._worldcoordinate = [x1, x2, y1, y2]
8585
if gm.marker is not None:
86-
m = self._context.canvas.createmarker()
86+
m = self._context().canvas.createmarker()
8787
m.type = gm.marker
8888
m.color = gm.markercolor
8989
if gm.markersize > 0:
@@ -98,13 +98,13 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
9898
if not (Y[:].min() > max(y1, y2) or Y[:].max() < min(y1, y2) or
9999
X[:].min() > max(x1, x2) or X[:].max() < min(x1, x2)):
100100
if l.priority > 0:
101-
self._context.canvas.plot(l, donotstoredisplay=True)
101+
self._context().canvas.plot(l, donotstoredisplay=True)
102102
if gm.marker is not None and m.priority > 0:
103-
self._context.canvas.plot(m, donotstoredisplay=True)
103+
self._context().canvas.plot(m, donotstoredisplay=True)
104104

105-
ren2 = self._context.createRenderer()
106-
self._context.renWin.AddRenderer(ren2)
107-
tmpl.plot(self._context.canvas, data1, gm, bg=self._context.bg,
105+
ren2 = self._context().createRenderer()
106+
self._context().renWin.AddRenderer(ren2)
107+
tmpl.plot(self._context().canvas, data1, gm, bg=self._context().bg,
108108
renderer=ren2, X=X, Y=Y)
109109
if hasattr(data1, "_yname"):
110110
del(data1._yname)
@@ -113,23 +113,23 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
113113
del(vcs.elements["marker"][m.name])
114114

115115
if tmpl.legend.priority > 0:
116-
legd = self._context.canvas.createline()
116+
legd = self._context().canvas.createline()
117117
legd.x = [tmpl.legend.x1, tmpl.legend.x2]
118118
legd.y = [tmpl.legend.y1, tmpl.legend.y1] # [y1, y1] intentional.
119119
legd.color = l.color
120120
legd.width = l.width
121121
legd.type = l.type
122-
t = self._context.canvas.createtext(
122+
t = self._context().canvas.createtext(
123123
To_source=tmpl.legend.textorientation,
124124
Tt_source=tmpl.legend.texttable)
125125
t.x = tmpl.legend.x2
126126
t.y = tmpl.legend.y2
127127
t.string = data1.id
128-
self._context.canvas.plot(t, donotstoredisplay=True)
128+
self._context().canvas.plot(t, donotstoredisplay=True)
129129
sp = t.name.split(":::")
130130
del(vcs.elements["texttable"][sp[0]])
131131
del(vcs.elements["textorientation"][sp[1]])
132132
del(vcs.elements["textcombined"][t.name])
133-
self._context.canvas.plot(legd, donotstoredisplay=True)
133+
self._context().canvas.plot(legd, donotstoredisplay=True)
134134
del(vcs.elements["line"][legd.name])
135135
return {}

Packages/vcs/Lib/vcsvtk/pipeline2d.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
130130
self._vtkDataSet = grid
131131
self._vtkGeoTransform = transform
132132
self._colorMap = \
133-
vcs.elements["colormap"][self._context.canvas.getcolormapname()]
133+
vcs.elements["colormap"][self._context().canvas.getcolormapname()]
134134

135135
# Preprocess the input scalar data:
136136
self._updateScalarData()
@@ -160,8 +160,8 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
160160

161161
def _updateScalarData(self):
162162
"""Overrides baseclass implementation."""
163-
self._data1 = self._context.trimData2D(self._originalData1)
164-
self._data2 = self._context.trimData2D(self._originalData2)
163+
self._data1 = self._context().trimData2D(self._originalData1)
164+
self._data2 = self._context().trimData2D(self._originalData2)
165165
self._min = self._data1.min()
166166
self._max = self._data1.max()
167167

Packages/vcs/Lib/vcsvtk/vectorpipeline.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
2323
else:
2424
zaxis = None
2525

26-
data1 = self._context.trimData2D(data1) # Ok get3 only the last 2 dims
27-
data2 = self._context.trimData2D(data2)
26+
# Ok get3 only the last 2 dims
27+
data1 = self._context().trimData2D(data1)
28+
data2 = self._context().trimData2D(data2)
2829

2930
gridGenDict = vcs2vtk.genGridOnPoints(data1, gm, deep=False, grid=grid,
3031
geo=transform)
@@ -93,28 +94,29 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
9394
act = vtk.vtkActor()
9495
act.SetMapper(mapper)
9596

96-
cmap = vcs.elements["colormap"][self._context.canvas.getcolormapname()]
97+
cmap = self._context().canvas.getcolormapname()
98+
cmap = vcs.elements["colormap"][cmap]
9799
r, g, b = cmap.index[lcolor]
98100
act.GetProperty().SetColor(r / 100., g / 100., b / 100.)
99101

100102
x1, x2, y1, y2 = vcs.utils.getworldcoordinates(gm, data1.getAxis(-1),
101103
data1.getAxis(-2))
102104

103105
act = vcs2vtk.doWrap(act, [x1, x2, y1, y2], self._dataWrapModulo)
104-
self._context.fitToViewport(act, [tmpl.data.x1, tmpl.data.x2,
105-
tmpl.data.y1, tmpl.data.y2],
106-
[x1, x2, y1, y2],
107-
priority=tmpl.data.priority)
106+
self._context().fitToViewport(act, [tmpl.data.x1, tmpl.data.x2,
107+
tmpl.data.y1, tmpl.data.y2],
108+
[x1, x2, y1, y2],
109+
priority=tmpl.data.priority)
108110

109111
returned.update(
110-
self._context.renderTemplate(tmpl, data1, gm, taxis, zaxis))
112+
self._context().renderTemplate(tmpl, data1, gm, taxis, zaxis))
111113

112-
if self._context.canvas._continents is None:
114+
if self._context().canvas._continents is None:
113115
continents = False
114116
if continents:
115117
projection = vcs.elements["projection"][gm.projection]
116-
self._context.plotContinents(x1, x2, y1, y2, projection, self._dataWrapModulo,
117-
tmpl)
118+
self._context().plotContinents(x1, x2, y1, y2, projection,
119+
self._dataWrapModulo, tmpl)
118120

119121
returned["vtk_backend_actors"] = [[act, [x1, x2, y1, y2]]]
120122
returned["vtk_backend_glyphfilters"] = [glyphFilter]

0 commit comments

Comments
 (0)