void polygonize(const XForm& xform, const RGrid<float>& grid, std::vector<CGLA::Vec3d>& quad_vertices, float tau) { quad_vertices.clear(); for(int i=0;i<xform.get_dims()[0];++i) for(int j=0;j<xform.get_dims()[1];++j) for(int k=0;k<xform.get_dims()[2];++k) { Vec3i vox(i,j,k); if(grid[vox] <= tau) { if(grid.in_domain(Vec3i(i+1,j,k)) && grid[Vec3i(i+1,j,k)] > tau) for(int n=0;n<4;++n) quad_vertices.push_back(xform.inverse(Vec3d(i+0.5, j,k) + xpf[n])); if(grid.in_domain(Vec3i(i-1,j,k)) && grid[Vec3i(i-1,j,k)] > tau) for(int n=0;n<4;++n) quad_vertices.push_back(xform.inverse(Vec3d(i-0.5, j,k) + xmf[n])); if(grid.in_domain(Vec3i(i,j+1,k)) && grid[Vec3i(i,j+1,k)] > tau) for(int n=0;n<4;++n) quad_vertices.push_back(xform.inverse(Vec3d(i, j+0.5,k) + ypf[n])); if(grid.in_domain(Vec3i(i,j-1,k)) && grid[Vec3i(i,j-1,k)] > tau) for(int n=0;n<4;++n) quad_vertices.push_back(xform.inverse(Vec3d(i, j-0.5,k) + ymf[n])); if(grid.in_domain(Vec3i(i,j,k+1)) && grid[Vec3i(i,j,k+1)] > tau) for(int n=0;n<4;++n) quad_vertices.push_back(xform.inverse(Vec3d(i, j,k+0.5) + zpf[n])); if(grid.in_domain(Vec3i(i,j,k-1)) && grid[Vec3i(i,j,k-1)] > tau) for(int n=0;n<4;++n) quad_vertices.push_back(xform.inverse(Vec3d(i, j,k-0.5) + zmf[n])); } } }