Skip to content

Commit

Permalink
Store backend as a weakref.
Browse files Browse the repository at this point in the history
  • Loading branch information
David C. Lonie committed Jul 21, 2015
1 parent 0ab3230 commit 9b91f05
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 72 deletions.
27 changes: 14 additions & 13 deletions Packages/vcs/Lib/vcsvtk/boxfillpipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ def _updateScalarData(self):
if self._gm.boxfill_type == "log10":
data = numpy.ma.log10(data)

self._data1 = self._context.trimData2D(data)
self._data2 = self._context.trimData2D(self._originalData2)
self._data1 = self._context().trimData2D(data)
self._data2 = self._context().trimData2D(self._originalData2)

def _updateContourLevelsAndColors(self):
"""Overrides baseclass implementation."""
Expand Down Expand Up @@ -174,7 +174,7 @@ def _plotInternal(self):

# create a new renderer for this mapper
# (we need one for each mapper because of camera flips)
self._context.fitToViewport(
self._context().fitToViewport(
act, [self._template.data.x1, self._template.data.x2,
self._template.data.y1, self._template.data.y2],
wc=[x1, x2, y1, y2], geo=self._vtkGeoTransform,
Expand All @@ -187,9 +187,9 @@ def _plotInternal(self):
z = self._originalData1.getAxis(-3)
else:
z = None
self._resultDict.update(self._context.renderTemplate(self._template,
self._data1,
self._gm, t, z))
self._resultDict.update(self._context().renderTemplate(self._template,
self._data1,
self._gm, t, z))

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

self._resultDict.update(
self._context.renderColorBar(self._template, self._contourLevels,
self._contourColors,
self._contourLabels,
self._colorMap))
self._context().renderColorBar(self._template, self._contourLevels,
self._contourColors,
self._contourLabels,
self._colorMap))

if self._context.canvas._continents is None:
if self._context().canvas._continents is None:
self._useContinents = False
if self._useContinents:
projection = vcs.elements["projection"][self._gm.projection]
self._context.plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo, self._template)
self._context().plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo,
self._template)

def _plotInternalBoxfill(self):
"""Implements the logic to render a non-custom boxfill."""
Expand Down
21 changes: 11 additions & 10 deletions Packages/vcs/Lib/vcsvtk/isofillpipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ def _plotInternal(self):

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

self._resultDict.update(self._context.renderTemplate(self._template,
self._data1,
self._gm, t, z))
self._resultDict.update(self._context().renderTemplate(self._template,
self._data1,
self._gm, t, z))

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

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

self._resultDict.update(
self._context.renderColorBar(self._template, self._contourLevels,
self._contourColors, legend,
self._colorMap))
self._context().renderColorBar(self._template, self._contourLevels,
self._contourColors, legend,
self._colorMap))

if self._context.canvas._continents is None:
if self._context().canvas._continents is None:
self._useContinents = False
if self._useContinents:
projection = vcs.elements["projection"][self._gm.projection]
self._context.plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo, self._template)
self._context().plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo,
self._template)
23 changes: 13 additions & 10 deletions Packages/vcs/Lib/vcsvtk/isolinepipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ def _plotInternal(self):

lut = vtk.vtkLookupTable()
lut.SetNumberOfTableValues(len(self._contourColors))
cmap = vcs.elements["colormap"][self._context.canvas.getcolormapname()]
cmap = self._context().canvas.getcolormapname()
cmap = vcs.elements["colormap"][cmap]
for i, col in enumerate(self._contourColors):
r, g, b = cmap.index[col]
lut.SetTableValue(i, r / 100., g / 100., b / 100.)
Expand Down Expand Up @@ -136,14 +137,15 @@ def _plotInternal(self):
tt = tt.name
tprop = vtk.vtkTextProperty()
vcs2vtk.prepTextProperty(tprop,
self._context.renWin.GetSize(),
self._context().renWin.GetSize(),
to, tt)
tprops.AddItem(tprop)
if colorOverride is not None:
del(vcs.elements["texttable"][tt])
else: # No text properties specified. Use the default:
tprop = vtk.vtkTextProperty()
vcs2vtk.prepTextProperty(tprop, self._context.renWin.GetSize())
vcs2vtk.prepTextProperty(tprop,
self._context().renWin.GetSize())
tprops.AddItem(tprop)
self._resultDict["vtk_backend_contours_labels_text_properties"] = \
tprops
Expand Down Expand Up @@ -204,7 +206,7 @@ def _plotInternal(self):

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

self._resultDict.update(self._context.renderTemplate(self._template,
self._data1,
self._gm, t, z))
self._resultDict.update(self._context().renderTemplate(self._template,
self._data1,
self._gm, t, z))

if self._context.canvas._continents is None:
if self._context().canvas._continents is None:
self._useContinents = False
if self._useContinents:
projection = vcs.elements["projection"][self._gm.projection]
self._context.plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo, self._template)
self._context().plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo,
self._template)
21 changes: 11 additions & 10 deletions Packages/vcs/Lib/vcsvtk/meshfillpipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def __init__(self, context_):
def _updateScalarData(self):
"""Overrides baseclass implementation."""
# We don't trim _data2 for meshfill:
self._data1 = self._context.trimData2D(self._originalData1)
self._data1 = self._context().trimData2D(self._originalData1)
self._data2 = self._originalData2

def _updateContourLevelsAndColors(self):
Expand Down Expand Up @@ -240,7 +240,7 @@ def _plotInternal(self):

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

self._resultDict["vtk_backend_actors"] = actors

self._template.plot(self._context.canvas, self._data1, self._gm,
bg=self._context.bg,
self._template.plot(self._context().canvas, self._data1, self._gm,
bg=self._context().bg,
X=numpy.arange(self._vtkDataSetBounds[0],
self._vtkDataSetBounds[1] * 1.1,
(self._vtkDataSetBounds[1] -
Expand Down Expand Up @@ -285,13 +285,14 @@ def _plotInternal(self):
self._contourLevels.append(1.e20)

self._resultDict.update(
self._context.renderColorBar(self._template, self._contourLevels,
self._contourColors, legend,
self._colorMap))
self._context().renderColorBar(self._template, self._contourLevels,
self._contourColors, legend,
self._colorMap))

if self._context.canvas._continents is None:
if self._context().canvas._continents is None:
self._useContinents = False
if self._useContinents:
projection = vcs.elements["projection"][self._gm.projection]
self._context.plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo, self._template)
self._context().plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo,
self._template)
8 changes: 6 additions & 2 deletions Packages/vcs/Lib/vcsvtk/pipeline.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import weakref


class Pipeline(object):

"""Base class for a VTK pipeline implementation of a VCS plot command.
Expand All @@ -9,9 +12,10 @@ class Pipeline(object):
def __init__(self, context_):
"""Initialize the pipeline object.
context is the VTKVCSBackend object that created this Pipeline.
_context is a weakref of the VTKVCSBackend object that created this
Pipeline.
"""
self._context = context_
self._context = weakref.ref(context_)

# For now, we'll just throw everything at plot. This might need to be
# broken up into set_data, set_template, etc methods...
Expand Down
26 changes: 13 additions & 13 deletions Packages/vcs/Lib/vcsvtk/pipeline1d.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ def __init__(self, context_):

def plot(self, data1, data2, tmpl, gm, grid, transform):
"""Overrides baseclass implementation."""
Y = self._context.trimData1D(data1)
Y = self._context().trimData1D(data1)
if data2 is None:
X = Y.getAxis(0)
else:
X = Y
data1._yname = data2.id
Y = self._context.trimData1D(data2)
Y = self._context().trimData1D(data2)

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

l = self._context.canvas.createline()
l = self._context().canvas.createline()
Xs = X[:].tolist()
Ys = Y[:].tolist()
xs = []
Expand Down Expand Up @@ -83,7 +83,7 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
x2 += .0001
l._worldcoordinate = [x1, x2, y1, y2]
if gm.marker is not None:
m = self._context.canvas.createmarker()
m = self._context().canvas.createmarker()
m.type = gm.marker
m.color = gm.markercolor
if gm.markersize > 0:
Expand All @@ -98,13 +98,13 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
if not (Y[:].min() > max(y1, y2) or Y[:].max() < min(y1, y2) or
X[:].min() > max(x1, x2) or X[:].max() < min(x1, x2)):
if l.priority > 0:
self._context.canvas.plot(l, donotstoredisplay=True)
self._context().canvas.plot(l, donotstoredisplay=True)
if gm.marker is not None and m.priority > 0:
self._context.canvas.plot(m, donotstoredisplay=True)
self._context().canvas.plot(m, donotstoredisplay=True)

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

if tmpl.legend.priority > 0:
legd = self._context.canvas.createline()
legd = self._context().canvas.createline()
legd.x = [tmpl.legend.x1, tmpl.legend.x2]
legd.y = [tmpl.legend.y1, tmpl.legend.y1] # [y1, y1] intentional.
legd.color = l.color
legd.width = l.width
legd.type = l.type
t = self._context.canvas.createtext(
t = self._context().canvas.createtext(
To_source=tmpl.legend.textorientation,
Tt_source=tmpl.legend.texttable)
t.x = tmpl.legend.x2
t.y = tmpl.legend.y2
t.string = data1.id
self._context.canvas.plot(t, donotstoredisplay=True)
self._context().canvas.plot(t, donotstoredisplay=True)
sp = t.name.split(":::")
del(vcs.elements["texttable"][sp[0]])
del(vcs.elements["textorientation"][sp[1]])
del(vcs.elements["textcombined"][t.name])
self._context.canvas.plot(legd, donotstoredisplay=True)
self._context().canvas.plot(legd, donotstoredisplay=True)
del(vcs.elements["line"][legd.name])
return {}
6 changes: 3 additions & 3 deletions Packages/vcs/Lib/vcsvtk/pipeline2d.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
self._vtkDataSet = grid
self._vtkGeoTransform = transform
self._colorMap = \
vcs.elements["colormap"][self._context.canvas.getcolormapname()]
vcs.elements["colormap"][self._context().canvas.getcolormapname()]

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

def _updateScalarData(self):
"""Overrides baseclass implementation."""
self._data1 = self._context.trimData2D(self._originalData1)
self._data2 = self._context.trimData2D(self._originalData2)
self._data1 = self._context().trimData2D(self._originalData1)
self._data2 = self._context().trimData2D(self._originalData2)
self._min = self._data1.min()
self._max = self._data1.max()

Expand Down
24 changes: 13 additions & 11 deletions Packages/vcs/Lib/vcsvtk/vectorpipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ def plot(self, data1, data2, tmpl, gm, grid, transform):
else:
zaxis = None

data1 = self._context.trimData2D(data1) # Ok get3 only the last 2 dims
data2 = self._context.trimData2D(data2)
# Ok get3 only the last 2 dims
data1 = self._context().trimData2D(data1)
data2 = self._context().trimData2D(data2)

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

cmap = vcs.elements["colormap"][self._context.canvas.getcolormapname()]
cmap = self._context().canvas.getcolormapname()
cmap = vcs.elements["colormap"][cmap]
r, g, b = cmap.index[lcolor]
act.GetProperty().SetColor(r / 100., g / 100., b / 100.)

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

act = vcs2vtk.doWrap(act, [x1, x2, y1, y2], self._dataWrapModulo)
self._context.fitToViewport(act, [tmpl.data.x1, tmpl.data.x2,
tmpl.data.y1, tmpl.data.y2],
[x1, x2, y1, y2],
priority=tmpl.data.priority)
self._context().fitToViewport(act, [tmpl.data.x1, tmpl.data.x2,
tmpl.data.y1, tmpl.data.y2],
[x1, x2, y1, y2],
priority=tmpl.data.priority)

returned.update(
self._context.renderTemplate(tmpl, data1, gm, taxis, zaxis))
self._context().renderTemplate(tmpl, data1, gm, taxis, zaxis))

if self._context.canvas._continents is None:
if self._context().canvas._continents is None:
continents = False
if continents:
projection = vcs.elements["projection"][gm.projection]
self._context.plotContinents(x1, x2, y1, y2, projection, self._dataWrapModulo,
tmpl)
self._context().plotContinents(x1, x2, y1, y2, projection,
self._dataWrapModulo, tmpl)

returned["vtk_backend_actors"] = [[act, [x1, x2, y1, y2]]]
returned["vtk_backend_glyphfilters"] = [glyphFilter]
Expand Down

0 comments on commit 9b91f05

Please sign in to comment.