Получение только верхней строки объекта в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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