如何挤出不规则多边形?
How to extrude an irregular polygon?
我在平面中有一组 2D 顶点坐标(假设为 xy 平面),我想在 z 方向上拉伸它以形成一个 PolyData
我可以转换和渲染的对象。
理想的函数需要一个 nx2 ndarray 的顶点和一个高度和 return 一个 PolyData
.
后备解决方案是在 VTK 中执行此操作并将结果包装为 PyVista 对象。
将 2d 顶点嵌入 3d 以创建实际的多边形并进行拉伸的直接解决方案:
import numpy as np
import pyvista as pv
rng = np.random.default_rng()
# create dummy data
N = 10
angles = np.linspace(0, 2*np.pi, N, endpoint=False)
radii = rng.uniform(0.5, 1.5, N)
coords = np.array([np.cos(angles), np.sin(angles)]) * radii
points_2d = coords.T # shape (N, 2)
# embed in 3d, create polygon
points_3d = np.pad(points_2d, [(0, 0), (0, 1)]) # shape (N, 3)
polygon = pv.lines_from_points(points_3d, close=True)
# extrude along z and plot
body = polygon.extrude((0, 0, 0.5))
body.plot(color='white', specular=1, screenshot='extruded.png')
如果你在挤压后需要一个封闭的表面,你必须从一个实心多边形开始(即一个面而不是一条线)并传递 capping=True
到 extrude()
(从 PyVista 版本 0.32 开始。 0):
# embed in 3d, create filled polygon
points_3d = np.pad(points_2d, [(0, 0), (0, 1)]) # shape (N, 3)
face = [N + 1] + list(range(N)) + [0] # cell connectivity for a single cell
polygon = pv.PolyData(points_3d, faces=face)
# extrude along z and plot
body = polygon.extrude((0, 0, 0.5), capping=True)
body.plot(color='white', specular=1, screenshot='extruded.png')
我在平面中有一组 2D 顶点坐标(假设为 xy 平面),我想在 z 方向上拉伸它以形成一个 PolyData
我可以转换和渲染的对象。
理想的函数需要一个 nx2 ndarray 的顶点和一个高度和 return 一个 PolyData
.
后备解决方案是在 VTK 中执行此操作并将结果包装为 PyVista 对象。
将 2d 顶点嵌入 3d 以创建实际的多边形并进行拉伸的直接解决方案:
import numpy as np
import pyvista as pv
rng = np.random.default_rng()
# create dummy data
N = 10
angles = np.linspace(0, 2*np.pi, N, endpoint=False)
radii = rng.uniform(0.5, 1.5, N)
coords = np.array([np.cos(angles), np.sin(angles)]) * radii
points_2d = coords.T # shape (N, 2)
# embed in 3d, create polygon
points_3d = np.pad(points_2d, [(0, 0), (0, 1)]) # shape (N, 3)
polygon = pv.lines_from_points(points_3d, close=True)
# extrude along z and plot
body = polygon.extrude((0, 0, 0.5))
body.plot(color='white', specular=1, screenshot='extruded.png')
如果你在挤压后需要一个封闭的表面,你必须从一个实心多边形开始(即一个面而不是一条线)并传递 capping=True
到 extrude()
(从 PyVista 版本 0.32 开始。 0):
# embed in 3d, create filled polygon
points_3d = np.pad(points_2d, [(0, 0), (0, 1)]) # shape (N, 3)
face = [N + 1] + list(range(N)) + [0] # cell connectivity for a single cell
polygon = pv.PolyData(points_3d, faces=face)
# extrude along z and plot
body = polygon.extrude((0, 0, 0.5), capping=True)
body.plot(color='white', specular=1, screenshot='extruded.png')