9#ifndef PECLET_CORE_GEOM_GRID_SDF_HPP
10#define PECLET_CORE_GEOM_GRID_SDF_HPP
40 d.nx =
static_cast<int>(
dims[0]);
41 d.ny =
static_cast<int>(
dims[1]);
42 d.nz =
static_cast<int>(
dims[2]);
72 g.
values.resize(
static_cast<std::size_t
>(dims[0]) * dims[1] * dims[2]);
75 for (
Index i = 0;
i < dims[0]; ++
i) {
76 Vec<3> p{origin[0] +
i * spacing[0], origin[1] +
j * spacing[1],
77 origin[2] +
k * spacing[2]};
78 g.
values[
i + dims[0] * (
j + dims[1] *
k)] =
static_cast<float>(shape.eval(p));
GridSdf sample(const S &shape, IVec< 3 > dims, Vec< 3 > origin, Vec< 3 > spacing)
Sample any analytic SDF onto a grid, producing a GridSdf (e.g. to bake geometry for a solver).
PECLET_HD Real sampleGrid(Vec3< Real > p, const GridDesc< Real > &d, const Pool &pool)
Trilinear sample of a grid field, with the clamp-plus-residual off-grid extension selected by d....
Kokkos::View< T *, MemSpace > View
1D device array.
std::int64_t Index
Signed index type for grids and particles (supersedes block_decomposer's long int IndxT).
A signed-distance field sampled on a regular axis-aligned grid (negative inside solid).
double at(Index i, Index j, Index k) const
Raw sample lookup at integer grid index (i,j,k); no bounds checking.
Vec< 3 > origin
World position of sample (0,0,0).
std::vector< float > values
Sample values, x-fastest: idx = i + j*nx + k*nx*ny.
GridDesc< double > desc() const
Descriptor form of this field, for the shared sampler.
Vec< 3 > spacing
World-space distance between samples per axis.
double eval(const Vec< 3 > &p) const
Trilinearly-interpolated signed distance at world point p.
IVec< 3 > dims
Sample count per axis (nx, ny, nz).