File size: 2,938 Bytes
2ab7cb8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1feac69
 
 
 
 
 
2ab7cb8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1feac69
2ab7cb8
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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()