Получение только верхней строки объекта в pyvistaPython

Программы на Python
Anonymous
Получение только верхней строки объекта в pyvista

Сообщение Anonymous »

Мне нужно получить точную верхнюю линию объекта, чтобы позже сравнить данные датчика кодера, который будет перемещаться по этому объекту.

Код: Выделить всё

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

Вернуться в «Python»