223 double spline_radius = 2 *
sqrt(3.0);
226 #define x0 STARTINGX(*vol_voxels) 227 #define xF FINISHINGX(*vol_voxels) 228 #define y0 STARTINGY(*vol_voxels) 229 #define yF FINISHINGY(*vol_voxels) 230 #define z0 STARTINGZ(*vol_voxels) 231 #define zF FINISHINGZ(*vol_voxels) 234 bool condition =
true;
235 (*vol_voxels)().printShape();
236 std::cout << std::endl;
237 std::cout <<
"x0= " <<
x0 <<
" xF= " <<
xF << std::endl;
238 std::cout <<
"y0= " <<
y0 <<
" yF= " <<
yF << std::endl;
239 std::cout <<
"z0= " <<
z0 <<
" zF= " <<
zF << std::endl;
249 for (k = (
int)
ZZ(grid.lowest); k <= (
int)
ZZ(grid.highest); k++)
253 for (i = (
int)
YY(grid.lowest); i <= (
int)
YY(grid.highest); i++)
257 for (j = (
int)
XX(grid.lowest); j <= (
int)
XX(grid.highest); j++)
263 printf(
"Dealing spline at (%d,%d,%d) = %f\n", j, i, k,
A3D_ELEM(vol_splines, k, i, j));
264 std::cout <<
"Center of the blob " 265 << act_coord.transpose() << std::endl;
271 if (
XX(act_coord) >=
xF) process =
false;
272 if (
YY(act_coord) >=
yF) process =
false;
273 if (
ZZ(act_coord) >=
zF) process =
false;
274 if (
XX(act_coord) <=
x0) process =
false;
275 if (
YY(act_coord) <=
y0) process =
false;
276 if (
ZZ(act_coord) <=
z0) process =
false;
278 if (!process && condition) std::cout <<
" It is outside output volume\n";
280 if (!grid.is_interesting(act_coord))
283 if (process && condition) std::cout <<
" It is not interesting\n";
290 V3_PLUS_CT(corner1, act_coord, -spline_radius);
291 V3_PLUS_CT(corner2, act_coord, spline_radius);
295 std::cout <<
"Corner 1 for this point " << corner1.transpose() << std::endl;
296 std::cout <<
"Corner 2 for this point " << corner2.transpose() << std::endl;
310 std::cout <<
"Clipped and rounded Corner 1 " << corner1.transpose() << std::endl;
311 std::cout <<
"Clipped and rounded Corner 2 " << corner2.transpose() << std::endl;
316 for (
int iz =
ZZ(corner1); iz <=
ZZ(corner2); iz++)
319 for (
int iy =
YY(corner1); iy <=
YY(corner2); iy++)
322 for (
int ix =
XX(corner1); ix <=
XX(corner2); ix++)
324 if (vol_mask !=
nullptr)
325 if (!
A3D_ELEM(*vol_mask, iz, iy, ix))
continue;
329 VECTOR_R3(gcurrent, static_cast<double>(intx),
330 static_cast<double>(inty), static_cast<double>(intz));
336 std::cout <<
"At (" << intx <<
"," 337 << inty <<
"," << intz <<
") value=" 344 A3D_ELEM(*vol_voxels, iz, iy, ix) +=
345 A3D_ELEM(vol_splines, k, i, j) * spline_value;
349 std::cout <<
" adding " <<
A3D_ELEM(vol_splines, k, i, j)
350 <<
" * " << value_spline <<
" = " 352 value_spline << std::endl;
362 XX(act_coord) =
XX(act_coord) + grid.relative_size * grid.basis(0, 0);
363 YY(act_coord) =
YY(act_coord) + grid.relative_size * grid.basis(1, 0);
364 ZZ(act_coord) =
ZZ(act_coord) + grid.relative_size * grid.basis(2, 0);
366 XX(beginY) =
XX(beginY) + grid.relative_size * grid.basis(0, 1);
367 YY(beginY) =
YY(beginY) + grid.relative_size * grid.basis(1, 1);
368 ZZ(beginY) =
ZZ(beginY) + grid.relative_size * grid.basis(2, 1);
370 XX(beginZ) =
XX(beginZ) + grid.relative_size * grid.basis(0, 2);
371 YY(beginZ) =
YY(beginZ) + grid.relative_size * grid.basis(1, 2);
372 ZZ(beginZ) =
ZZ(beginZ) + grid.relative_size * grid.basis(2, 2);
#define V3_PLUS_CT(a, b, c)
void grid2universe(const Matrix1D< double > &gv, Matrix1D< double > &uv) const
void sqrt(Image< double > &op)
#define V3_MINUS_V3(a, b, c)
double spatial_Bspline03(const Matrix1D< double > &r)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
#define A3D_ELEM(V, k, i, j)
#define VECTOR_R3(v, x, y, z)