612 FIELD3D_VEC3_T<double> p(vsP - FIELD3D_VEC3_T<double>(0.5));
615 V3i c1(static_cast<int>(
floor(p.x)),
616 static_cast<int>(
floor(p.y)),
617 static_cast<int>(
floor(p.z)));
621 FIELD3D_VEC3_T<double> f1(
static_cast<FIELD3D_VEC3_T<double>
>(c2) - p);
623 FIELD3D_VEC3_T<double> f2(
static_cast<FIELD3D_VEC3_T<double>
>(1.0) - f1);
628 c1.x = std::max(dataWindow.min.x, std::min(c1.x, dataWindow.max.x));
629 c2.x = std::max(dataWindow.min.x, std::min(c2.x, dataWindow.max.x));
630 c1.y = std::max(dataWindow.min.y, std::min(c1.y, dataWindow.max.y));
631 c2.y = std::max(dataWindow.min.y, std::min(c2.y, dataWindow.max.y));
632 c1.z = std::max(dataWindow.min.z, std::min(c1.z, dataWindow.max.z));
633 c2.z = std::max(dataWindow.min.z, std::min(c2.z, dataWindow.max.z));
636 return static_cast<Data_T
> 637 (f1.x * (f1.y * (f1.z * data.
value(c1.x, c1.y, c1.z) +
638 f2.z * data.
value(c1.x, c1.y, c2.z)) +
639 f2.y * (f1.z * data.
value(c1.x, c2.y, c1.z) +
640 f2.z * data.
value(c1.x, c2.y, c2.z))) +
641 f2.x * (f1.y * (f1.z * data.
value(c2.x, c1.y, c1.z) +
642 f2.z * data.
value(c2.x, c1.y, c2.z)) +
643 f2.y * (f1.z * data.
value(c2.x, c2.y, c1.z) +
644 f2.z * data.
value(c2.x, c2.y, c2.z))));
FIELD3D_VEC3_T< T > floor(const FIELD3D_VEC3_T< T > &v)
Floor function for Vec3.
const Box3i & dataWindow() const
Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field su...
virtual Data_T value(int i, int j, int k) const =0
Read access to a voxel. The coordinates are in integer voxel space .