A-A+

Hypermesh二次开发:常用的数据查询和选择命令

2020年07月10日 CAE 阅读 1,881 views 次

在进行Hypermesh二次开发时经常需要检查某个对象在数据库中是否存在。例如新建一个部件,在创建前首先需要检查所创建的部件名称是否已经存在,Hypermesh中不允许有同名的对象存在,如果不检查直接创建,当有同名的部件时会导致程序出错,甚至Hypermesh崩溃。

1、模型信息查询命令hm_entityinfo和hm_entitylist

进行数据查询时,尽量使用Hypermesh提供的API,避免直接操作数据库列表(如直接判断某个ID号是否在列表中)。Hypermesh所提供的数据搜索API一般都是用C/C++编写的,并通过算法进行了搜索优化,使用这些API比直接使用TCL命令能获得更大的性能优势。例如在某个模型中查询是否存在ID号为10000的单元,使用以上两种方法,并输出查询时间。

(Documents) 2 % set eid 100000

(Documents) 3 % puts [time {hm_entityinfoexist elems $eid}]

26 microseconds per iteration

(Documents) 4 % set allelems [hm_entitylistelems id]

(Documents) 5 % puts [time {expr {$eid in$allelems}}]

9388 microseconds per iteration

直接使用TCL列表命令进行查询比使用Hypermesh提供的数据查询API hm_entityinfo进行查询所花费的时间多了好几个数量级,这还不算使用hm_entitylist创建列表所消耗的时间。而且对于大型模型来说,创建列表也会消耗大量内存。

hm_entityinfo 还可以查询大量和某个对象类型相关的信息,比如查询某类对象的最大id号,命令如下:

hm_entityinfo maxid entity_type

hm_entitylist则可以直接得到某类对象的完整列表,例如上面的获取所有单元的ID号列表。下面的代码为获取所有comp的名字:

hm_entitylist comps name

2、模型数据库元素查询命令*createmark

*createmark是Hypermesh二次开发中查询模型数据库获取输入的重要命令,还可以配合*createmarkpanel和hm_getmark命令进行用户交互选择。*createmark获取的数据是无序的,即获取的数据列表和选择的顺序无关。有时需要获取有序数据(如使用Ruled命令进行网格划分),此时可通过*createlist命令获取有序数据列表,或使用lsort命令对*createmark得到的id号进行自定义排序。

系统提供了1和2两个mark,可以进行集合运算:

此文章为微信公众号原创文章,查看全部文章内容请关注微信公众号“数字化设计CAX联盟”,回复数字:7695查看。
个人公众号“数字化设计CAX联盟”,欢迎关注,共同交流
为您推荐:

给我留言

© 坐倚北风 版权所有 严禁镜像复制 苏ICP备15034888号. 基于 Ality 主题定制 AliCMS
联系邮箱:leanwind@163.con,微信公众号:数字化设计CAX联盟

用户登录

分享到: