如何引用Abaqus Python脚本中的findAt列表/元组

时间:2018-11-24 15:28:07

标签: python brackets abaqus

对于abaqus,我正在编写一个脚本,该脚本使用来自不同文件的点来创建结构。为了在abaqus中创建一个集合,使用了findAt命令。

    db.models['Model-1'].parts['Part-1'].Set(edges=
mdb.models['Model-1'].parts['Part-1'].edges.findAt(tensionList), name='Tension')

张力列表:

    tensionList = [([0.75, 1.25, 0.0], ()), ([0.25, 0.75, 0.0], ()), ([0.75, 0.25, 0.0], ()), ([0.5, 2.0, 0.0], ()), ([0.0, 1.5, 0.0], ()), ([0.25, 1.75, 0.0], ()), ([1.0, 1.5, 0.0], ())]

在abaqus中运行此脚本时,会发生以下错误:

“ TypeError:arg1;参数太多;期望1,得到7”

但是,当从张力列表中删除外括号[]并将其直接放置在脚本中时,脚本确实可以工作:

    mdb.models['Model-1'].parts['Part-1'].Set(edges=
mdb.models['Model-1'].parts['Part-1'].edges.findAt(([0.75, 1.25, 0.0], ()), ([0.25, 0.75, 0.0], ()), ([0.75, 0.25, 0.0], ()), ([0.5, 2.0, 0.0], ()), ([0.0, 1.5, 0.0], ()), ([0.25, 1.75, 0.0], ()), ([1.0, 1.5, 0.0], ())), name='Tension')        

(脚本不适用于使用大括号[]粘贴脚本中的所有内容,但是如果在tensionList中删除了大括号并在示例1中进行了引用,也会发生相同的错误)

我如何解决这个问题而不必复制过去的所有内容。 (过程将有很多迭代和很长的列表)

编辑:通过使用边缘索引解决方法解决(仍然很感兴趣如何使用findAt解决这个问题)

    index =0
    while index < (len(compressiveMembersIndex)+len(tensileMembersIndex)):
         mdb.models['Model-1'].parts['Part-1'].Set(edges=
              mdb.models['Model-1'].parts['Part-1'].edges[index:index+1], 
              name=aSetCreating[index])
         index +=1

1 个答案:

答案 0 :(得分:1)

我认为您在几个地方还加了一个括号... 下面的代码以所示格式为我工作,这将输入作为一个x,y,z。

findAt((x, y, z),)

可能的解决方法是创建xyz坐标列表并使用findAt使用循环引用该列表?

x=[1,2,3]
y=[4,5,6]
z[7,8,9]
edgeslist=[]
numedges=5
    for i in xrange(numedges)
        edgeslist.append( findAt((x[i], y[i], z[i]),) )

或者,如果您的边缘位于一条方便的路径上,则可以始终使用findAt获取一条边缘,然后使用getEdgesByEdgeAngle(...)