def test_pyvista_conversion(data_path): print(data_path) print(data_path.joinpath("diamond.ply")) cloud = PyntCloud.from_file(str(data_path.joinpath("diamond.ply"))) poly = cloud.to_instance("pyvista", mesh=True) pc = PyntCloud.from_instance("pyvista", poly) assert np.allclose(cloud.points[['x', 'y', 'z']].values, poly.points) assert np.allclose(cloud.mesh.values, pc.mesh.values) poly = pv.read(str(data_path.joinpath("diamond.ply"))) pc = PyntCloud.from_instance("pyvista", poly) assert np.allclose(pc.points[['x', 'y', 'z']].values, poly.points)
def test_pyvista_rgb_is_handled(): """ Serves as regression test for old `in` behaviour that could cause a subtle bug if poin_arrays contain a field with `name in "RGB"` """ poly = pv.Sphere() poly.point_data["RG"] = np.zeros_like(poly.points)[:, :2] pc = PyntCloud.from_instance("pyvista", poly) assert all(x in pc.points.columns for x in ["RG_0", "RG_1"])
def test_pyvista_conversion(data_path): original_point_cloud = pv.read(str(data_path / "diamond.ply")) cloud = PyntCloud.from_instance("pyvista", original_point_cloud) assert np.allclose(cloud.xyz, original_point_cloud.points) assert {'red', 'green', 'blue'}.issubset(cloud.points.columns) assert np.allclose(cloud.points[['red', 'green', 'blue']].values, original_point_cloud.point_arrays["RGB"]) assert {'nx', 'ny', 'nz'}.issubset(cloud.points.columns) assert np.allclose(cloud.points[['nx', 'ny', 'nz']].values, original_point_cloud.point_arrays["Normals"])
def test_open3d_point_cloud(data_path): point_cloud = o3d.io.read_point_cloud( str(data_path.joinpath("diamond.ply"))) cloud = PyntCloud.from_instance("open3d", point_cloud) assert np.allclose(cloud.xyz, np.asarray(point_cloud.points)) assert {'red', 'green', 'blue'}.issubset(cloud.points.columns) assert np.allclose(cloud.points[['red', 'green', 'blue']].values / 255., np.asarray(point_cloud.colors)) assert {'nx', 'ny', 'nz'}.issubset(cloud.points.columns) assert np.allclose(cloud.points[['nx', 'ny', 'nz']].values, np.asarray(point_cloud.normals))
def test_open3d_triangle_mesh(data_path): triangle_mesh = o3d.io.read_triangle_mesh( str(data_path.joinpath("diamond.ply"))) cloud = PyntCloud.from_instance("open3d", triangle_mesh) assert cloud.mesh is not None assert np.allclose(cloud.mesh.values, triangle_mesh.triangles) assert np.allclose(cloud.xyz, triangle_mesh.vertices) assert {'red', 'green', 'blue'}.issubset(cloud.points.columns) assert np.allclose(cloud.points[['red', 'green', 'blue']].values / 255., triangle_mesh.vertex_colors) assert {'nx', 'ny', 'nz'}.issubset(cloud.points.columns) assert np.allclose(cloud.points[['nx', 'ny', 'nz']].values, triangle_mesh.vertex_normals)
def voxelize(pcd, x, y, z): # cloud = PyntCloud.from_file(path) cloud = PyntCloud.from_instance("open3d", pcd) voxelgrid_id = cloud.add_structure("voxelgrid", n_x=x, n_y=y, n_z=z) voxelgrid = cloud.structures[voxelgrid_id] x_cords = voxelgrid.voxel_x y_cords = voxelgrid.voxel_y z_cords = voxelgrid.voxel_z voxel = np.zeros((x, y, z)).astype(np.bool) for x, y, z in zip(x_cords, y_cords, z_cords): voxel[x][y][z] = True # with open("binvox/00000.binvox", 'wb') as f: # v = binvox_rw.Voxels(voxel, (x, y, z), (0, 0, 0), 1, 'xyz') # v.write(f) return voxel, voxelgrid
def test_pyvista_multicomponent_scalars_are_splitted(): poly = pv.Sphere() poly.point_data["foo"] = np.zeros_like(poly.points) pc = PyntCloud.from_instance("pyvista", poly) assert all(x in pc.points.columns for x in ["foo_0", "foo_1", "foo_2"])
def test_pyvista_normals_are_handled(): poly = pv.Sphere() pc = PyntCloud.from_instance("pyvista", poly) assert all(x in pc.points.columns for x in ["nx", "ny", "nz"])