コード例 #1
0
ファイル: test_lights.py プロジェクト: wsym812131/pyvista
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'
コード例 #2
0
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)
コード例 #3
0
    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
コード例 #4
0
ファイル: test_lights.py プロジェクト: wsym812131/pyvista
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')