首页/文章/ 详情

Hypermesh球六面体自动化网格源码

14天前浏览1101

上次写了一篇在Hypermesh中自动生成六面体网格的二次开发文章:

球的六面体网格自动化程序

听说Hypermesh可以自动画球的六面体网格了?  

是当时写的比较随意,里面有几个问题没处理掉,文章中也提到了

虽然不影响第一次网格的生成,但是第二次就会报错,今天刚好有空,就把以前的代码修改了下,现在生成球 的六面体网格就比较ok了

球的套娃行为,10个不同大小的球六面体网格重叠

当时的几个问题如图所示:

那就从第一个问题开始吧

如果存在comp,会报错,以前没有去判断这个comp是否存在,导致我在新建comp的时候就会报错,现在的逻辑就是如果存在,就删除comp,再生成comp,或者说也可以写成判断comp存在的话,在comp名称后面加个数字作为区分








# 使用的是很简单的catch方法,如果存在先删除,# 如果不存在的话,删除这段代码会报错,所以catch{}一下,问题不大catch {  *createmark components 1 $SphereCompName  *deletemark components 1  }*createentity comps name=$SphereCompName

第二个问题,八分之一球的solidID识别问题之前都是通过最大的ID来识别的,这个方法本身就是错误的,因为如果新建一个hm运行一次的话,没啥问题,但是实际场景谁会为了生成球网格而新建个hm文件,并且如果我要生成多个不同大小的球,那这个逻辑就不可用了

现在的逻辑就是通过坐标来定位到想要的八分之一模型,这样的话,识别的很准确了












#留下1/8球体# 使用与半径关联的点坐标进行solid的ID识别set retainPoint "$tol $tol $tol"foreach {x100 y100 z100} $retainPoint {}*createmark solids 1 $SphereCompNameset retainSolidId [lindex [hm_measureshortestdistance2 $x100 $y100 $z100 solids 1 0 0] 4]*createmark solids 1 "by comps name" $SphereCompNamehm_markremove solids 1 $retainSolidIdset remove [hm_getmark solids 1]*createmark solids 1 {*}$remove*deletesolidswithelems 1 0 1

第三个问题,球六面体网格质量的问题这个问题目前我还没解决,因为在14.0和2021.1上测试,生成的球体网格很规整,但是在2022.3上测试,生成的雅克比较低,而且并不是横平竖直的那种,我觉得这个可能大概率跟网格的基础算法有关,说白了就是版本之间的bug问题,感兴趣的读者可以测试下

Hypermesh 14.0的效果:

Hypermesh 2022.3的效果:


还可能有个问题就是你的球半径假设只有0.5或者1mm,然后使用0.1mm的网格尺寸,这样的话会报错,需要你在快捷键O中进行geometry和mesh选项中tol的设置,改小一些,就可以生成网格了

来源:CAE中学生
HyperMesh二次开发UG
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-11-13
最近编辑:14天前
CAE无剑
硕士 | 仿真工程师 CAE中学生
获赞 688粉丝 1507文章 250课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈