经常使用Abaqus的人都知道,从编程语言角度来说,常见的Abaqus二次开发使用的是Fortran语言和Python语言。Fortran可以用来开发子程序,Python则是用来开发插件程序。
我们通常所说的开发插件程序,一般是指开发内核程序。很多时候,可以利用自动生成的rpy文件,对它适当修改,比如添加判断、循环等语句,即可得到一套内核脚本。如果配合使用RSG对话框生成器,能够生成带有对话框界面的插件程序。重启Abaqus之后,在Plug-ins菜单中即可找到,使用起来十分方便。
我们在“工作目录-abaqus_plugins”下,可以找到三个脚本文件,比如:
第一个是内核脚本,它直接以我们输入的名称为命名。
第二个是插件程序GUI脚本,通常是以DB.py结尾的文件,它包含了各个控件和布局管理器,将我们在RSG对话框生成器中制作出的对话框,以脚本的形式自动生成。
第三个是以_plugin.py结尾的文件,它是注册脚本,主要作用是初始化控件关键字,检查数据的合法性,并将插件注册到Plug-ins菜单中,它也是由RSG对话框生成器自动生成的。我们通常在Plug-ins菜单下打开插件时,先调用的就是这个注册脚本,它能够自动调用xxxDB.py对话框文件。
有时还会出现pyc文件,比如:
它是怎么出现的呢?当一个脚本中导入一个模块的时候,会将该模块的脚本生成pyc文件,这是python为了提高解析速度,对作为模块的py文件先作一个类似编译的行为,自动生成相应的pyc文件。当再有其他脚本导入这些模块时,python就不用再重新解析py文件,而是读入pyc文件就可以了,这是因为pyc文件是二进制文件,运行的速度比较快。pyc文件用记事本打开是一堆乱码,用代码编译器打开则是一堆数字,无法编辑。当我们不想让pyc文件出现,比如脚本A.py导入了脚本B,可以打开脚本A.py,在开头添加两行代码:
import sys
sys.dont_write_bytecode = True
这样,脚本A就不会对导入的所有脚本进行预编译,也就不会产生B.pyc。但如果脚本A被其他脚本导入,仍会自动产生A.pyc文件。
由此看来,插件程序GUI脚本和注册脚本也是Abaqus二次开发的一种。
实际上,Abaqus的二次开发并不仅仅局限于此,利用Python还可以对Abaqus主窗口的GUI进行二次开发。
顾名思义,Abaqus主窗口的GUI二次开发,是针对主窗口的图形界面进行开发。平时我们使用Abaqus,都是在菜单、工具条、模块、以及左侧的工具箱中,选择菜单项或图标按钮进行操作。
这些菜单项或图标按钮都是Abaqus主窗口GUI的组成部分。
对主窗口的GUI进行二次开发,就是对菜单、工具条、模块、以及左侧的工具箱进行开发。
如何对Abaqus主窗口GUI进行二次开发呢?
我们在开发内核程序时,脚本开头都会有from abaqus import *,这样可以使用各种内核方法。
而在开发主窗口GUI(以及插件程序GUI)时,脚本开头也都会有from abaqusGui import *,导入了abaqusGui模块。abaqusGui就是Abaqus GUI Toolkit,也称为Abaqus GUI工具包,它是FOX GUI Toolkit的扩展。
FOX GUI Toolkit是一个基于C++的可以进行GUI开发的工具包,含有丰富的窗口小部件和布局管理器。Abaqus GUI Toolkit在FOX GUI工具包的基础上进行了扩展,可让我们创建、修改和扩展Abaqus / CAE图形用户界面(GUI)的功能。如果对FOX GUI Toolkit有兴趣,可以访问他们的网站:http://www.fox-toolkit.org/。同时它也是面向对象的、与平台无关的GUI开发工具包。
正是由于FOX GUIToolkit是面向对象的,所以Abaqus以及我们可以通过继承的方式,很轻易地拓展已有的功能。
主窗口GUI和插件程序GUI的开发,用的都是Abaqus GUI Toolkit。两者是紧密相连的。自上而下来看,整体的开发流程是:
第一步、AFXApp:创建一个Abaqus的应用程序。
第二步、AFXMainWindow:注册标准的和自定义的工具集,以及注册标准的和自定义的模块。
第三步、Modules/Toolsets:自定义模块和工具集。在这一步中,我们就可以把集中在Plug-ins菜单下的插件程序做成图标按钮,分别放置到我们期望的地方。
第四步、Menu/Icons:修改、增加菜单和定义图标。
第五步、Modes:负责收集用户输入的参数,以及处理命令的模式。
第六步、Forms/Procedures:这是包含在第五步的modes中的,Modes中包含了Forms模式和Procedures模式。
第七步、Dialogs:创建对话框。
第八步、Layout Managers:在对话框中把各个控件进行布局。
第九步、Widgets:创建各个控件,比如单复选按钮、下拉列表等。
从这九个步骤可以看出,第一步到第四步是主窗口GUI的二次开发,后面五步是插件程序GUI的开发。
Abaqus主窗口GUI的二次开发有什么作用呢?
当插件程序只有少数几个时,我们可以在Plug-ins菜单下很方便地找得到。但随着工作或学习的积累,插件程序会渐渐增多,以至于可能会变成这样:
随着插件程序越来越多,它们的功能和分类可能也都不相同,如果都拥挤在一个下拉菜单中,我们可能无法快速找到想要的插件程序。时间长了,有时还会忘记一些不常用的插件。
和Abaqus中各个图标按钮一样,我们能不能也把这些插件程序转换成自己喜欢的图标按钮呢?
把它们分类后,这些图标能不能分别放到菜单栏、工具条和左侧的工具箱中呢?
当切换到某个模块时,能不能自动弹出我们想要的的插件图标呢?
为了应对某种需要,能不能单独创建一个新模块,在这个模块中尽情地放入各种插件图标呢?
甚至哪怕只有一个插件程序,能不能也把它转为图标按钮,添加到已有的工具条中呢?
能!
通过对Abaqus主窗口GUI的二次开发,能够实现这些功能!
下面的主窗口,就是正是针对这些需求开发出来的。
能够看到,现在的Abaqus主窗口中,出现很多没见过的图标按钮,新建了一些菜单,增添两个新的工具条,已有的工具条中添加了图标,工具箱中也有新的图标按钮;甚至还自定义了一个新的Beam Module模块,模块中有专门的图标;切换到New Step模块时,则会自动调出新的球类图标按钮。
这样充满个性的Abaqus主窗口,是如何开发出呢?其实是这几个脚本共同打造出来的。
3个文件夹(工作目录、图标和插件程序)、9个脚本和1个bat文件
这9个脚本文件,对应上面九步流程中的第一步到第四步:
第一步、AFXApp,是启动脚本,对应的是newApp.py。它负责创建一个主窗口,并启动。
第二步、AFXMainWindow是注册脚本,对应的是mainWindow.py。脚本中注册了各种工具集和模块,其中包括Abaqus自带的,以及我们自己的插件程序。
第三步、Modules/Toolsets是自定义模块和工具集脚本,文件夹中的其他7个脚本都与之相关。在这些脚本中,依照不同的情况,分别把插件程序转变为图标按钮,并放置到各个所需的地方。
第四步、Menu/Icons是定义菜单和图标。它们都融合在第三步中,在各个脚本中已经创建、修改好了菜单和图标了。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删