Spaces:
Paused
Paused
import pyvista as pv | |
import sys | |
import numpy as np | |
import time | |
points = [] | |
types = [] | |
file = "pressure_buffer.txt" | |
file = "position_buffer.txt" | |
if len(sys.argv) == 2: | |
file = sys.argv[1] | |
colours = {1.1: "lightblue", 2.1: "green", 2.2: "turquoise", 3: "#eeeeee"} | |
colours = {1.1: "blue", 2.2: "turquoise"} | |
line_count = 0 | |
pcount = 0 | |
all_points = [] | |
all_point_types = [] | |
time_count = 0 | |
logStep = None | |
include_boundary = False | |
for l in open(file): | |
ws = l.split() | |
#print(ws) | |
if line_count == 6: | |
numOfElasticP = int(ws[0]) | |
if line_count == 7: | |
numOfLiquidP = int(ws[0]) | |
if line_count == 8: | |
numOfBoundaryP = int(ws[0]) | |
if line_count == 9: | |
timeStep = float(ws[0]) | |
if line_count == 10: | |
logStep = int(ws[0]) | |
if len(ws) == 4: | |
type = float(ws[3]) | |
if not (type == 3 and not include_boundary): | |
points.append([float(ws[0]), float(ws[1]), float(ws[2])]) | |
types.append(type) | |
if logStep is not None: | |
pcount+=1 | |
if pcount==numOfBoundaryP+numOfElasticP+numOfLiquidP: | |
print('End of one batch of %i added, %i total points at line %i, time: %i'%(len(points),pcount, line_count, time_count)) | |
all_points.append(points) | |
all_point_types.append(types) | |
points = [] | |
types=[] | |
pcount = 0 | |
numOfBoundaryP=0 | |
time_count+=1 | |
line_count += 1 | |
#all_points_np = np.array(all_points) | |
print(f"Loaded positions with %i elastic, %i liquid and %i boundary points (%i total), %i lines"%(numOfElasticP,numOfLiquidP, numOfBoundaryP,numOfElasticP+numOfLiquidP+numOfBoundaryP, line_count)) | |
print("Num of time points found: %i"%len(all_points)) | |
pl = pv.Plotter() | |
pl.set_background("lightgrey") | |
pl.camera.position = (300, 100, -100.0) | |
pl.camera.focal_point = (50,0,100) | |
pl.camera.up = (0.0, 1.0, 0.0) | |
#pl.add_axes_at_origin(labels_off=False) | |
#pl.add_mesh(pv.Cube(center=(50,0,50))) | |
last_mesh = None | |
def create_mesh(step): | |
step_count = step | |
value=step_count | |
global last_mesh | |
index = int(value) | |
print('Changing to time point: %s (%s) '%(index,value)) | |
curr_points = all_points[index] | |
curr_types = all_point_types[index] | |
if last_mesh is None: | |
last_mesh = pv.PolyData(curr_points) | |
last_mesh["types"] = curr_types | |
print(last_mesh) | |
last_actor = pl.add_mesh( | |
last_mesh, | |
render_points_as_spheres=True, | |
cmap=[c for c in colours.values()], | |
point_size=3, | |
) | |
else: | |
last_mesh.points = curr_points | |
pl.render() | |
time.sleep(0.01) | |
return | |
create_mesh(0) | |
max_time = len(all_points)-1 | |
pl.add_slider_widget(create_mesh, rng=[0,max_time], value=max_time, title='Time point') | |
pl.add_timer_event( max_steps=len(all_points), duration=200, callback=create_mesh) | |
pl.show() | |