今天我们来介绍一个二次开发案例—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...
							
		 
						
		加载中,请稍候......