[Yt-svn] yt-commit r1574 - trunk/yt/extensions/volume_rendering

skillman at wrangler.dreamhost.com skillman at wrangler.dreamhost.com
Wed Jan 13 19:08:46 PST 2010


Author: skillman
Date: Wed Jan 13 19:08:45 2010
New Revision: 1574
URL: http://yt.enzotools.org/changeset/1574

Log:
Fixed bug in volume renderer that leads to projecting only half the requested volume. Also allowed call to direct_ray_cast to have kwarg field='Density' so that non-density fields can be rendered. Few other minor extent issues with sqrt(2) to sqrt(3) to get a whole cube. Can now also give whole_box=True option to the direct_ray_cast as a kwarg.



Modified:
   trunk/yt/extensions/volume_rendering/grid_partitioner.py
   trunk/yt/extensions/volume_rendering/software_sampler.py

Modified: trunk/yt/extensions/volume_rendering/grid_partitioner.py
==============================================================================
--- trunk/yt/extensions/volume_rendering/grid_partitioner.py	(original)
+++ trunk/yt/extensions/volume_rendering/grid_partitioner.py	Wed Jan 13 19:08:45 2010
@@ -85,7 +85,7 @@
                 yield PartitionedGrid(
                     data, left_edge, right_edge, dims)
 
-def partition_all_grids(grid_list, field = "Density",
+def partition_all_grids(grid_list, field = "Density", log_field = True,
                         threshold = (-1e300, 1e300), eval_func = None):
     new_grids = []
     pbar = get_pbar("Partitioning ", len(grid_list))
@@ -95,7 +95,7 @@
         if not eval_func(g): continue
         pbar.update(i)
         if g.dds[0] < dx: dx = g.dds[0]
-        to_add = partition_grid(g, field, True, threshold)
+        to_add = partition_grid(g, field, log_field, threshold)
         if to_add is not None: new_grids += to_add
     pbar.finish()
     for g in new_grids: g.min_dds = dx

Modified: trunk/yt/extensions/volume_rendering/software_sampler.py
==============================================================================
--- trunk/yt/extensions/volume_rendering/software_sampler.py	(original)
+++ trunk/yt/extensions/volume_rendering/software_sampler.py	Wed Jan 13 19:08:45 2010
@@ -28,18 +28,22 @@
 from yt.funcs import *
 
 def direct_ray_cast(pf, L, center, W, Nvec, tf, 
-                    partitioned_grids = None):
+                    partitioned_grids = None, field = 'Density', log_field = True, whole_box=False):
     center = na.array(center, dtype='float64')
 
     # This just helps us keep track of stuff, and it's cheap
     cp = pf.h.cutting(L, center)
-    back_center = center - cp._norm_vec * W
-    front_center = center + cp._norm_vec * W
-    cylinder = pf.h.disk(back_center, L, na.sqrt(2)*W, 2*W)
+    back_center = center - cp._norm_vec * na.sqrt(3) * W
+    front_center = center + cp._norm_vec * na.sqrt(3) *  W
+    if whole_box:
+        cylinder = pf.h.region([0.5]*3,[0.0]*3,[1.0]*3)
+    else:
+        cylinder = pf.h.disk(center, L, na.sqrt(3)*W, 2*W*na.sqrt(3))
 
     if partitioned_grids == None:
         partitioned_grids = partition_all_grids(cylinder._grids,
-                                    eval_func = lambda g: na.any(cylinder._get_point_indices(g)))
+                                    eval_func = lambda g: na.any(cylinder._get_point_indices(g)),
+                                                field = field, log_field = log_field)
     #partitioned_grids = partition_all_grids(pf.h.grids)
 
     LE = (na.array([grid.LeftEdge for grid in partitioned_grids]) - back_center) * cp._norm_vec
@@ -55,9 +59,9 @@
     # Now we need to generate regular x,y,z values in regular space for our vector
     # starting places.
     px, py = na.mgrid[-W:W:Nvec*1j,-W:W:Nvec*1j]
-    xv = cp._inv_mat[0,0]*px + cp._inv_mat[0,1]*py + cp.center[0]
-    yv = cp._inv_mat[1,0]*px + cp._inv_mat[1,1]*py + cp.center[1]
-    zv = cp._inv_mat[2,0]*px + cp._inv_mat[2,1]*py + cp.center[2]
+    xv = cp._inv_mat[0,0]*px + cp._inv_mat[0,1]*py + back_center[0]
+    yv = cp._inv_mat[1,0]*px + cp._inv_mat[1,1]*py + back_center[1]
+    zv = cp._inv_mat[2,0]*px + cp._inv_mat[2,1]*py + back_center[2]
     vectors = na.array([xv, yv, zv], dtype='float64').transpose()
     vectors = vectors.copy('F')
     xp0, xp1 = px.min(), px.max()
@@ -65,7 +69,7 @@
 
     ng = partitioned_grids.size
     norm_vec = cp._norm_vec
-    norm_vec = cp._norm_vec * (2.0*W)
+    norm_vec = cp._norm_vec * (2.0*W*na.sqrt(3))
     hit = 0
     tnow = time.time()
     every = na.ceil(len(partitioned_grids) / 100.0)



More information about the yt-svn mailing list