获得仿真结果后,如何360°动态观察模型在不同方位的仿真结果呢?虽Abaqus自带的后处理暂无此功能,但我们可通过 python脚本来抓取不同方位的图片,然后使用MATLAB将捕获的图片制作成GIF动画。
图1
Abaqus二次开发中,有一条命令:
viewports['Viewport: 1'].view.setValues
session.viewports['Viewport: 1'].view.setValues.__doc__
获得其控制参数如下:
'View.setValues(<options, drawImmediately, fieldOfViewAngle, nearPlane, farPlaneMode, farPlane, width, height, projection, cameraPosition, cameraUpVector, cameraTarget, viewOffsetX, viewOffsetY, autoFit , movieMode>) -> This method modifies the \n View\n object.\n This method is not available for a \n LayerView.\n
setValues下的drawImmediately,cameraPosition和cameraUpVector是我们需要的控制参数。cameraPosition,顾名思义,是照相机的位置,由x,y,z坐标确定;cameraUpVector为照相机的指向,即拍照的方向,是一个向量。结合图1视图,要让照相机摆放的位置绕着y轴摆放,且指向y方向,因此照相机位置应该是一个圆的轨迹线,而y向便可由(0,1,0)来设定。
照相机沿着圆的轨迹线,在不同位置视角下的图片捕获并保存下来,其代码如下所示:
# -*- coding: mbcs -*-
from abaqus import *
from abaqusConstants import *
o1 = session.openOdb(name='Job-test.odb')
session.viewports['Viewport: 1'].setValues(displayedObject=o1)
session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(
variableLabel='S', outputPosition=INTEGRATION_POINT, refinement=(INVARIANT,
'Mises'), )
session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=(
CONTOURS_ON_DEF, ))
session.viewports['Viewport: 1'].odbDisplay.commonOptions.setValues(
deformationScaling=UNIFORM, uniformScaleFactor=1)
Num=20
angle=0
for i in range(Num):
angle+= 2*pi/Num
session.viewports['Viewport: 1'].view.setValues(cameraUpVector=(0, 1, 0),
cameraPosition=(120*cos(angle),40,120*sin(angle)),drawImmediately=True)
#session.viewports['Viewport: 1'].view.setValues(session.views['Iso'])
session.printOptions.setValues(reduceColors=False)
session.printToFile(fileName='frame_'+str(i),
format=PNG, canvasObjects=(session.viewports['Viewport: 1'], ))
当然获取代码最快的方式是先导入一个模型,然后旋转一下视图,之后打开.rpy文件,稍微修改一下就可以直接使用了!