首页/文章/ 详情

简化建模过程: HyperMesh中的二次开发与模型命名技术

3月前浏览756
先感叹一下
这么久了,上一篇写的推文居然破1000的阅读量了,随着公众 号的推荐机制变化,之前写的文章阅读量就在300左右徘徊,上一篇文章所带来的阅读量,有点受宠若惊了。


回想最开始写文章的时候,就是源于学习ANSA软件的时候,奈何网上的资料实在是凤毛麟角。只有去看帮助文档,觉得自己已经花费了这么多时间来学习,后续学习的小伙伴要是能有对应的资料,岂不美哉,然后开始了写公众 号文章。那时候推荐机制不一样,阅读量还行,越写越有趣。但后面修改后,阅读量越来越来,就偶尔写写了,这不大家的阅读量,又让我找到之前的感觉了。

 可能推荐机制对于日常工作相关的文章更推荐吧,故本次继续分享日常使用频率高的操作。

文章主题__模型命名
掌握"茴"字的多种写法,用好一种即可。

GUI界面操作:
    Tools>Matrix
    功能很强大的模块,前后处理都可以调用,通过Tools>Matrix调用。详细功能就不介绍了,可以在Altair官方公众 号以往的文章中查看,我就在这里简单介绍下。


如下图所示,启动后程序嵌入在左侧导航栏,
1、先指定DataSource的Item,
2、Entities模块会读取当前模型中的所有Collector种类,并填充至Item中。
3、用户选择entity的类型,点击Query按钮,这时候会跳转出交互面板,在模型中选择需要查询的元素即可。
4、下图是以选择comps为例,就会将comps的ID填充至上方的表格中。
5、这时候继续选择上方表格的标题列名称,那一列的元素会高亮显示,DataName列就会填充comps能够查询的dataname信息。
6、用户再选择需要查询的dataname,再点击Query按钮。
7、就会将comps对应的信息填充至有效元素的后一列。
8、点击对应的行,模型中的零件会以高亮显示的状态显示。
至此完成Collector信息的提取,以上步骤皆可重复运行,并可以交叉提取。



例如可以通过comps提取出关联的property,再通过property提取厚度、以及material,还可以继续提取material的各项材料参数。上述操作就成功把层级的信息以二维表的形式表现出来了。

目前只是提取步骤,那么我们要做的当然是修改元素,这时候就可以点击程序的右上角的Excel按钮,将会把当前的表格的元素粘贴到Excel表中,这时候就由各位大表哥,大表姐,自由操作了。


例如通过VLOOKUP函数,通过零件号匹配BOM表信息,通过&符号链接模型的材料与厚度字符串等各种操作,在表格中操作简直用随心所欲来形容。



当元素修改完成后就可以通过Matrix按钮进行模型更新了。

程序还提供了很多其它选项就交由大家去探索了,功能很多,但是label简单明了。



Tool>rename

    menu内的Tool模块下的rename按钮,精简版命名模块

    分为 Individually Subpanel

            All By ID Subpanel 。

    1、Individually Subpanel面板就是常规命名,一一对应。
    2、All By ID Subpanel面板就是对执行Collector下的所有元素进行重命名操作,指定前缀,后续字符以元素ID进行连接。


运行效果如图所示:


快速导出模型信息
    能够搭配matrix模块,或者其它功能完成模型信息修改
    以在component界面下为例
    在标题列右键控制过滤选项。


    空白位置右键export导出csv文件


    标题行的过滤按钮过滤信息,和在上方的Find栏一样的效果


utility命令导出
    以component table为例
    但是更喜欢在Model Browser下面查看,过滤也更方便,运行速度也快。


二次开发:    
    show time
    界面很丑但是不影响功能的强大。

    
    1、表达式输入窗口,这里需要一点点tcl的基础知识,后续有关于String函数的案例介绍。
    2、选择模型的方式,支持通配符匹配、交互选择。all,displayed,四种方式。
    3、Collector的类型,例如comps,mat ,property等只要模型浏览器内有的类型都可以支持。
    4、Rename按钮,执行命名操作。

   

这里为大家提供几个表达式,手动输一下比复 制粘贴更能发现细节。




 

tcl基础知识:

使用"string length"获取字符串长度:





set str "Hello, World!"set len [string length $str]puts "字符串长度:$len"   ;# 输出:字符串长度:13


使用"string index"获取字符串中指定位置的字符:




set str "Hello, World!"set char [string index $str 0]puts "第一个字符:$char"   ;# 输出:第一个字符:H


使用string range获取字符串中指定范围的子字符串:




set str "Hello, World!"set substring [string range $str 7 12]puts "子字符串:$substring"   ;# 输出:子字符串:World!


使用"string compare比较两个字符串的大小关系:





set str1 "abc"set str2 "def"set result [string compare $str1 $str2]puts "比较结果:$result"   ;# 输出:比较结果:-1 (str1小于str2)


使用"string first"查找字符串中第一次出现指定子字符串的位置:




set str "Hello, World!"set position [string first "o" $str]puts "第一次出现的位置:$position"   ;# 输出:第一次出现的位置:4


使用"string match"检查字符串是否与指定的模式匹配:







set str "Hello, World!"if {[string match "Hello, *" $str]} {    puts "字符串匹配"} else {    puts "字符串不匹配"}


使用"string equal"比较两个字符串是否相等:








set str1 "Hello"set str2 "hello"if {[string equal $str1 $str2]} {    puts "字符串相等"} else {    puts "字符串不相等"}


使用"string is"检查字符串的特定属性,比如是否为整数、是否为字母等:







set str "123"  if {[string is integer $str]} {      puts "字符串为整数"  } else {      puts "字符串不是整数"  }


 使用"string tolower"将字符串转换为小写形式: 




set str "Hello, World!"  set lower [string tolower $str]  puts "转换为小写形式:$lower"   ;# 输出:转换为小写形式:hello, world!


 使用"string toupper"将字符串转换为大写形式: 




set str "Hello, World!"  set upper [string toupper $str]  puts "转换为大写形式:$upper"   ;# 输出:转换为大写形式:HELLO, WORLD!


使用"string trim"移除字符串两端的空格或指定的字符: 








set str "   Hello, World!   "  set trimmed [string trim $str]  puts "移除空格后的字符串:$trimmed"   ;# 输出:移除空格后的字符串:Hello, World!    set str "!!Hello, World!!"  set trimmed [string trim $str "!"]  puts "移除感叹号后的字符串:$trimmed"   ;# 输出:移除感叹号后的字符串:Hello, World


使用"string replace"替换字符串中的指定字符或子字符串: 




set str "Hello, World!"  set newstr [string replace $str 7 12 "Universe"]  puts "替换后的字符串:$newstr"   ;# 输出:替换后的字符串:Hello, Universe!

 

使用"string map"根据给定的映射表替换字符串中的字符: 







set str "Hello, World!"  set mapping {      "o" "e"  }  set newstr [string map $mapping $str]  puts "替换后的字符串:$newstr"   ;# 输出:替换后的字符串:Helle, Werld!

  

使用"string cat"将多个字符串连接为一个字符串: 





set str1 "Hello"  set str2 "World"  set result [string cat $str1 ", " $str2 "!"]  puts "连接后的字符串:$result"   ;# 输出:连接后的字符串:Hello, World!

    使用工具的前提下,得有规范,命名需要规范,装配层级需要规范,一个好的输入才能让后续的工作通过自动化程序开展。不然生成的模型各有特点就不好处理了。

    规范的存在是为了整合过去的经验以及注意事项,形成技术文档,这样不会随着人的流失,造成技术的断层,更是为了以后的AI训练。

    一份规范的数据,能节约好多数据清洗的时间,效益将体现在加快企业的研发进度上。数据才是一个企业最大的资产。



来源:TodayCAEer
HyperMesh二次开发ANSA材料控制Altair装配
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-08-14
最近编辑:3月前
TodayCAEer
本科 签名征集中
获赞 18粉丝 27文章 242课程 0
点赞
收藏
作者推荐

HyperView二次开发_自动识别模态系列-GUI操作

识别模态的工具开发将分为两篇,本篇将介绍在GUI界面下手动操作的步骤,以及程序开发的逻辑。正所谓授人以鱼,不如授之以渔,咱们开始了。识别全局模态基于NVHUtilities工具,超级简单。选择文件,点击Load按钮,程序就自动识别模型的所有工况,如果不只是模态工况的话,需要手动切换为模态工况,设置识别的百分比,并根据模型设置具体的识别范围,节点的类型等。然后点击IdentifyModes开始识别,如果Global/Local的ListBox没有新的Item,表示你设置的Criterion比值太大,请减小数值,当出现Item后,点击Animate,即可加载对应的阶次动画。大部分模型,如果关注一阶扭转或弯曲,那么前两个Item就是你所需要的,是能识别正确的。如果对于TB这种大模型,或者局部模态较多的,可以采用FRF功能加以辅助甄别,当然这是另一个NVHUtilities工具下的另一个功能了。这就是识别整体模态的操作,但是对于像动力总成这类的模型,不仅仅关注的是整体模态,更关注的是各个部件的局部模态,这除了人工识别外,有没有其他办法实现呢,有知道的小伙伴,能后台分享下就更好了,哈哈哈。以上是手动识别的步骤,如果要开发自动识别的工具,前提条件是你得手动能操作出来,并捋清楚程序运行的逻辑,这样才可以着手开发,不然后世浪费时间。开发逻辑:这个工具是识别每一阶模态中,节点的参与的数量,最后得以一个参与因子,取最大值,简单粗暴。来源:TodayCAEer

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈