获取后台集合并遍历_如何在SCDM中正确高效地循环遍历

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

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

229aeec3fa1562b40ff53fd04e1a859f.png

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

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

69caf934afd00addaeebd1d3d0051b10.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值