Spaces:
Paused
Paused
| import pyvista as pv | |
| import sys | |
| import numpy as np | |
| import time | |
| filename = "position_buffer.txt" | |
| all_worm_points = [] | |
| boundary_points = [] | |
| BOUNDARY_TYPE = 3 | |
| all_point_types = [] | |
| def load_points(filename): | |
| global all_worm_points | |
| global boundary_points | |
| global all_point_types | |
| worm_points = [] | |
| types = [] | |
| line_count = 0 | |
| pcount = 0 | |
| time_count = 0 | |
| logStep = None | |
| include_boundary = True | |
| for l in open(filename): | |
| 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 == BOUNDARY_TYPE: | |
| worm_points.append([float(ws[0]), float(ws[1]), float(ws[2])]) | |
| types.append(type) | |
| else: | |
| if include_boundary: | |
| boundary_points.append([float(ws[0]), float(ws[1]), float(ws[2])]) | |
| if logStep is not None: | |
| pcount += 1 | |
| if pcount == numOfBoundaryP + numOfElasticP + numOfLiquidP: | |
| print( | |
| "End of one batch: %i worm points added, %i boundary points, %i total points at line %i, time: %i" | |
| % ( | |
| len(worm_points), | |
| len(boundary_points), | |
| pcount, | |
| line_count, | |
| time_count, | |
| ) | |
| ) | |
| all_worm_points.append(worm_points) | |
| all_point_types.append(types) | |
| worm_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_worm_points)) | |
| return all_worm_points, all_point_types | |
| def toggle(flag): | |
| print("Setting to: %s" % flag) | |
| def create_plotter(): | |
| pl = pv.Plotter(window_size=[1200, 800]) | |
| pl.set_background("#bbbbbb") | |
| pl.camera.position = (500, 300, 150.0) | |
| pl.camera.focal_point = (50, 0, 150) | |
| pl.camera.up = (0.0, 1.0, 0.0) | |
| pl.add_axes_at_origin(labels_off=True) | |
| # pl.add_mesh(pv.Cube(center=(50,0,50))) | |
| # pl.add_checkbox_button_widget(toggle, value=True) | |
| return pl | |
| last_mesh = None | |
| def create_mesh(step, plotter_=None): | |
| colours = {1.1: "lightblue", 2.1: "green", 2.2: "turquoise", 3: "#eeeeee"} | |
| colours = {1.1: "blue", 2.2: "#008080"} | |
| step_count = step | |
| value = step_count | |
| global last_mesh | |
| global all_worm_points | |
| global boundary_points | |
| global all_point_types | |
| render_here = False | |
| if plotter_ == None: | |
| global plotter | |
| render_here = True | |
| else: | |
| plotter = plotter_ | |
| index = int(value) | |
| print("Changing to time point: %s (%s) " % (index, value)) | |
| curr_points = all_worm_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) | |
| print("Initial add of worm mesh") | |
| last_actor = plotter.add_mesh( | |
| last_mesh, | |
| render_points_as_spheres=False, | |
| cmap=[c for c in colours.values()], | |
| point_size=3, | |
| show_scalar_bar=False, | |
| ) | |
| if len(boundary_points) > 0: | |
| boundary_mesh = pv.PolyData(boundary_points) | |
| # boundary_mesh["types"] = curr_t[ypes | |
| print(boundary_mesh) | |
| print("Initial add of boundary mesh") | |
| boundary_actor = plotter.add_mesh( | |
| boundary_mesh, | |
| render_points_as_spheres=False, | |
| point_size=3, | |
| show_scalar_bar=False, | |
| ) | |
| else: | |
| print("Updating mesh...") | |
| last_mesh.points = curr_points | |
| plotter.render() | |
| time.sleep(0.1) | |
| return | |
| if __name__ == "__main__": | |
| if len(sys.argv) == 2: | |
| filename = sys.argv[1] | |
| load_points(filename) | |
| plotter = create_plotter() | |
| create_mesh(0) | |
| max_time = len(all_worm_points) - 1 | |
| plotter.add_slider_widget( | |
| create_mesh, rng=[0, max_time], value=max_time, title="Time point" | |
| ) | |
| plotter.add_timer_event( | |
| max_steps=len(all_worm_points), duration=200, callback=create_mesh | |
| ) | |
| plotter.show() | |