|
8 | 8 | vtkImageData, |
9 | 9 | vtkImageStencilData, |
10 | 10 | vtkImageStencilToImage, |
11 | | - vtkMatrixToLinearTransform, |
12 | 11 | vtkPolyData, |
13 | 12 | vtkPolyDataToImageStencil, |
| 13 | + vtkTransform, |
14 | 14 | vtkTransformPolyDataFilter, |
15 | 15 | ) |
16 | 16 |
|
@@ -42,27 +42,29 @@ def surface_mesh_grid(*mesh: vtkPolyData, resolution: Optional[float] = None) -> |
42 | 42 |
|
43 | 43 |
|
44 | 44 | def surface_image_stencil(mesh: vtkPolyData, grid: Grid) -> vtkImageStencilData: |
45 | | - r"""Convert vtkPolyData surface mesh to image stencil.""" |
46 | | - max_index = [n - 1 for n in grid.size().tolist()] |
47 | | - |
48 | | - rot = np.eye(4, dtype=np.float) |
49 | | - rot[:3, :3] = np.array(grid.direction).reshape(3, 3) |
50 | | - rot = numpy_to_vtk_matrix4x4(rot) |
51 | | - |
52 | | - transform = vtkMatrixToLinearTransform() |
53 | | - transform.SetInput(rot) |
54 | | - |
| 45 | + r"""Convert vtkPolyData surface mesh to image stencil.""" |
| 46 | + # Create the transform |
| 47 | + transform = vtkTransform() |
| 48 | + transform.Translate(grid.center().tolist()) |
| 49 | + transform.Concatenate(numpy_to_vtk_matrix4x4(grid.direction().numpy().T)) # type: ignore |
| 50 | + transform.Translate(grid.center().neg().tolist()) |
| 51 | + |
| 52 | + # Apply the transform to the polydata |
55 | 53 | transformer = vtkTransformPolyDataFilter() |
56 | 54 | transformer.SetInputData(mesh) |
57 | 55 | transformer.SetTransform(transform) |
58 | 56 |
|
| 57 | + # Convert the transformed polydata to an image stencil |
| 58 | + grid = Grid(size=grid.size(), spacing=grid.spacing(), center=grid.center()) |
| 59 | + max_index = [n - 1 for n in grid.size()] |
59 | 60 | converter = vtkPolyDataToImageStencil() |
60 | 61 | converter.SetInputConnection(transformer.GetOutputPort()) |
61 | 62 | converter.SetOutputOrigin(grid.origin().tolist()) |
62 | 63 | converter.SetOutputSpacing(grid.spacing().tolist()) |
63 | 64 | converter.SetOutputWholeExtent([0, max_index[0], 0, max_index[1], 0, max_index[2]]) |
64 | 65 | converter.Update() |
65 | 66 |
|
| 67 | + # Get the output stencil |
66 | 68 | stencil = vtkImageStencilData() |
67 | 69 | stencil.DeepCopy(converter.GetOutput()) |
68 | 70 | return stencil |
|
0 commit comments