File size: 3,292 Bytes
3b38b6e
920471a
fb2ef52
 
920471a
fb2ef52
 
1feac69
920471a
 
2ab7cb8
920471a
2ab7cb8
d1aa2ae
2ab7cb8
 
d1aa2ae
2ab7cb8
d1aa2ae
2ab7cb8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1feac69
c0520a6
2ab7cb8
1feac69
 
 
 
 
 
2ab7cb8
 
 
c0520a6
2ab7cb8
 
 
 
 
 
 
 
 
 
1feac69
2ab7cb8
 
 
1feac69
 
2ab7cb8
 
 
 
 
 
 
 
1feac69
 
2ab7cb8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
970d427
920471a
d1aa2ae
1feac69
3b38b6e
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
129
130
131
132
133
134
135
136
137
import streamlit as st
import stpyvista.utils

if "IS_XVFB_RUNNING" not in st.session_state:
  stpyvista.utils.start_xvfb()
  st.session_state.IS_XVFB_RUNNING = True 

st.title("Sibernetic simple example")

import pyvista as pv
import numpy as np

import time

points = []
types = []

file = "position_buffer.txt"

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(window_size=[800,600])
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:

        print('Adding mesh...')
        last_mesh = pv.PolyData(curr_points)
        last_mesh["types"] = curr_types
        print(last_mesh)
        mesh2 = pv.Cube(center=(0,0,0))
        pl.add_mesh(mesh2)

        last_actor = pl.add_mesh(
            last_mesh,
            render_points_as_spheres=True,
            cmap=[c for c in colours.values()],
            point_size=3,
        )
    else:

        print('Updating mesh...')
        last_mesh.points = curr_points

    #pl.render()

    time.sleep(0.1)
    
    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)

print('Ready...')

from stpyvista import stpyvista as spv
## Send to streamlit
spv(pl, key="pv_cube2")