Код: Выделить всё
import pyvista as pv
import numpy as np
PATH = r"Foam.stl"
mesh = pv.read(PATH)
# Change axis convention
mesh.rotate_x(90, inplace=True)
# Plot mesh
mesh.plot()
# Create a slice of XZ plane at Y=0
slice = mesh.slice(normal=[0,1,0], origin=[0,0,0])
# Plot slice and mesh
pl = pv.Plotter()
pl.add_mesh(slice, color='red', show_edges=True)
pl.add_mesh(mesh, color='lightblue', opacity=0.5)
pl.show()
# Acquire points of slice
pts = slice.points
x = pts[:,0]
z = pts[:,2]
# Plot points
import matplotlib.pyplot as plt
plt.scatter(x, z)
plt.xlabel('X')
plt.ylabel('Z')
plt.title('Slice Points')
plt.show()

Рассматриваемый объект. Когда я нарезаю его, появляется следующее:

Когда я затем пытаюсь извлечь верхнюю строку, взяв только максимум, появляется следующее:
Код: Выделить всё
dx_model = 0.015 # mm
xbins = np.arange(x.min(), x.max(), dx_model)
h_true = np.full(xbins.shape, np.nan)
for i in range(len(xbins) - 1):
mask = (x >= xbins[i]) & (x < xbins[i + 1])
if np.any(mask):
h_true[i] = z[mask].max()
# Plot h_true vs xbins
plt.plot(xbins[:-1], h_true[:-1], marker='o')

Теперь это пошло не так, поскольку нижняя точка была отмечена как точка. Кто-нибудь знает, как это исправить, или знает, как я могу сделать это совершенно другим способом.
Подробнее здесь: https://stackoverflow.com/questions/798 ... in-pyvista
Мобильная версия