【PyVista】网状结构,标和单元[mesh,point,cell]的介绍

[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/89777099icon-default.png?t=O83Ahttps://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()

 

 单元格不仅限于体素,它们可以是三个 点、两点之间的一条线,甚至单个点都可以是其 自己的单元格(但这是一个特殊情况)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值