[PyVista] 介绍-CSDN博客中介绍给pyvista的介绍和简单的使用。接下来看看mesh的使用。
一,什么是网格?
在PyVista中,网格是任何空间引用信息,通常由三维空间中的表面或体积的几何表示组成。我们通常将任何空间引用的数据集称为网格,因此网格、网格和卷之间的区别通常会变得模糊,但这在PyVista中无关紧要。
如果你的数据集是二维几何图形的表面网格,如三角形,我们称之为网格,如果你的数据集是三维几何图形,如体素,四面体,六面体等,那么我们也称之为网格。为什么?因为那样很简单。
在所有的空间引用数据集中,都存在一个底层的网格结构,它是顶点之间的连通性来定义细胞。无论这些单元格是2D还是3D并不总是那么重要,我们已经努力使PyVista适用于两种或混合几何的数据集,以便您作为用户不必陷入细微差别的困境。
二,什么是点?
点是网格的顶点,也被称为底层结构的笛卡尔坐标。所有的PyVista数据集(网格)都有点,有时,你可以有一个只有点的网格,比如点云。
例如,您可以使用pyvista创建点云网格。PolyData类,它是为具有1D和2D细胞类型的网格构建的
让我们从点云开始;这是一个只有顶点的网格类型。你可以通过定义笛卡尔坐标的二维数组来创建一个,如下所示:
# 必须在这里设置,因为我们的全局后端可能不是静态的
import pyvista # 导入 PyVista 库,用于创建和可视化三维数据
pyvista.set_plot_theme('document') # 设置绘图主题为 'document',适合文档展示的配色和样式
pyvista.set_jupyter_backend('static') # 将 Jupyter 的后端设置为 'static',以便生成静态图像而不是动态交互式图像
# 配置全局主题设置
pyvista.global_theme.window_size = [600, 400] # 设置绘图窗口的大小为 600x400 像素
pyvista.global_theme.axes.show = False # 隐藏坐标轴,使绘图更简洁
pyvista.global_theme.anti_aliasing = 'fxaa' # 启用 FXAA(快速近似抗锯齿)来平滑图像边缘,提高可视化的质量
pyvista.global_theme.show_scalar_bar = False # 隐藏标量条,标量条通常用于显示颜色映射的信息
形成点的示例1:
import numpy as np # 导入 NumPy 库,用于处理数组和生成随机数
import pyvista as pv # 导入 PyVista 库,用于三维可视化
# 创建一个随机数生成器,使用固定的种子(seed=0)以便结果可重复
rng = np.random.default_rng(seed=0)
# 生成 100 个随机点,每个点有三个坐标(x, y, z)
points = rng.random((1000, 3))
# 将随机生成的点创建为 PyVista 的 PolyData 对象
mesh = pv.PolyData(points)
# 绘制点云,点的大小为 10,样式选择为 'points'
# 这里我们将点的颜色修改为红色
mesh.plot(point_size=5, style='points', color='red')
运行结果:
但重要的是要注意,大多数网格在点之间都有某种连接,比如这个网格:
示例代码如下:
import numpy as np # 导入 NumPy 库,用于处理数组和生成随机数
import pyvista as pv # 导入 PyVista 库,用于三维可视化
import pyvista
mesh = pyvista.read('hexbeam.stl')
#examples =pyvista.read('001.STL')
#mesh = examples.load_hexbeam()
cpos = [(6.20, 3.00, 7.50),
(0.16, 0.13, 2.65),
(-0.28, 0.94, -0.21)]
pl = pv.Plotter()
pl.add_mesh(mesh, show_edges=True, color='white')
pl.add_points(mesh.points, color='red',
point_size=10)
pl.camera_position = cpos
pl.show()
输入文档连接https://download.csdn.net/download/qq_45449625/89777099https://download.csdn.net/download/qq_45449625/89777099
运行结果:
这个网格形状也可以使用在不规则曲面上。例如
示例代码如下:
import numpy as np # 导入 NumPy 库,用于处理数组和生成随机数
import pyvista as pv # 导入 PyVista 库,用于三维可视化
# 读取 PLY 文件,创建网格对象
mesh = pyvista.read('FINAL_ASSY_RY_X10.PLY')
# 设置相机位置
cpos = [(6.20, 3.00, 7.50), # 相机位置坐标
(0.16, 0.13, 2.65), # 视点位置坐标
(-0.28, 0.94, -0.21)] # 上方向向量
# 创建一个 PyVista 绘图器对象
pl = pv.Plotter()
# 添加网格到绘图器,显示边缘,颜色为白色
pl.add_mesh(mesh, show_edges=True, color='white')
# 在网格上添加点,颜色为红色,点的大小设为 1
pl.add_points(mesh.points, color='red', point_size=1)
# 设置相机位置
pl.camera_position = cpos
# 显示绘制的场景
pl.show()
三,什么是单元?
单元是点之间的几何形状,它定义了网格的连通性或拓扑结构。在上面的示例中,单元格由连接点(红色)的线(黑色的边缘)定义。例如,在光束示例中,单元格是由网格中8个点之间的区域定义的体素:
import pyvista as pv # 导入 PyVista 库,用于三维可视化
# 读取 hexbeam.stl 文件,创建网格对象
mesh = pyvista.read('hexbeam.stl')
# 创建一个 PyVista 绘图器对象
pl = pv.Plotter()
# 添加网格到绘图器,显示边缘,颜色设为白色
pl.add_mesh(mesh, show_edges=True, color='white')
# 在网格上添加点,颜色设为红色,点的大小设为 20
pl.add_points(mesh.points, color='red', point_size=20)
# 提取最后一个单元并将其存储在 single_cell 变量中
single_cell = mesh.extract_cells(mesh.n_cells - 1)
# 将提取的单元添加到绘图器,颜色为粉色,边缘颜色为蓝色,线宽为 5,显示边缘
pl.add_mesh(single_cell, color='pink', edge_color='blue',
line_width=5, show_edges=True)
# 提取倒数第二个单元并将其存储在 single_cell 变量中
single_cell = mesh.extract_cells(mesh.n_cells - 2)
# 将提取的单元添加到绘图器,颜色为粉色,边缘颜色为黄色,线宽为 5,显示边缘
pl.add_mesh(single_cell, color='pink', edge_color='yellow',
line_width=5, show_edges=True)
# 设置相机位置
pl.camera_position = [(6.20, 3.00, 7.50), # 相机位置坐标
(0.16, 0.13, 2.65), # 视点位置坐标
(-0.28, 0.94, -0.21)] # 上方向向量
# 显示绘制的场景
pl.show()
单元格不仅限于体素,它们可以是三个 点、两点之间的一条线,甚至单个点都可以是其 自己的单元格(但这是一个特殊情况)。