summaryrefslogtreecommitdiff
path: root/vtk_to_png.py
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2026-01-23 12:43:57 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2026-01-23 12:43:57 +0100
commitda656e3333ca98be9e80dbc63640598a392186f9 (patch)
treec390aee318b00bc8ed47111cf44d497a38319ad2 /vtk_to_png.py
parent0a8dd2541e20f59812db21e8bad069b50cf8ebaf (diff)
downloadlibs-lbm-da656e3333ca98be9e80dbc63640598a392186f9.tar.gz
Dangling changes and address boundary errors
Diffstat (limited to 'vtk_to_png.py')
-rw-r--r--vtk_to_png.py75
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})")
+