|
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,29 +42,31 @@ 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 |
|
59 |
| - converter = vtkPolyDataToImageStencil() |
60 |
| - converter.SetInputConnection(transformer.GetOutputPort()) |
61 |
| - converter.SetOutputOrigin(grid.origin().tolist()) |
62 |
| - converter.SetOutputSpacing(grid.spacing().tolist()) |
63 |
| - converter.SetOutputWholeExtent([0, max_index[0], 0, max_index[1], 0, max_index[2]]) |
64 |
| - converter.Update() |
65 |
| - |
| 57 | + # Convert the transformed polydata to an image stencil |
| 58 | + stencil_grid = Grid(size=grid.size(), spacing=grid.spacing(), center=grid.center()) |
| 59 | + stencil_extent = [0, grid.size(0) - 1, 0, grid.size(1) - 1, 0, grid.size(2) - 1] |
| 60 | + polydata_to_stencil = vtkPolyDataToImageStencil() |
| 61 | + polydata_to_stencil.SetInputConnection(transformer.GetOutputPort()) |
| 62 | + polydata_to_stencil.SetOutputOrigin(stencil_grid.origin().tolist()) |
| 63 | + polydata_to_stencil.SetOutputSpacing(stencil_grid.spacing().tolist()) |
| 64 | + polydata_to_stencil.SetOutputWholeExtent(stencil_extent) |
| 65 | + polydata_to_stencil.Update() |
| 66 | + |
| 67 | + # Get the output stencil |
66 | 68 | stencil = vtkImageStencilData()
|
67 |
| - stencil.DeepCopy(converter.GetOutput()) |
| 69 | + stencil.DeepCopy(polydata_to_stencil.GetOutput()) |
68 | 70 | return stencil
|
69 | 71 |
|
70 | 72 |
|
|
0 commit comments