[Yt-svn] yt-commit r1709 - trunk/yt/extensions/image_panner

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Thu Apr 29 12:10:41 PDT 2010


Author: mturk
Date: Thu Apr 29 12:10:40 2010
New Revision: 1709
URL: http://yt.enzotools.org/changeset/1709

Log:
Adding the non-local image panner



Modified:
   trunk/yt/extensions/image_panner/__init__.py
   trunk/yt/extensions/image_panner/pan_and_scan_widget.py
   trunk/yt/extensions/image_panner/vm_panner.py

Modified: trunk/yt/extensions/image_panner/__init__.py
==============================================================================
--- trunk/yt/extensions/image_panner/__init__.py	(original)
+++ trunk/yt/extensions/image_panner/__init__.py	Thu Apr 29 12:10:40 2010
@@ -23,4 +23,4 @@
 
 from vm_panner import VariableMeshPanner, WindowedVariableMeshPanner, \
                 MultipleWindowVariableMeshPanner, ImageSaver, \
-                PanningCeleritasStreamer
+                PanningCeleritasStreamer, NonLocalDataImagePanner

Modified: trunk/yt/extensions/image_panner/pan_and_scan_widget.py
==============================================================================
--- trunk/yt/extensions/image_panner/pan_and_scan_widget.py	(original)
+++ trunk/yt/extensions/image_panner/pan_and_scan_widget.py	Thu Apr 29 12:10:40 2010
@@ -295,3 +295,10 @@
     @cached_property
     def _get_main_panner(self):
         return self.pf.h.image_panner(self.source, (512, 512), "Density")
+
+def pan_and_scan_directory(dir_name):
+    import glob, os
+    fns = [ fn[:-10] for fn in
+            glob.glob(os.path.join(dir_name, "**", "*.hierarchy")) ]
+    selector = OutputSelector(outputs = fns)
+    return selector

Modified: trunk/yt/extensions/image_panner/vm_panner.py
==============================================================================
--- trunk/yt/extensions/image_panner/vm_panner.py	(original)
+++ trunk/yt/extensions/image_panner/vm_panner.py	Thu Apr 29 12:10:40 2010
@@ -63,6 +63,7 @@
 
     @property
     def bounds(self):
+        if not hasattr(self, 'pf'): self.pf = self.source.pf
         DLE, DRE = self.pf["DomainLeftEdge"], self.pf["DomainRightEdge"]
         ax = self.source.axis
         xax, yax = x_dict[ax], y_dict[ax]
@@ -300,7 +301,6 @@
             new_dict = {}
             new_dict.update(d)
             for f in _wrapped_methods:
-                print "Constructing proxy for", f
                 new_dict[f] = return_proxy(f)
             return type.__new__(cls, name, b, new_dict)
 
@@ -341,6 +341,64 @@
         self.mec.execute("%s.callback(%s.buffer)" % (
             self._var_name, self._var_name), self.engine_id)
 
+class ProxySource(object):
+    # This proxies only the things we know we need
+    # Note that we assume we will only have a single engine.
+    def __init__(self, mec, idnum, source_varname):
+        self.mec = mec
+        self.idnum = idnum
+        self.source_varname = source_varname
+        self.mec.execute("_tmp_%s = %s.axis" % (
+            self.idnum, self.source_varname))
+        self.axis = self.mec.pull("_tmp_%s" % self.idnum)[0]
+
+    def keys(self):
+        self.mec.execute("_tmp_%s = %s.keys()" % (
+            self.idnum, self.source_varname))
+        keys = self.mec.pull("_tmp_%s" % self.idnum)[0]
+        dd = dict( (k, None) for k in keys )
+        return dd
+
+    @property
+    def pf(self):
+        self.mec.execute("_tmp_%s = %s.pf['DomainLeftEdge']" % (
+            self.idnum, self.source_varname))
+        DLE = self.mec.pull("_tmp_%s" % self.idnum)[0]
+        self.mec.execute("_tmp_%s = %s.pf['DomainRightEdge']" % (
+            self.idnum, self.source_varname))
+        DRE = self.mec.pull("_tmp_%s" % self.idnum)[0]
+        return dict(DomainLeftEdge = DLE, DomainRightEdge = DRE)
+
+class ProxyFixedResolutionBuffer(dict):
+    pass
+
+class NonLocalDataImagePanner(VariableMeshPanner):
+    def __init__(self, mec, source_varname, size, field,
+                 callback = None, viewport_callback = None):
+        self.source_varname = source_varname
+        self._var_name = "_image_panner_%s" % (id(self))
+        self.mec = mec
+        self.mec.execute("import yt.extensions.image_panner")
+        self.mec.execute("%s = yt.extensions.image_panner.VariableMeshPanner(" % (
+                        self._var_name) +
+                          "%s, (%s, %s), '%s')" % (
+                        source_varname, size[0], size[1], field))
+
+        ps = ProxySource(mec, id(self), source_varname)
+        self._prfb = ProxyFixedResolutionBuffer()
+
+        VariableMeshPanner.__init__(self, ps, size, field,
+                        callback, viewport_callback)
+
+    def _regenerate_buffer(self):
+        args = (self.xlim, self.ylim)
+        self.mec.push({'_tmp_%s' % id(self) : args})
+        self.mec.execute("%s.set_limits(*_tmp_%s)" % (self._var_name, id(self)))
+        self.mec.execute("_tmp_%s = %s.buffer" % (id(self), self._var_name))
+        self._prfb[self.field] = self.mec.pull("_tmp_%s" % (id(self)))[0]
+        self._prfb.bounds = self.xlim + self.ylim
+        self._buffer = self._prfb
+
 class ImageSaver(object):
     def __init__(self, tile_id):
         """



More information about the yt-svn mailing list