| 226 | return sdf_grid, min_bound, voxel_size |
| 227 | |
| 228 | def extract_mesh_dense(sdf_grid, min_bound, voxel_size, output_file): |
| 229 | print("Running Marching Cubes on dense grid...") |
| 230 | try: |
| 231 | verts, faces, normals, values = marching_cubes(sdf_grid, level=0.0, spacing=(voxel_size, voxel_size, voxel_size)) |
| 232 | |
| 233 | # Transform vertices back to world space |
| 234 | verts += min_bound |
| 235 | |
| 236 | print(f"Saving mesh to {output_file}...") |
| 237 | save_ply(output_file, verts, faces, normals) |
| 238 | |
| 239 | except ValueError as e: |
| 240 | print(f"Marching Cubes failed: {e}") |
| 241 | except RuntimeError as e: |
| 242 | print(f"Marching Cubes failed: {e}") |
| 243 | |
| 244 | def extract_mesh(tsdf_vol, min_bound, voxel_size, output_file): |
| 245 | if not tsdf_vol: |