上文我们介绍了Entity的属性以及方法,作为ANSA二次开发的基本元素,不仅要掌握Entity的属性及方法,还要熟练掌握操作Entity的各种函数。
我们再ScriptEdit中搜索Entity关键词,会出现下图这么多针对Entity操作的函数。而且这还不是针对Entity操作的全部函数。相信新手对于这么多函数一定很头大。
不要害怕,绝大部分的函数使用频率都很低,下面我挑选出使用频率最高的集合函数进行详细的讲解。
搜集Entity
base.CollectEntities(deck, containers, search_types, recursive, filter_visible, prop_from_entities,mat_from_entities,model_browser_filter,no_expand_types,hidden_entities)
- deck (integer) -在哪个求解器下搜寻Entity ,例如ansa.constants.ABAQUS
- containers (object) –在哪里搜寻,可以是container或者container组成的列表, Containers可以是type group, part, set, property,material, face, volume, elements。如果container 是 None, CollectEntities会搜寻搜友 ANSA 的数据库.
- search_types (object) –搜寻的Entity种类。 可以是SHELL,SOLID, GRID 等 除此之外,还可以是
“PROPERTIES” 、“MATERIALS” 、“ELEMENTS”、 “ALL_ENTITIES“ 、“CONNECTIONS” - recursive (boolean) –(optional)是否搜寻更高级别的container
- filter_visible (boolean)–(optional)是否直搜寻界面可见的Entity,默认是False
- prop_from_entities (boolean) –(optional)
在search_type是一个属性的情况下,该参数控制是否必须从容器中的实体引用的实体中获取该属性。例如,search_type为"
PSHELL “, container为” PART ",
prop_from_entities为True,如果该部分包含shell,则返回相应的PSHELL。否则,如果prop_from_entities为False,则返回None。默认是False。 - mat_from_entities (boolean) –(optional)
在search_type是一个材料的情况下,该参数控制是否必须从容器中的实体引用的实体获取材料。例如,search_type为" MAT1", container为" PART “, mat_from_entities为” yes ",如果该部分包含MAT1 material的元素,则返回相应的material。否则,如果mat_from_entities为False,则返回None。默认是False。 - 后面几个参数不太常用这里就不介绍了,有兴趣的自行查看帮助文档
- Return-返回搜集到的Entity组成的列表
当我们只需要对Entity的对象对象进行迭代时,使用ansa.CollectEntitiesI()效率会更高,使用方法和base.CollectEntities完全一样。
比如说我现在想将所有的SHELL的id与之对应的PID储存到一个字典中,这时候对比使用CollectEntities()与CollectEntitiesL()的时间。
但是这里注意一点根据我试验的结果,当你搜集的Entity数量较少时,使用ansa.CollectEntities()的效率反而会更快,这一点我也很迷糊,有大神知道怎么怎么回事的话,评论区指教一下。
总之,当搜集的Entity数量较少时使用ansa.CollectEntities()效率高;当搜集的Entity数量较多时使用ansa.CollectEntitiesI()效率高。分界线的话这里只能靠试。我这个模型壳单元一共3204678,下面是测试用代码:
import time
import ansa
from ansa import constants
from ansa import base
deck = constants.ABAQUS
#collect all the shells in abaqus
Shells = base.CollectEntities(deck,None,"SHELL")
dict = {}
time_start = time.time()
for i in base.CollectEntities(deck,None,"SHELL"):
temp= i.get_entity_values(deck,("ID","PID"))
id = temp["ID"]
pid = str(temp["PID"]._id)
dict[pid] = id
time_end = time.time()
print("THe time of CollectEntities is{}".format(time_end-time_start))
dict1 = {}
time_start1 = time.time()
for i in base.CollectEntitiesI(deck,None,"SHELL"):
temp= i.get_entity_values(deck,("ID","PID"))
id = temp["ID"]
pid = str(temp["PID"]._id)
dict1[pid] = id
time_end1 = time.time()
print("THe time of CollectEntitiesI is{}".format(time_end1-time_start1))
输出
THe time of CollectEntities is30.46959900856018
THe time of CollectEntitiesI is24.85980200767517
base.GetEntity(deck, type, element_id, location)
- deck (integer) –在哪个求解器下搜寻Entity ,例如ansa.constants.ABAQUS
- type (string) –所搜寻Entity的种类。还可以是“PROPERTIES”和“MATERIALS”
- element_id (integer) –Entity的id
- location (string) –(optional) 没搞懂
- Return - 成功返回Entity,否则返回None
创建Entity
base.CreateEntity(deck, element_type, fields, mbcontainer, include, debug)
- deck [required] 在哪个求解器下创建Entity ,例如ansa.constants.ABAQUS
- element_type [required] 创建什么类型的Entity,例如ABAQUS中的点为“NODE”
- fields [optional] 创建的Entity中属性与属性值的键值对组成的字典
- mbcontainer [optional] 尚未搞清楚用途,不过并不常用,可以忽略
- include [optional] 也不太常用
- debug [optional]这个参数是设置CreateEntity()创建后的返回值,设置为base.constants.REPORT_ALL时,在创建Entity后返回两个item,一个是创建是否成功,另外一个是创建失败的信息组成的字典,有兴趣自行研究。
- Return 在debug参数被赋予的时候,返回上述所说的两个值;否则创建成功返回Entity,不成功返回None
这里面deck、element_type参数值是必须给的,其他的参数值可给可不给。也就是说你可以不给fields的值来创建一个空的Entity。
删除Entity
base.DeleteEntity(entities, force, compress)
- entities [required] 需要删除的Entity,可以是单个Entity,也可以是由Entity组成的列表
- force [optional] 设置为True删除Entity时会删除和该Entity相关联的其他Entity
- compress [optional] 设置为False时不会删除该Entity的点及属性
- Return 删除成功返回0,否则返回0
获取Entity属性信息
base.GetEntityCardValues(deck, entity, fields)
这个函数的使用方法和Entity方法中Entity.get_entity_values()不能说相似,只能说完全一样。
- deck [required] 在哪个求解器下创建Entity ,例如ansa.constants.ABAQUS
- entity [required] 要得到哪个Entity的属性
- fields [optional] 需要得到的属性值的属性组成的列表,例如[“ID”,“PID”,“X”]
编辑Entity属性信息
base.EditEntity(deck, entity, location, read_only)
- deck [required] 在哪个求解器下创建Entity ,例如ansa.constants.ABAQUS
- entity [required] 要编辑(查看)哪个Entity的属性
- location [optional] Material Database的位置(暂时没用过)
- read_only [optional] 显示的Entity属性窗口中内容是否可编辑,True不可编辑,默认False可编辑
该函数会将Entity的属性框显示出来,如下所示,这里我设置了read_only=True,属性不可编辑,这能查看。
base.SetEntityCardValues(deck, entity, fields, items, debug)
这个函数的使用方法和Entity方法中的Entity.set_entity_values()不能说相似,只能说完全一样。
- deck [required] 在哪个求解器下创建Entity ,例如ansa.constants.ABAQUS
- entity [required] 要编辑哪个Entity的属性
- fields [optional] 创建的Entity中属性与属性值的键值对组成的字典
- item [optional] 只用于创建TABLE类型的Entity,是由列表组成的列表,例如 [ [curve1, curve2,
…], [x1, x2, …] ] - debug [optional] 这个参数是设置CreateEntity()创建后的返回值,设置为base.constants.REPORT_ALL时,在创建Entity后返回两个item,一个是创建是否成功,另外一个是创建失败的信息组成的字典,有兴趣自行研究。
- Return 在debug参数被赋予的时候,返回上述所说的两个值;否则创建成功返回0,不成功返回非零值
base.SetEntityId(entity, id, force, respect_frozen)
这个函数能直接设置Entity的ID,当需要修改Entity的ID时更加方便
- entity [required] 要修改哪个Entity的ID
- id (integer) –要赋予的ID
- force (boolean) –(optional) False: 如果赋予的ID已经被同类的Entity占有,则不执行操作 True: 如果赋予的ID已经被同类的Entity占有,则函数会赋予Entity一个新的ID
- respect_frozen (boolean) –(optional) False:
忽略FROZEN_ID属性,即使Entity的ID被锁定也会赋予新的ID True: 当Entity的ID被锁定,不赋予新的ID - Return-成功赋予ID返回1,否则返回0。
设置Entity显示
base.SetEntityVisibilityValues(deck,fields)
- deck (integer) –在哪个求解器下设置Entity是否可见 ,例如ansa.constants.ABAQUS
- fields (object) –(optional) 由Entity种类:on/off组成的字典 Return-成功返回1,失败返回0
举个例子,显示GASKET,隐藏FASTENER: m =
base.SetEntityVisibilityValues(constants.ABAQUS, {“GASKET”: “on”,
“FASTENER”: “disable”})
常用的Entity操作基本就是这些,后面想到了其他的再补充。
之后的文章会用例子的形式来进一步展示这些函数的使用方法。