加载中…
个人资料
有限元在线
有限元在线 新浪机构认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,632,776
  • 关注人气:1,000
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ANSA二次开发PID筛选案例介绍

(2016-12-23 14:38:33)
标签:

ansa/μeta

分类: 技术交流

今天我们来介绍一个二次开发案例—ANSA中零件PID的筛选与操作。

首先先看一下需求:

ANSA二次开发PID筛选案例介绍

如上图所示。有一堆零件,软件已经自动区分出PID。它们的PID名字都以“part”加数字开头。现在要求:

将名称含PART1PID仅显示,topo

将名称含PART2PID仅显示,topo

将名称含PART3PID仅显示,topo(判断是否有part4,如果有topo,继续判断PART5,6,7……如果没有终止topo

首先分析一下需求,将名称含有XXXPID做指定操作,其实就是对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这种自增形式来顺序的判断part4part5...

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有