Exemple #1
0
 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]));
                     
                 }
             }
     
 }