首页/文章/ 详情

如何在SCDM中正确高效地循环遍历

3年前浏览5802
最近在后台收到读者来信,这位朋友想在SCDM中识别圆柱孔,然后使用填充工具批量填充,他编写了如下图所示的代码,但是代码执行过程中出现问题,执行出错。
上面问题简单概括起来有如下三个方面,也是后台咨询最多的问题,非常具备代表性:
1)如何在Python中正确地创建循环操作?
2)在SCDM中如何循环遍历得到几何对象?
3)如何选择满足特定特征的几何对象?
那么今天小田老师就接着上面三个问题,详细和大家聊聊如何在SCDM中正确地循环遍历。
首先,我们需要明确Pythonfor循环和CC#Java语言中的for是不一样的,它功能类似foreach:即遍历给定可迭代对象中的每一个元素。
所以,遍历的对象要是可迭代的(实现__iter__方法),我们常见的列表(list),字典(dict)、**(set)、元组(tuple)等数据结构都是可迭代对象。同样,SCDM中几何对象(body, face, edge)都是可迭代的对象,详细查看《SCDM二次开发系列:Doc对象详解
然后,对应上面问题代码中,直接遍历一个不可迭代的整形(int)变量是错误的,在Python中需要通过range(int)生成可迭代的对象,所以上面代码可以改成:
但是上面代码更像C语言、C#等中的写法,通过列表的索引访问元素,不够Pythonic;更Python的写法如下:
从上面代码我们可以发现,通过简单粗暴的双重循环就可以得到所有面;
Python中还有一种更简单的方式获取,也就是列表推导式,一行代码就能搞定,而且相比直接双重循环速度更快,代码如下:
如果,你有翻看过SCDM的开发文档,会发现所有的Doc对象都有一个如下方法:
所以,访问得到根目录下的所有的子孙面,采用内置的API方法可以这么写:
现在,我们知道如何遍历获得所有几何对象,那么该如何获取满足特定特征的对象呢?
这就需要配合if判断语句,简要概括下代码框架:循环遍历(for)---->判断特征(if) -----> 引用对象。
接下来,我们针对上面的第3个问题,演示如何获得小于8mm的圆柱孔,然后批量填充操作,代码如下:

但是,上面的方法在存在很多几何面的几何中,运行效率不够高效,这时候可以通过智能选择(PowerSelection)功能,直接查找满足特征的几何对象,会让脚本代码更高效,详细参考《SCDM二次开发系列:智能选择》,代码如下:

以上,就是本期的所有内容,关于如何在SCDM中进行循环遍历,你学会了吗?欢迎大家留言参与讨论。

点击课程推荐,立即学习《Python语言在ANSYS的应用52讲》,掌握SCDM脚本建模及ANSYS二次开发能力。

代码&命令二次开发通用SpaceClaimACT
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-09-23
最近编辑:3年前
小田老师
硕士 | 仿真工程师 欢迎关注ANSYS仿真与开发!
获赞 624粉丝 3615文章 62课程 4
点赞
收藏

作者推荐

未登录
还没有评论

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈