首页 > 解决方案 > Abaqus 脚本:调用存储在不带引号的变量中的字符串?

问题描述

rebar_set_command=[]

for i in rebar_instances:
 rebar_set_command.append('m.rootAssembly.instances[\''+i+'\'].faces.getByBoundingBox(0,0,0,X,Y,Z')

a='+'.join(rebar_set_command)

m.rootAssembly.Set(faces=a, name='A')

但是它不能完成,因为我认为 faces=a 中的值 a 包含引号。

如何在没有开始和结束引号的情况下调用此 Abaqus 命令的字符串?谢谢!

标签: pythonvariablessetquoteabaqus

解决方案


问题是'm.rootAssembly.instances[\''+i+'\'].faces.getByBoundingBox(0,0,0,X,Y,Z'给你一个字符串。这不是 Python 表达式。您可能想查看一些 Python 教程以了解表达式、变量和基本类型(例如字符串)的介绍。

在您的情况下,您需要将字符串中的内容作为实际表达式运行以获取返回的面部序列,并从中构建一个面部数组。更复杂的是Sequence,当您调用 时,Abaqus 返回自己的内部类型getByBoundingBox。使用这种类型很痛苦,因为您无法创建一个空的类型(至少我不知道)。因此,动态构建一组人脸列表需要额外注意。在下面的代码中,我获取每个钢筋实例的面序列,然后将每个单独的面添加到我自己的faces. 最后,为了创建集合,Abaqus 对参数的类型很挑剔faces我们需要创建一个part.FaceArray对象来满足 Abaqus。

import part

faces = []

for i in rebar_instances:
    face_sequence = m.rootAssembly.instances[i].faces.getByBoundingBox(0,0,0,X,Y,Z)
    faces += [f for f in face_sequence]

m.rootAssembly.Set(faces=part.FaceArray(faces), name='A')

推荐阅读