diff options
| author | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-01-23 12:43:57 +0100 |
|---|---|---|
| committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2026-01-23 12:43:57 +0100 |
| commit | da656e3333ca98be9e80dbc63640598a392186f9 (patch) | |
| tree | c390aee318b00bc8ed47111cf44d497a38319ad2 /vtk_to_png.py | |
| parent | 0a8dd2541e20f59812db21e8bad069b50cf8ebaf (diff) | |
| download | libs-lbm-da656e3333ca98be9e80dbc63640598a392186f9.tar.gz | |
Dangling changes and address boundary errors
Diffstat (limited to 'vtk_to_png.py')
| -rw-r--r-- | vtk_to_png.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/vtk_to_png.py b/vtk_to_png.py new file mode 100644 index 0000000..9c3f4f3 --- /dev/null +++ b/vtk_to_png.py @@ -0,0 +1,75 @@ +import vtk +import glob +import os + +vtk_files = sorted(glob.glob("*.vtk")) +output_dir = "frames" +os.makedirs(output_dir, exist_ok=True) + +renderer = vtk.vtkRenderer() +render_window = vtk.vtkRenderWindow() +render_window.SetOffScreenRendering(1) +render_window.SetSize(1024, 512) +render_window.AddRenderer(renderer) + +renderer.SetBackground(1, 1, 1) + +camera_initialized = False + +for i, vtk_file in enumerate(vtk_files): + reader = vtk.vtkStructuredPointsReader() + reader.SetFileName(vtk_file) + reader.Update() + + image = reader.GetOutput() + + mag = vtk.vtkImageMagnitude(); + mag.SetInputData(image); + mag.Update(); + image = mag.GetOutput(); + scalar_name = "Velocity magnitude"; + + scalars = image.GetPointData().GetScalars() + if scalars is None: + raise RuntimeError("No scalar data found") + + vmin, vmax = scalars.GetRange() + + # Image slice mapper (2D!) + slice_mapper = vtk.vtkImageSliceMapper() + slice_mapper.SetInputData(image) + + # Pick the only slice (or middle if dimension >1) + extent = image.GetExtent() + slice_mapper.SetSliceNumber(extent[4]) # Z slice + + slice_actor = vtk.vtkImageSlice() + slice_actor.SetMapper(slice_mapper) + + # Grayscale mapping + prop = slice_actor.GetProperty() + prop.SetColorWindow(vmax - vmin) + prop.SetColorLevel(0.5 * (vmax + vmin)) + + renderer.RemoveAllViewProps() + renderer.AddViewProp(slice_actor) + + if not camera_initialized: + renderer.ResetCamera() + camera_initialized = True + + render_window.Render() + + # Capture to PNG + w2i = vtk.vtkWindowToImageFilter() + w2i.SetInput(render_window) + w2i.ReadFrontBufferOff() + w2i.Update() + + writer = vtk.vtkPNGWriter() + writer.SetFileName(f"{output_dir}/frame_{i:04d}.png") + writer.SetInputConnection(w2i.GetOutputPort()) + writer.Write() + + print(f"Saved frame {i} range=({vmin},{vmax})") + |
