往期回顾
Python实现管线建模 || 1.圆直管、方管https://blog.csdn.net/Xxy9426/article/details/138836778?spm=1001.2014.3001.5501
对依赖库的补充
随着后续内容的深入,我发现单纯靠trimesh库已经无法完成后续的建模(涉及到多个几何体拼接或者是创建较复杂的几何体的情况单单用trimesh铁定是搞不定的),所以需要使用 cmd
pip install trimesh[all]
来安装 trimesh 及其所有必要依赖库 。 主要包括:
numpy:用于数值计算的基础库。
scipy:提供了额外的科学计算功能。
networkx:用于图和网络分析。
pyglet:用于 OpenGL 的图形库。
shapely:用于几何对象的创建和操作。
rtree:用于空间索引和查询。
Pillow:Python Imaging Library,处理图像文件。
lxml:用于解析和处理 XML 和 HTML。
assimp:Open Asset Import Library,用于读取多种 3D 文件格式。
pyrender:用于渲染三维场景。
变径管件指的是用于连接不同直径管道的管件,主要用于管道系统中从较大管径的管道过渡到较小管径的管道(或相反)。变径管线在城市管网中有着广泛应用,一般来说是特征点当中的一类。通常出现在流量变化、压力调整或设备连接的场景中。
根据管件形态的不同,可以将其分为两种类型:
1.同心变径管:这种变径管的中心轴线是相同的,通常用于垂直或水平管道。
2.偏心变径管:这种变径管的其中一侧是平的,通常用于水平管道,以避免积水。
咱们把变径管的内容拆分成两篇文章,今天我们先来进行同心变径管的建模(偏心的我还没搞明白)。同心变径管本质上是一边粗一边细的圆台,形状比较规矩,所以建模流程上比较简单。
上代码~
import trimesh
import numpy as np
def create_tapered_cylinder(radius_base=0.5, radius_top=1.5, height=3.0, segments=32):
"""
创建一个圆台形状的三维模型。
参数:
radius_base: 圆台底部半径,默认为0.5。
radius_top: 圆台顶部半径,默认为1.5。
height: 圆台的高度,默认为3.0。
segments: 圆台侧面的分段数,默认为32。
返回:
cylinder_mesh: 圆台的三维网格模型。
"""
# 创建圆台的底部和顶部圆
theta = np.linspace(0, 2 * np.pi, segments) # 生成从0到2π的等差数列,用于计算圆的点
base_circle = np.column_stack((np.cos(theta) * radius_base, np.sin(theta) * radius_base, np.zeros_like(theta))) # 底部圆的坐标
top_circle = np.column_stack((np.cos(theta) * radius_top, np.sin(theta) * radius_top, np.full_like(theta, height))) # 顶部圆的坐标
# 将底部和顶部圆的坐标合并,形成圆台的顶点
vertices = np.vstack([base_circle, top_circle])
# 定义圆台的面
faces = []
for i in range(segments - 1): # 循环创建侧面的面
faces.append([i, i + 1, i + segments]) # 定义侧面的三角形面
faces.append([i + 1, i + 1 + segments, i + segments])
# 闭合圆台的底部和顶部,形成完整的圆台形状
faces.append([segments - 1, 0, 2 * segments - 1])
faces.append([0, segments, 2 * segments - 1])
# 使用trimesh库创建三维网格模型
cylinder_mesh = trimesh.Trimesh(vertices=vertices, faces=faces)
return cylinder_mesh
# 创建圆台模型
tapered_cylinder = create_tapered_cylinder()
# 导出圆台模型到OBJ文件
tapered_cylinder.export('output/tapered_cylinder.obj')
之后本系列文章会继续更新偏心变径管(等我学会、三通、四通、法兰结构等等管线的建模。需要的朋友可以点点关注不迷路~