[Yt-svn] yt: Adding a callback for changing of the viewport, not just cha...
hg at spacepope.org
hg at spacepope.org
Wed Mar 24 17:25:42 PDT 2010
hg Repository: yt
details: yt/rev/c467a9ccc6ac
changeset: 1478:c467a9ccc6ac
user: Matthew Turk <matthewturk at gmail.com>
date:
Wed Mar 24 17:25:36 2010 -0700
description:
Adding a callback for changing of the viewport, not just changing the buffer.
This allows us to have a pan and scan widget on a controller node that sends
viewport information to backend renderers. It works using the Chaco widget,
even. More information will be forthcoming, but launching an ipcontroller, 4
ipengine processes and running:
http://paste.enzotools.org/show/387/
will get you started!
diffstat:
yt/extensions/image_panner/vm_panner.py | 34 ++++++++++++++++++++++------------
1 files changed, 22 insertions(+), 12 deletions(-)
diffs (90 lines):
diff -r 3b3d5cfe2ce8 -r c467a9ccc6ac yt/extensions/image_panner/vm_panner.py
--- a/yt/extensions/image_panner/vm_panner.py Wed Mar 24 16:37:34 2010 -0700
+++ b/yt/extensions/image_panner/vm_panner.py Wed Mar 24 17:25:36 2010 -0700
@@ -27,27 +27,28 @@
from yt.lagos import data_object_registry, AMRProjBase, AMRSliceBase, \
x_dict, y_dict
-class SourceTypeException(Exception):
- def __init__(self, source):
- self.source = source
-
- def __repr__(self):
- return "Wrong type: %s, %s" % (self.source, type(self.source))
-
class VariableMeshPanner(object):
_buffer = None
- def __init__(self, source, size, field, callback = None):
+ def __init__(self, source, size, field, callback = None,
+ viewport_callback = None):
if not isinstance(source, (AMRProjBase, AMRSliceBase)):
- print "PROBLEM WITH SOURCE", source, type(source)
+ raise RuntimeError
if callback is None:
callback = lambda a: None
self.callback = callback
+ if viewport_callback is None:
+ viewport_callback = lambda a, b: None
+ self.viewport_callback = viewport_callback
self.size = size
self.source = source
self.field = field
self.xlim, self.ylim = self.bounds
+ def _run_callbacks(self):
+ self.callback(self.buffer)
+ self.viewport_callback(self.xlim, self.ylim)
+
@property
def bounds(self):
DLE, DRE = self.pf["DomainLeftEdge"], self.pf["DomainRightEdge"]
@@ -70,12 +71,12 @@
nWx, nWy = Wx/factor, Wy/factor
self.xlim = (centerx - nWx*0.5, centerx + nWx*0.5)
self.ylim = (centery - nWy*0.5, centery + nWy*0.5)
- self.callback(self.buffer)
+ self._run_callbacks(self.buffer)
def pan(self, deltas):
self.xlim = (self.xlim[0] + deltas[0], self.xlim[1] + deltas[0])
self.ylim = (self.ylim[0] + deltas[1], self.ylim[1] + deltas[1])
- self.callback(self.buffer)
+ self._run_callbacks()
def pan_x(self, delta):
self.pan( (delta, 0.0) )
@@ -120,8 +121,14 @@
print "Returning buffer with extrema",
print mi, ma
b = (b - mi)/(ma - mi)
+ self._run_callbacks()
return b
+ def set_limits(self, xlim, ylim):
+ self.xlim = xlim
+ self.ylim = ylim
+ self._run_callbacks()
+
data_object_registry["image_panner"] = VariableMeshPanner
class WindowedVariableMeshPanner(VariableMeshPanner):
@@ -169,6 +176,9 @@
def pan_rel_y(self, delta):
for w in self.windows: w.pan_rel_y(delta)
+ def set_limits(self, xlim, ylim):
+ for w in self.windows: w.set_limits(xlim, ylim)
+
class RemoteWindowedVariableMeshController(MultipleWindowVariableMeshPanner):
def __init__(self, source, mec = None):
if mec is None:
@@ -207,7 +217,7 @@
data_object_registry["remote_image_panner"] = RemoteWindowedVariableMeshController
_wrapped_methods = ["zoom", "pan", "pan_x", "pan_y", "pan_rel",
- "pan_rel_x", "pan_rel_y", "set_low_high"]
+ "pan_rel_x", "pan_rel_y", "set_limits"]
class WindowedVariableMeshPannerProxy(object):
class __metaclass__(type):
More information about the yt-svn
mailing list