Files
wg_cpso/CPSO/bin/x64/Debug/Scripts/YourScript2.py

87 lines
2.4 KiB
Python
Raw Permalink Normal View History

2026-03-25 18:20:24 +08:00
import pyarrow as pa
import numpy as np
from scipy.interpolate import RBFInterpolator
import os
def main():
# Accessing an environment variable
global my_variable
try:
my_variable = os.environ['WG_WorkingDirectory']
print(f"The value of MY_VARIABLE_NAME is: {my_variable}")
except KeyError:
print("MY_VARIABLE_NAME is not set.")
# 读入固定曲面
fixe_surface = os.path.join(my_variable, 'fixed_surface.arrow')
df1 = None
with pa.memory_map(fixe_surface, 'r') as source:
data = pa.ipc.open_file(source).read_all()
df1 = data.to_pandas()
# 读入控制顶点
control_points = os.path.join(my_variable, 'control_points.arrow')
df2 = None
with pa.memory_map(control_points, 'r') as source:
data = pa.ipc.open_file(source).read_all()
df2 = data.to_pandas()
n1 = df1.shape[0]
n2 = df2.shape[0]
n = n1 + n2
xyz = np.zeros((n, 3))
uvw = np.zeros((n, 3))
for i in range(n1):
xyz[i, :] = df1.iloc[i][1:]
for i in range(n2):
v = np.array(df2.iloc[i][1:4])
x = v[0]
y = v[1]
dx = -0.2 * x
dy = -0.2 * y
xyz[n1 + i, :] = v
uvw[n1 + i, :] = [dx, dy, 0]
deformed_domain = os.path.join(my_variable, 'deformed_domain.arrow')
df3 = None
with pa.memory_map(deformed_domain, 'r') as source:
data = pa.ipc.open_file(source).read_all()
df3 = data.to_pandas()
nn = df3.shape[0]
ids = np.zeros((nn,), dtype=np.int32)
vert = np.zeros((nn, 3), dtype=np.float64)
for i in range(nn):
ids[i] = df3.iloc[i]['id']
vert[i, :] = df3.iloc[i][1:]
rbf = RBFInterpolator(xyz, uvw)
off = rbf(vert)
Id = pa.array(ids)
dx = pa.array(off[:, 0])
dy = pa.array(off[:, 1])
dz = pa.array(off[:, 2])
schema = pa.schema([
pa.field('id', pa.int32(), nullable=False),
pa.field('dx', pa.float64(), nullable=False),
pa.field('dy', pa.float64(), nullable=False),
pa.field('dz', pa.float64(), nullable=False),
])
deformed_mesh = os.path.join(my_variable, 'deformed_mesh.arrow')
with pa.OSFile(deformed_mesh, 'wb') as sink:
with pa.ipc.new_file(sink, schema=schema) as writer:
batch = pa.record_batch([Id, dx, dy, dz], schema=schema)
writer.write(batch)
if __name__ == '__main__':
main()