首页/文章/ 详情

HyperMesh二次开发:一键批量更新接触Set

2月前浏览459

 

最近做的项目中需要生成大量的数据,研究不同部件相对位置变化对结果的影响。然而,每次部件移动后,接触面Set必须更新!

今天,我将分享一段HyperMesh二次开发代码,一键批量更新所有接触Set,让DOE分析效率飞起来!


一、为什么需要自动更新Set?

传统方法的痛点:

  • • 部件相对运动后,原Set中的单元可能已偏离接触区域
  • • 每次都需要手动重新选择单元,极易出错
  • • 几十个接触面需要数小时重复劳动

解决方案的核心思路:

将整个部件的所有单元都加入Set,这样无论部件如何运动,Set始终包含该部件的完整单元集 合,接触定义永远有效,接触主从面的大小对于计算效率的影响微乎其微!


二、完整代码解析

  # 批量更新接触Set的核心代码
*createmark set113-24
set set_name [hm_getvalue set mark=1 dataname=name]

foreach set_n $set_name {
    # 步骤1:获取当前Set包含的所有单元
    *createmark elem 1"by set"$set_n
    
    # 步骤2:获取这些单元所属的组件列表
    set nc [hm_parentcomplist id {*}[hm_getmark elems 1]]
    
    # 步骤3:选择这些组件的所有单元
    *createmark elem 1"by comps id" {*}$nc
    
    # 步骤4:将单元添加到Segment Set中
    *segmentsetaddshells "$set_n"10
}

三、代码逐句详解

1. *createmark set 1 13-24

  • • 标记ID为13-24的Set(可根据实际修改ID范围)
  • • mark=1表示临时标记组编号

2. set set_name [hm_getvalue set mark=1 dataname=name]

  • • 获取标记Set的名称列表
  • • 存储在变量set_name

3. 循环处理每个Set

  foreach set_n $set_name {
    # 逐个处理
}

4. 核心逻辑:从Set → 组件 → 全部单元

  # 获取Set内的单元
*createmark elem 1 "by set" $set_n

# 获取单元所属的组件ID(去重)
set nc [hm_parentcomplist id {*}[hm_getmark elems 1]]

# 选择这些组件的全部单元
*createmark elem 1 "by comps id" {*}$nc

# 重新定义Segment Set
*segmentsetaddshells "$set_n" 1 0

四、使用步骤

第一步:准备工作

  1. 1. 打开HyperMesh,加载模型
  2. 2. 确保已创建好初始的Segment Set(接触对)

第二步:修改Set ID

  *createmark set 1 13-24  # 修改为你的Set ID范围

第三步:在HyperMesh中运行

  • • 方式1:File → Run → Tcl/Tk Script
  • • 方式2:在Command Window中逐行粘贴
  • • 方式3:保存为.tcl文件,通过source命令调用

五、进阶技巧

技巧1:自动识别所有接触Set

  # 获取模型中所有Segment Set
*createmark set1"all"
set all_contact_sets [hm_getmark set1]

# 过滤只保留接触Set(名称包含"CONTACT")
foreach set_id $all_contact_sets {
    *createmark set1$set_id
    set set_name [hm_getvalue set mark=1 dataname=name]
    if {[string match "*CONTACT*"$set_name]} {
        # 处理该Set
    }
}

技巧2:异常处理

  foreach set_n $set_name {
    # 检查Set是否为空
    *createmark elem 1 "by set" $set_n
    set elem_count [llength [hm_getmark elems 1]]
    
    if {$elem_count == 0} {
        puts "警告:Set $set_n 不包含任何单元,跳过"
        continue
    }
    
    # 正常处理...
}

 



来源:TodayCAEer
ACTHyperMesh二次开发
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-06-12
最近编辑:2月前
TodayCAEer
本科 签名征集中
获赞 85粉丝 193文章 743课程 2
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈