Python调用GMSH生成体网格时如何通过代码设置曲面可见性
问题:通过Python控制Gmsh网格可见性设置
我使用Python调用Gmsh进行体网格划分,网格生成流程正常,但在Gmsh中查看结果时曲面默认不可见。由于后续需要构建结构化网格,手动通过「选项->网格->可见性」勾选[2d element faces]并取消勾选[3d element edges](默认勾选[2d element edges]和[3d element edges])来显示曲面过于繁琐,现询问是否可通过代码实现该可见性设置。
实现代码
import gmsh import math def main(): gmsh.initialize() # alias to facilitate code writing factory = gmsh.model.geo # default mesh size lc = 1. # Geometry # points p1 = factory.addPoint(0., 0., 0., lc) p2 = factory.addPoint(10., 0., 0., lc) p3 = factory.addPoint(0., 10., 0., lc) p4 = factory.addPoint(4., 0., 0., lc) p5 = factory.addPoint(0., 4., 0., lc) p6 = factory.addPoint(4., 4., 0., lc) angle = math.pi/4. p7 = factory.addPoint(10*math.cos(angle), 10*math.sin(angle), 0., lc) # lines l1 = factory.addLine(p5, p6) l2 = factory.addLine(p6, p4) l3 = factory.addLine(p4, p1) l4 = factory.addLine(p1, p5) l5 = factory.addLine(p4, p2) l6 = factory.addLine(p5, p3) l7 = factory.addLine(p6, p7) l8 = factory.addCircleArc(p2, p1, p7) l9 = factory.addCircleArc(p7, p1, p3) # curve loops cl1 = factory.addCurveLoop([l3, l4, l1, l2]) cl2 = factory.addCurveLoop([l7, l9, -l6, l1]) cl3 = factory.addCurveLoop([l5, l8, -l7, l2]) # surfaces s1 = factory.addPlaneSurface([cl1]) s2 = factory.addPlaneSurface([cl2]) s3 = factory.addPlaneSurface([cl3]) # extrusions dx = 5. num_els_z = 10 factory.extrude([(2, s1), (2, s2), (2, s3)], 0., 0., dx, numElements=[num_els_z], recombine=True) factory.synchronize() # Meshing meshFact = gmsh.model.mesh # transfinite curves n_nodes = 10 # "Progression" 1 is default meshFact.setTransfiniteCurve(l1, numNodes=n_nodes) meshFact.setTransfiniteCurve(l2, numNodes=n_nodes) meshFact.setTransfiniteCurve(l3, numNodes=n_nodes) meshFact.setTransfiniteCurve(l4, numNodes=n_nodes) meshFact.setTransfiniteCurve(l5, numNodes=n_nodes) meshFact.setTransfiniteCurve(l6, numNodes=n_nodes) meshFact.setTransfiniteCurve(l7, numNodes=n_nodes) meshFact.setTransfiniteCurve(l8, numNodes=n_nodes) meshFact.setTransfiniteCurve(l9, numNodes=n_nodes) # transfinite surfaces meshFact.setTransfiniteSurface(s1) meshFact.setTransfiniteSurface(s2) meshFact.setTransfiniteSurface(s3) # mesh meshFact.generate(2) meshFact.recombine() meshFact.generate(3) gmsh.fltk.run() gmsh.finalize() if __name__ == "__main__": main()
效果对比
- 默认状态:

- 期望状态:

内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

