今天我们来介绍一个二次开发案例—ANSA中零件PID的筛选与操作。
首先先看一下需求:
如上图所示。有一堆零件,软件已经自动区分出PID。它们的PID名字都以“part”加数字开头。现在要求:
将名称含PART1的PID仅显示,topo
将名称含PART2的PID仅显示,topo
将名称含PART3的PID仅显示,topo(判断是否有part4,如果有topo,继续判断PART5,6,7……如果没有终止topo)
首先分析一下需求,将名称含有XXX的PID做指定操作,其实就是对PID进行分类,通过名称含有XXX来筛选,这刚好可以应用字典来解决,那么剩下的就是逻辑了。
下面来具体写一下这个程序:
import ansa
from ansa import base
from ansa import constants
def main3():
#根据SHELL_PROPERTY收集实体
shells=base.CollectEntities(constants.FLUENT,None,'SHELL_PROPERTY')
namelist=list()
adict={}
#对收集到的实体列表进行遍历
for shell in shells:
val=('Name',)
#取到PID名字的字典(单个)
namedict=base.GetEntityCardValues(constants.FLUENT,shell,val)
#取到字典键‘Name’所对应的值(PID名字)
name=namedict.get('Name')
#每次将PID名字加入名字列表里
namelist.append(name)
#对PID名字列表进行遍历
for name in namelist:
if name[0:5]not in adict:
adict[name[0:5]]=[]
#取到字典键所对应的值(列表)
list2=adict.get(name[0:5])
#将名字加入这个列表
list2.append(name)
print(adict)#测试
#取到字典键的列表
keys=list(adict.keys())
keys.sort()
parts=list()
#对字典键的列表进行遍历
for key in keys:
#取到字典键所对应的值(列表)
list3=adict.get(key)
i=0
#对这个存有PID名字的列表进行遍历
for l in list3:
part=base.GetPartFromName(str(list3[i]))#取到PID名字所对应的零件
parts.append(part)
i+=1
base.Or(parts)
base.Topo()
options=[ "UNCHECKED FACES","NEEDLE FACES", "COLLAPSED CONS", "TRIPLE CONS", "OVERLAPS", "CRACKS", "SINGLE CONS"]
fix=[1,1,1,1,1,1,1]
ret=base.CheckAndFixGeometry(parts,options,fix,True,True)
if ret==None:
print ('No errors!')
#清空parts列表
del parts[
base.All()
#注:因为本身的PID名称列表是无顺序的,所以取到的名字的先后顺序也是跟随PID名称列表的(无序的),就算能够排序,但是不确定含有相同part字段的名字有几个。所以在判断名字中含有part几的时候,不能使用part i,i+=1这种自增形式来顺序的判断part4、part5...
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删