def test_transforms(): position = (1, 2, 3) focal_point = (4, 5, 6) light = pyvista.Light(position=position) light.focal_point = focal_point trans_array = np.arange(4 * 4).reshape(4, 4) trans_matrix = pyvista.vtkmatrix_from_array(trans_array) assert light.transform_matrix is None light.transform_matrix = trans_array assert isinstance(light.transform_matrix, vtk.vtkMatrix4x4) array = pyvista.array_from_vtkmatrix(light.transform_matrix) assert np.array_equal(array, trans_array) light.transform_matrix = trans_matrix matrix = light.transform_matrix assert all( matrix.GetElement(i, j) == trans_matrix.GetElement(i, j) for i in range(4) for j in range(4)) linear_trans = trans_array[:-1, :-1] shift = trans_array[:-1, -1] assert light.position == position assert np.allclose(light.world_position, linear_trans @ position + shift) assert light.focal_point == focal_point assert np.allclose(light.world_focal_point, linear_trans @ focal_point + shift) with pytest.raises(ValueError): light.transform_matrix = 'invalid'
def test_vtkmatrix_to_from_array(): rng = np.random.default_rng() array3x3 = rng.integers(0, 10, size=(3, 3)) matrix = pyvista.vtkmatrix_from_array(array3x3) assert isinstance(matrix, vtk.vtkMatrix3x3) for i in range(3): for j in range(3): assert matrix.GetElement(i, j) == array3x3[i, j] array = pyvista.array_from_vtkmatrix(matrix) assert isinstance(array, np.ndarray) assert array.shape == (3, 3) for i in range(3): for j in range(3): assert array[i, j] == matrix.GetElement(i, j) array4x4 = rng.integers(0, 10, size=(4, 4)) matrix = pyvista.vtkmatrix_from_array(array4x4) assert isinstance(matrix, vtk.vtkMatrix4x4) for i in range(4): for j in range(4): assert matrix.GetElement(i, j) == array4x4[i, j] array = pyvista.array_from_vtkmatrix(matrix) assert isinstance(array, np.ndarray) assert array.shape == (4, 4) for i in range(4): for j in range(4): assert array[i, j] == matrix.GetElement(i, j) # invalid cases with pytest.raises(ValueError): matrix = pyvista.vtkmatrix_from_array(np.arange(3 * 4).reshape(3, 4)) with pytest.raises(TypeError): invalid = vtk.vtkTransform() array = pyvista.array_from_vtkmatrix(invalid)
def get_rendered_img(self, p, T=None): if T is not None: p.camera.SetFocalPoint(0, 0, 1) p.camera.SetPosition(0, 0, 0) p.camera.SetViewUp(0, -1, 0) p.camera_set = True mat_y_rot = np.eye(4) # R_y_rot = t3d.axangles.axangle2mat([1,0,0],np.pi/2) R_y_rot = t3d.axangles.axangle2mat([1, 0, 0], 0 * np.pi / 2) mat_y_rot[0:3, 0:3] = R_y_rot p.camera.SetModelTransformMatrix( pv.vtkmatrix_from_array(T @ mat_y_rot)) tic = time.time() _, img = p.show(auto_close=False, screenshot=True, window_size=self.window_size) toc = time.time() print('render time : {}\n'.format(toc - tic)) background_255 = p.background_color[0] * 255 background_bool = np.isclose(img[:, :, 0], background_255, atol=1.0, rtol=0.0) foreground_bool = 1 - background_bool foreground_mask = foreground_bool.astype(np.uint8) foreground_mask_col = np.dstack( (foreground_mask, foreground_mask, foreground_mask)) if self.debug: cv2.namedWindow("rendered_image", cv2.WINDOW_NORMAL) cv2.imshow("rendered_image", img) cv2.namedWindow("foreground_mask_col", cv2.WINDOW_NORMAL) cv2.imshow("foreground_mask_col", foreground_mask_col * 255) cv2.waitKey(0) return img, foreground_mask_col
def test_from_vtk(): vtk_light = vtk.vtkLight() # set the vtk light for _, value, vtkname in configuration: vtk_setter = getattr(vtk_light, vtkname) if isinstance(value, np.ndarray): # we can't pass the array to vtkLight directly value = pyvista.vtkmatrix_from_array(value) vtk_setter(value) light = pyvista.Light.from_vtk(vtk_light) for pvname, value, _ in configuration: if isinstance(value, np.ndarray): trans_arr = pyvista.array_from_vtkmatrix(getattr(light, pvname)) assert np.array_equal(trans_arr, value) else: assert getattr(light, pvname) == value # invalid case with pytest.raises(TypeError): pyvista.Light.from_vtk('invalid') with pytest.raises(TypeError): pyvista.Light('invalid')