【发布时间】:2019-09-15 16:17:44
【问题描述】:
我有许多 abaqus 插件,它们通过脚本界面在 Abaqus CAE 中执行操作。对于执行后的许多操作,Abaqus 会执行一些需要一些时间的显示刷新过程。如果模型很小并且脚本没有做太多,那没关系。但是,例如我的一个脚本参与其中,并在用户的 CSV 文件指定的坐标处将其复制到程序集中。有时可能会有多达 2000 个这样的复制。在这种情况下,完成该过程需要很长时间,而且大多数情况下您只会看到“正在设置显示...”
此外,此“设置显示...”会覆盖脚本的进度(里程碑),因此很难看到脚本的进度。
有没有办法在脚本完成之前暂停这种显示更新行为?也许有一个黑客可以重新定义 abaqus 更新功能,直到脚本完成或其他什么,因为根据手册,您唯一能做的就是防止更新配色方案,但这根本没有帮助。
任何提示将不胜感激,谢谢!
编辑:为了澄清我在视口对象上使用了以下方法,没有白费:
disableRefresh()
disableColorCodeUpdates()
disableColorCodeUpdates() 的作用非常清楚,在模型视口中使用颜色编码时,其好处显而易见。但是,我认为使用和不使用 disableRefresh() 之间没有区别。
编辑:抱歉让我等了这么久,直到现在我才有机会回到 abaqus。这是一个简单的示例脚本,它包含一个零件并将其放入装配中:
import random
modelName='Model-1'
partName='Part-1'
noInst=1000
i = 0
lists = []
for i in range(noInst):
lists.append([random.random()*10,random.random()*10,random.random()*10])
totalParts = len(lists)
session.Viewport(name='Viewport: 2', origin=(6.63750028610229,
20.7638893127441), width=335.746887207031, height=149.77685546875)
session.viewports['Viewport: 2'].makeCurrent()
session.viewports['Viewport: 2'].maximize()
session.viewports['Viewport: 1'].restore()
for n,l in enumerate(lists):
milestone('Replicating parts', 'parts', n+1, totalParts)
a = mdb.models[modelName].rootAssembly
p = mdb.models[modelName].parts[partName]
a.Instance(name='Random_'+'-'+str(n), part=p, dependent=ON)
a = mdb.models[modelName].rootAssembly
a.translate(instanceList=('Random_'+'-'+str(n), ), vector=(float(l[0]), float(l[1]), float(l[2])))
如果我尝试创建视口对象而不指定显示对象。视口默认为初始视口中当前显示的对象。我注意到如果我将模块从 amssembly 更改为任何其他模块,例如部分,我获得了速度提升,但它依赖于部分足够空。如果我的模型具有大而复杂的零件,那么“设置显示..”仍然相当慢,而且无论如何我的里程碑都会被“设置显示..”覆盖。
【问题讨论】:
-
你能展示一个简单的示例脚本吗?我做了很多 os abaqus 脚本,从未见过“设置显示”
-
如果你创建并切换到一个新的视口,而不指定显示的对象会发生什么?
-
什么是
milestone? -
里程碑是 abaqus 的功能,用于在 cae 或查看器中显示进度,就在视口下方,在您看到“设置显示...”的位置。您可以在 Abaqus 手册 > 脚本参考 > Python 命令 > 实用程序命令 > 状态命令 > 里程碑 中找到它