MENU

pygmsh的网格生成(2):occ(OpenCASCADE)模块中完成

• December 27, 2022 • Read: 4786 • Partial Differential Equation,Python,Finitie Element Method Theory,Numerical Analysis,Data Visualization

pygmsh中除了最基本的geo模块,为了适应更加复杂以及通用的CAD那样的建模方式,还提供了occ模块。从源代码看,geo以及occ中均有Geometry()类,但是他们的类方法具有不同,当然,需要注意的是,这个类不管是是在geo,还是在occ中,这个类都是继承于一个父对象的,父对象本身包含了一些最基本的方法,比如add_polygon 等方法,所在在使用的时候既有差异,也存在相同的操作。
occ中Geometry对象存在的意义,在大程度上体现在能够进行几何对象的布尔操作,当然一些方法也需要注意,比如disk、rectangle等等,这些是基本图形操作。生成以后,可以用boolean_difference(c0, c1) 来进行差集运算。boolean_union([c0, c1])来进行交运算。通过布尔运算能够生成更加复杂的几何对象。当然,这个过程中一定要注意mesh_size的施加方式,多种布尔操作下,最好通过geom.characteristic_length_max来设定。其余的,像拉伸、旋转等操作与geo中的操作都是一样的,只不过布尔运算必须是occ中的几何对象才可以。

import pygmsh
with pygmsh.occ.Geometry() as geom:
    geom.add_disk([0, 0], 2, mesh_size=0.1)
    mesh = geom.generate_mesh()

with pygmsh.occ.Geometry() as geom:
    geom.characteristic_length_max = 0.05
    rec = geom.add_polygon([[0, 0], [1, 0], [1, 1], [0, 1]])
    cr = geom.add_disk([0.5, 0.5], 0.15)
    geom.boolean_difference(rec, cr)
    mesh = geom.generate_mesh()

with pygmsh.occ.Geometry() as geom:
    geom.characteristic_length_max = 0.02
    rec = geom.add_polygon([[0, 0], [1, 0], [1, 1], [0, 1]])
    r1 = geom.add_disk([0.5, 0.5], 0.15)
    rr = geom.boolean_difference(rec, r1)
    d3 = geom.extrude(rr, [0, 0, 1], num_layers=10)
    mesh = geom.generate_mesh()

with pygmsh.occ.Geometry() as geom:
    geom.characteristic_length_max = 0.2
    disk1 = geom.add_disk([0, 0], 5)
    disk2 = geom.add_disk([0, 0], 2)
    flat = geom.boolean_difference(disk1, disk2)
    geom.extrude(flat, [0, 0, 0.3])
    mesh = geom.generate_mesh()

occ1
occ2

Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment

6 Comments
  1. ydl ydl

    您好 请问您了解pygmsh支持导入模型文件划分网格吗

    1. @ydlpygmsh我在他的官网看过,是支持的,他能优化网格划分的。但是你都已经有网格了,为什么还要导入呢?node和element的信息都知道了啊,这时候直接np.loadtxt()读取进来就可以直接操作了啊

    2. ydl ydl

      @Tony Yang不好意思 您可能没理解 我的意思是不在程序内部建模 比如我在solidworks内建模好了 之后想用pygmsh划分模型网格可以实现吗

    3. @ydl这个我也没有使用过,但是你可以搜一下gmsh的文档,pygmsh就是gmsh的python版

  2. ygh ygh

    你好老板,域名出售吗?出售的话+qq:2729796341 联系谢谢!

  3. 勿忘初心 勿忘初心

    您好,看你的站做的挺不错的,有没有出手的打算,想出手的话,联系QQ1587894193。