import numpy as np import vtk # data = np.loadtxt("./scalar_field.txt") # points = vtk.vtkPoints() scalars = vtk.vtkFloatArray() for row in data: x, y, z, value = row points.InsertNextPoint(x, y, z) scalars.InsertNextValue(value) # # Create a polydata object polydata = vtk.vtkPolyData() polydata.SetPoints(points) polydata.GetPointData().SetScalars(scalars) # # Use a vtkGlyph3D to create scalable glyphs sphere_source = vtk.vtkSphereSource() sphere_source.SetRadius(0.01) # Base radius of the glyph (adjust as needed) # glyph3d = vtk.vtkGlyph3D() glyph3d.SetSourceConnection(sphere_source.GetOutputPort()) glyph3d.SetInputData(polydata) glyph3d.ScalingOff() # Disable scaling so all glyphs are the same size glyph3d.Update() # # Create a mapper and actor mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(glyph3d.GetOutputPort()) mapper.SetScalarRange(scalars.GetRange()) # actor = vtk.vtkActor() actor.SetMapper(mapper) # # Add a scalar bar scalar_bar = vtk.vtkScalarBarActor() scalar_bar.SetLookupTable(mapper.GetLookupTable()) scalar_bar.SetTitle("Scalar Value") scalar_bar.SetNumberOfLabels(5) # # Create a renderer, render window, and interactor renderer = vtk.vtkRenderer() render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) # render_window_interactor = vtk.vtkRenderWindowInteractor() render_window_interactor.SetRenderWindow(render_window) # # Add the actor and scalar bar to the renderer renderer.AddActor(actor) renderer.AddActor2D(scalar_bar) # renderer.SetBackground(0.1, 0.2, 0.4) # # Start the rendering loop render_window.Render() render_window_interactor.Start()