在ABAQUS中操作模型时,经常需要选择边界上的元素,如果使用框选则需要将模型摆正(处于一个主视图角度),虽然ABAQUS提供了6个主视图工具按键,但实际使用中还有有一些不便的:
- ABAQUS提供的视角只是基于一个盒子的6个面,如果需要在同一个面的不同方向的视角则没有,例如ABAQUS提供了y轴向上,x轴向右的视图,但却没有x轴向上,y轴向左的视图;
- 对于较复杂的模型或模型局部,使用时还需想象需要的视角对应于ABAQUS提供的哪个视角,不太方便;
因此开发一个最近主视角的功能,在使用时在图形窗口中将模型转至一个角度后,可以将视图直接转换至与当前视角最接近的主视图,解决上述问题。
ABAQUS/CAE使用PYTHON进行二次开发,开发的主要步骤是:
- 创建一个算法文件(python源代码文件),用于执行算法逻辑,名称任意;
- 创建一个命令注册文件(python源代码文件),用于将上一步创建的算法注册进行ABAQUS中,以方便使用,名称必须以_plugin结尾;
- (可选)创建一个GUI文件(python源代码文件),用于描述对话框及界面元素,名称任意;
- 将上述三个python文件放进ABAQUS安装文件夹中的…\CAE\plugins\20xx\文件夹下;
- 重新启动ABAQUS,即可在菜单项Plug-ins菜单下或工具条中看到相应的菜单项或工具按钮。
这个功能并不需要图形界面,但为了方便,需要一个工具按键。因而创建两个文件,一个是算法文件,另一个是命令注册文件。
算法文件命名为mainViewOri.py(这个文件名是任意的),如下所示。
from abaqus import *
from abaqusConstants import *
import numpy as np
def setMainViewOri():
vp = session.viewports[session.currentViewportName]
view = vp.view
dir = np.array(view.cameraPosition) - view.cameraTarget
dir = dir / np.linalg.norm(dir)
indic = np.argmax(abs(dir))
newDir = [0,0,0]
newDir[indic] = np.sign(dir[indic])
view.setViewpoint(viewVector=tuple(newDir))
view.setValues(cameraUpVector = (1,0,0))
命令注册文件如下所示,其中registerKernelMenuButton函数用于将模块mainViewOri(参数moduleName,即算法文件名,python中使用文件名做为模块名)中的函数setMainViewOri(参数functionName,点击菜单后执行的相应python模块中的函数名)注册到一个显示名称为mainViewOri(参数buttonText)的菜单项上,这个命令可以应用于所有Modules(参数applicableModules)。
from abaqusGui import *
from abaqusConstants import ALL
toolset = getAFXApp().getAFXMainWindow().getPluginToolset()
toolset.registerKernelMenuButton(
moduleName='mainViewOri',
functionName="setMainViewOri()",
buttonText="mainViewOri",
icon=None,
applicableModules=ALL,
version='N/A',
author='N/A',
description='N/A',
helpUrl='N/A')
将上述两个文件拷至ABAQUS安装文件夹中的…\CAE\plugins\20xx\文件夹下后重启ABAQUS,将会看到如下的菜单项。
但总用菜单显然不方便,可以将其添加至工具条中,通过以下的自定义工具条创建一个工具条。
之后在Functions选项卡中找到刚创建的命令将其拖到工具条中即可。其中的图标可以在界面右下角处自定义。