Gmsh教程

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')  
  
# 设置用户可调的参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值