除了内核程序,Abaqus还能这样做二次开发

经常使用Abaqus的人都知道,从编程语言角度来说,常见的Abaqus二次开发使用的是Fortran语言和Python语言。Fortran可以用来开发子程序,Python则是用来开发插件程序。

我们通常所说的开发插件程序,一般是指开发内核程序。很多时候,可以利用自动生成的rpy文件,对它适当修改,比如添加判断、循环等语句,即可得到一套内核脚本。如果配合使用RSG对话框生成器,能够生成带有对话框界面的插件程序。重启Abaqus之后,在Plug-ins菜单中即可找到,使用起来十分方便。

我们在“工作目录-abaqus_plugins”下,可以找到三个脚本文件,比如:

无标题2.png

第一个是内核脚本,它直接以我们输入的名称为命名。

第二个是插件程序GUI脚本,通常是以DB.py结尾的文件,它包含了各个控件和布局管理器,将我们在RSG对话框生成器中制作出的对话框,以脚本的形式自动生成。

第三个是以_plugin.py结尾的文件,它是注册脚本,主要作用是初始化控件关键字,检查数据的合法性,并将插件注册到Plug-ins菜单中,它也是由RSG对话框生成器自动生成的。我们通常在Plug-ins菜单下打开插件时,先调用的就是这个注册脚本,它能够自动调用xxxDB.py对话框文件。

有时还会出现pyc文件,比如:

捕获.png

它是怎么出现的呢?当一个脚本中导入一个模块的时候,会将该模块的脚本生成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。两者是紧密相连的。自上而下来看,整体的开发流程是:

 

流程.png

第一步、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菜单下很方便地找得到。但随着工作或学习的积累,插件程序会渐渐增多,以至于可能会变成这样: 

帖子图片.png

随着插件程序越来越多,它们的功能和分类可能也都不相同,如果都拥挤在一个下拉菜单中,我们可能无法快速找到想要的插件程序。时间长了,有时还会忘记一些不常用的插件。

和Abaqus中各个图标按钮一样,我们能不能也把这些插件程序转换成自己喜欢的图标按钮呢?

把它们分类后,这些图标能不能分别放到菜单栏、工具条和左侧的工具箱中呢?

当切换到某个模块时,能不能自动弹出我们想要的的插件图标呢?

为了应对某种需要,能不能单独创建一个新模块,在这个模块中尽情地放入各种插件图标呢?

甚至哪怕只有一个插件程序,能不能也把它转为图标按钮,添加到已有的工具条中呢?

能!

通过对Abaqus主窗口GUI的二次开发,能够实现这些功能!

下面的主窗口,就是正是针对这些需求开发出来的。

能够看到,现在的Abaqus主窗口中,出现很多没见过的图标按钮,新建了一些菜单,增添两个新的工具条,已有的工具条中添加了图标,工具箱中也有新的图标按钮;甚至还自定义了一个新的Beam Module模块,模块中有专门的图标;切换到New Step模块时,则会自动调出新的球类图标按钮。 

无标题.png

无标题1.png

这样充满个性的Abaqus主窗口,是如何开发出呢?其实是这几个脚本共同打造出来的。

捕获1.png

3个文件夹(工作目录、图标和插件程序)、9个脚本和1个bat文件

这9个脚本文件,对应上面九步流程中的第一步到第四步:

第一步、AFXApp,是启动脚本,对应的是newApp.py。它负责创建一个主窗口,并启动。

第二步、AFXMainWindow是注册脚本,对应的是mainWindow.py。脚本中注册了各种工具集和模块,其中包括Abaqus自带的,以及我们自己的插件程序。

第三步、Modules/Toolsets是自定义模块和工具集脚本,文件夹中的其他7个脚本都与之相关。在这些脚本中,依照不同的情况,分别把插件程序转变为图标按钮,并放置到各个所需的地方。

第四步、Menu/Icons是定义菜单和图标。它们都融合在第三步中,在各个脚本中已经创建、修改好了菜单和图标了。

开发出这样的脚本难不难呢?需要有什么基础知识呢?

----------  红着脸介绍我的课程 :) ----------

只要能够正常操作Abaqus,并具备python基础知识,就可以跟着《Abaqus主窗口GUI的二次开发》课程一起,开发出专属的Abaqus主窗口了。课程一共16讲,第一讲免费。

课程分为两个部分:

1、类和面向对象知识点的讲解;

2、附件中9个脚本的讲解。

视频课程中,会对脚本的每一行代码进行细致探讨,你不但能理解每个方法及参数的含义,还可掌握各个脚本的架构,以及开发思路。

跟着课程,你也能开发出独一无二的Abaqus主窗口。

课程地址:https://www.jishulink.com/college/video/c16375


Abaqus GUI二次开发三部曲:

Abaqus 主窗口GUI的二次开发

Abaqus插件程序GUI的二次开发 初、中级篇

Abaqus插件程序GUI的二次开发 高级篇

(25条)
默认 最新
评论 点赞 1
厉害👍🏻
评论 点赞 1

查看更多评论 >

点赞 33 评论 25 收藏 8
关注