获得仿真结果后,如何360°动态观察模型在不同方位的仿真结果呢?虽Abaqus自带的后处理暂无此功能,但我们可通过 python脚本来抓取不同方位的图片,然后使用MATLAB将捕获的图片制作成GIF动画。

图1
Abaqus二次开发中,有一条命令:
viewports['Viewport: 1'].view.setValues
可调整模型在视图中的不同角度显示。我们先通过__doc__方法查阅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=20angle=0for i in range(Num):angle+= 2*pi/Numsession.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'], ))

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删