13、在没有底层CAD模型的情况下重新擦除STL文件
import gmsh # 导入Gmsh库,用于几何建模和网格划分
import math # 导入数学库,用于计算
import os # 导入操作系统库,用于处理文件路径
import sys # 导入系统库,用于处理命令行参数
gmsh.initialize() # 初始化Gmsh环境
def createGeometryAndMesh():
# 清除之前的模型和数据
gmsh.clear()
# 获取当前脚本的目录,并合并上级目录中的't13_data.stl'文件路径
path = os.path.dirname(os.path.abspath(__file__))
gmsh.merge(os.path.join(path, os.pardir, 't13_data.stl'))
# 从Gmsh的ONELAB接口获取用户输入的角度参数
angle = gmsh.onelab.getNumber('Parameters/Angle for surface detection')[0]
# 获取是否创建可参数化曲面的用户输入
forceParametrizablePatches = gmsh.onelab.getNumber(
'Parameters/Create surfaces guaranteed to be parametrizable')[0]
# 设置包含边界和曲线角度的参数
includeBoundary = True
curveAngle = 180
# 对模型表面进行分类,准备创建几何体
gmsh.model.mesh.classifySurfaces(angle * math.pi / 180., includeBoundary,
forceParametrizablePatches,
curveAngle * math.pi / 180.)
# 创建几何体
gmsh.model.mesh.createGeometry()
# 获取所有曲面,并创建一个曲面环和体积
s = gmsh.model.getEntities(2)
l = gmsh.model.geo.addSurfaceLoop([e[1] for e in s])
gmsh.model.geo.addVolume([l])
# 同步几何模型
gmsh.model.geo.synchronize()
# 添加一个网格大小字段,根据用户选择应用不同的网格大小函数
f = gmsh.model.mesh.field.add("MathEval")
if gmsh.onelab.getNumber('Parameters/Apply funny mesh size field?')[0]:
gmsh.model.mesh.field.setString(f, "F", "2*Sin((x+y)/5) + 3")
else:
gmsh.model.mesh.field.setString(f, "F", "4")
gmsh.model.mesh.field.setAsBackgroundMesh(f)
# 生成三维网格
gmsh.model.mesh.generate(3)
# 将网格写入文件
gmsh.write('t13.msh')
# 设置用户可调的参数