作为打工人,难免要对老板或者客户汇报阶段性仿真结果,除了一些必要的云图展示、曲线以及数据外,其中还有一项比较重要的操作便是结果动画化,动画对结果趋势表达更加清晰明了,大多数情况下相比于其他形式,从感性上更能给别人较为深刻的印象。
这里的动画化表示可以将结果用AVI\MP4等视频文件展示,也可以用GIF进行展示,那么APDL里面如何制作动画呢?今日水哥解答一二,仅供参考!
目前,常见制作直接生成动画相关命令有:
Antime、Anmode、Ancntr、Anharm
同时还需配合使用一些辅助命令,如Anim、/Seg、/Anfile等
下面主要说说Antime命令的操作。
该命令比较通用,能适用于大部分情况下的动画输出,输出内容以前一步绘制的内容为准,其使用格式如下:
ANTIME, NFRAM, DELAY, NCYCL, AUTOCNTRKY, RSLTDAT, MIN, MAX
NFRAM:帧数,默认为5。
DELAY: 每帧间隔时间,默认为0.1秒。
NCYCL:循环动画周期数,仅在非用户界面模式下可用,默认为5。
AUTOCNTRKY:云图图例自动调整系数,默认为0(关闭)。
RSLTDAT:结果数据来源,0(当前载荷步数据,默认)、1(载荷步)、2(时间)。
MIN 和 MAX:分别指定动画的最小和最大值范围(根据RSLTDAT类型来定)。如果不指定,则分别默认为第一个和最后一个数据点。
关于动画的内容及一些设置,一般是在动画命令之前,用户设置好即可,比如绘制的云图类型,是否显示图例,是否显示logo等。
根数上述参数内容,动画总时间=NFARM*DELAY,如果要让动画尽量显示真实,不出现类似掉帧的情况,用户可将NFARM的值增大,在维持总时间不变的情况下,减小DELAY。
如下,绘制某框架结构的地震时程响应动画,动画由50帧组成,每帧持续时间0.2s,动画总时间10s,动画的绘制内容为整体位移云图,绘制时间为0s~5s.
/post1
!将背景变为白色
/RGB,INDEX,100,100,100, 0
/RGB,INDEX, 80, 80, 80,13
/RGB,INDEX, 60, 60, 60,14
/RGB,INDEX, 0, 0, 0,15
/REPLOT
/DIST, 1 ,1.082226,1
/REP,FAST
!绘制整体变形云图
set,last
plnsol,u,sum
!制作动画
Antime,15,0.2,,,2,0,5
运行完上述命令流,会自动在当前工作文件夹下保存视频,文件默认名称为file.avi,当然用户也可以用/anfile命令另存该动画。
/Anfile,save,kuangjia,mp4
其余命令与上述命令使用用法、参数含义都差距不大,只是作用范围不同,如Ancntr表示绘制变形云图,Anmode绘制模态振型图,Anharm绘制谐响应云图。
除上述直接出具动画之外,还可以用/SEG命令出具动画。
/SEG也即将当前绘制的云图存储到内存中,配合/Anfile命令即可生成动画。
示例:
/seg,dele
/seg,multi,kuangjia,0.1 !独立存储且不覆盖,文件名为kuangjia
/post1
!将背景变为白色
/RGB,INDEX,100,100,100, 0
/RGB,INDEX, 80, 80, 80,13
/RGB,INDEX, 60, 60, 60,14
/RGB,INDEX, 0, 0, 0,15
/REPLOT
/DIST, 1 ,1.082226,1
/REP,FAST
!绘制整体变形云图
*do,i,1,50
set,i,last
plnsol,u,sum
/replot
*enddo
/seg,off
/anfile,save,kuangjia2,avi
上述操作如果出具的帧数较多,容易卡死,因为要占用内存,不建议使用,并且无论是直接出图还是采用/SEG间接出图,免不了云图的右侧有一块空白的地方,很是碍眼,同时水哥个人总感觉帧数的质量不是特别高,有时候看起来比较模糊。
下面方法配合Python来使用可完美解决这个问题,思路类似SEG方法,也即将每一帧云图都先通过循环命令输出(直接输出的云图没有右侧的空白区域),然后使用Python的Image模块合成GIF。
步骤如下:
1、新建一个文件夹,例如此处为ANSYS9
2、打开APDL,将当前工作文件夹至于第一步创建的文件夹,读取rst文件,调整好云图视图,然后批量出图,命令如下。
*do,i,1,50
set,i*10,last
!变形放大系数为200
/DSCALE,ALL,200
/EFACET,1
!总云图
plnsol,u,sum
/replot
!保存云图
/SHOW,JPEG,,0
JPEG,QUAL,100,
JPEG,ORIENT,HORIZ
JPEG,COLOR,2
JPEG,TMOD,1
/GFILE,800,
!*
/CMAP,_TEMPCMAP_,CMP,,SAVE
/RGB,INDEX,100,100,100,0
/RGB,INDEX,0,0,0,15
/REPLOT
/CMAP,_TEMPCMAP_,CMP
/DELETE,_TEMPCMAP_,CMP
/SHOW,CLOSE
/DEVICE,VECTOR,0
!*
*enddo
出具的云图如下:
3、打开python,输入如下代码,进行合并。
from PIL import Image
import os
def create_gif(image_folder, output_gif, duration=500):
images = []
for file_name in sorted(os.listdir(image_folder)):
if file_name.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff')):
file_path = os.path.join(image_folder, file_name)
images.append(Image.open(file_path))
if images:
images[0].save(
output_gif,
save_all=True,
append_images=images[1:],
duration=duration,
loop=0
)
print(f"GIF文件已成功保存至 {output_gif}")
else:
print("文件夹中没有找到图片文件")
#######################
#合成GIF
image_folder = 'D:\ANSYS9'
output_gif =image_folder+ '\kuangjia.gif'
create_gif(image_folder, output_gif, duration=10)
由于单独出图可以控制的项目比较多,比如出图质量,Logo等,所以采用这种方法能出具质量较高,界面清爽的动画。
直接出图虽然快捷,但如果对动画质量要求比较高(特别是方案阶段需要向金主爸爸汇报时),建议采用文中的最后一种方法!
暂无评论内容