[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