ANSA二次开发插件分发指南:Plugin Packager与Installer实战
ANSA二次开发插件分发指南:Plugin Packager与Installer实战
在ANSA二次开发中,将分散的Python脚本整合为标准化插件,并通过官方工具进行打包与分发,是提升团队协同效率、规范开发流程的核心环节。ANSA内置的 Plugin Manager 与配套的 BETA Packager Installer 工具,为开发者提供了从代码组织、加密打包到一键安装的全链路支持。
本文将以实际工程中的 ansatools 插件为例,详细讲解 Plugin Packager 与 Plugin Installer 的标准工作流。

一、 插件核心文件结构规范
一个可被ANSA识别的插件由两部分组成:
-
1. .ppl描述文件:插件的“身份证”,定义元数据、主程序路径及Ribbon按钮映射。 -
2. .py功能主模块:承载实际业务逻辑。为保持代码可维护性,推荐采用类封装 + 全局接口函数的结构。
1. 描述文件 ansatools.ppl 关键配置
import ansa, os
from ansa import constants
import beta
class plinfos:
def __init__(self):
self.title = 'ansatools1.0'
self.author = 'AWP_CAEteam'
self.hostApplication = 'ANSA'
self.minHostApplicationVersion = 'v25.0.0'
self.description = 'A set of AWP tools'
# 动态定位主模块路径(推荐写法)
dir = os.path.dirname(os.path.realpath(__file__))
self.filepath = os.path.join(dir, 'ansa_tools_module.py')
# 按钮映射:KEY为分组或标签,VALUE为(函数名, 提示, 帮助, 图标路径)
self.Buttons = {
'ansatools:::Force2Pressure': ('Force2Pressure', '', '', ''),
'ansatools:::Boom_Position_Change': ('Boom_Position_Change', '', '', ''),
# ... 其他按钮映射
}
x = plinfos()
beta.setPluginInfos(x)
2. 主模块 ansa_tools_module.py 结构示意
⚠️ 注:此处仅展示文件组织结构与接口规范,具体功能实现已省略。
"""
ANSA二次开发脚本集合模块 - 结构示意
"""
import ansa
from ansa import guitk, constants, base, kinetics
import base64, subprocess
# ==================== 工具1: 吊臂位置变更 ====================
class Boom_Position_Change_Class:
"""吊臂位置变更工具(GUI与逻辑分离)"""
@classmethod
def main(cls):
# 创建主窗口、布局控件、绑定回调
pass
@staticmethod
def _ok_pressed(w, data):
# 获取UI输入值并调用核心逻辑
pass
@staticmethod
def _boom_position_change_impl(Rot, Ext):
# 核心ANSA API调用(kinetics模块操作)
pass
def Boom_Position_Change():
"""对外暴露的入口函数(名称必须与.ppl Buttons中一致)"""
Boom_Position_Change_Class.main()
# ==================== 工具2: Contact快速创建 ====================
class con_quick_create_Class:
@classmethod
def main(cls): pass
@staticmethod
def _con_quick_create(b, data): pass
def con_quick_create():
con_quick_create_Class.main()
# ==================== 工具3 ~ N: 其他工具 ====================
# ssc2tie, tie_quick_create, mass_update, separate_group...
# 均采用相同的 Class.main() + 全局函数 暴露模式
# ==================== 模块调试入口 ====================
if __name__ == '__main__':
print("ANSA脚本集合模块加载成功")
print("可用接口: Boom_Position_Change(), con_quick_create(), ...")
📌 结构设计要点:
-
• 每个工具独立封装为一个类, main()负责UI构建,私有方法处理回调,降低耦合。 -
• 全局函数(如 def Boom_Position_Change():)作为桥梁,函数名必须与.ppl中self.Buttons的元组首元素完全一致。 -
• 避免使用硬编码绝对路径,统一通过 os.path.dirname(os.path.realpath(__file__))动态解析。 -
• 工具类推荐统一采用 @classmethod配合cls参数定义核心入口(如main()),摒弃需实例化的self方法或无法访问类状态的@staticmethod。该设计源于此类脚本本质为“功能命名空间”而非业务对象,无需创建实例即可通过类名直接调用,大幅简化调用链路;同时,@classmethod允许安全共享类级属性(如跨 UI 回调传递的entity选中集或配置参数),在保持代码轻量化与免实例化优势的同时,精准契合 ANSA 插件“即点即用、状态集中管理”的开发范式。
二、 使用 Plugin Packager 打包插件
Plugin Packager 的作用是将 .ppl 文件及其依赖的 Python 模块、文档、图标等整合为单一的 BETA Package (*.bpkg) 格式,便于跨环境分发。
🛠 操作步骤:
-
1. 打开工具:在ANSA界面进入 Ribbon > Tools > Development > BETA Packager Installer,点击左侧Packager。 -
2. 选择应用类型:在向导中选择 Plugin(对应 Plugin Packager)。 -
3. 加载描述文件:点击 Browse选择ansatools.ppl。 -
4. Modules Selection(模块配置): -
• Root Directory:选择包含ansa_tools_module.py的文件夹根路径。 -
• 勾选需要编译加密的模块(生成 .pyb保护源码)。 -
• 确认 Main Module已自动识别为ansa_tools_module.py。 -
5. Documents & Scripts(可选): -
• 可添加说明文档目录、插件图标(将显示在 Custom > Plugins选项卡)。 -
• 配置 Pre/Post 安装脚本(如环境检查、权限配置等,本例无需)。 -
6. 填写元数据:设置唯一的 Package Name(如awp_ansatools_v1.0),选择.bpkg输出路径,点击Finish生成。
✅ 完成后,您将获得 awp_ansatools_v1.0.bpkg 文件。
三、 使用 Plugin Installer 安装插件
其他用户或测试机获取 .bpkg 后,可通过 Plugin Installer 实现一键部署,无需手动复制文件或修改环境变量。
📥 操作步骤:
-
1. 启动安装器:在 BETA Packager Installer中切换至Installer页签,或打开Plugin Manager点击Install...。 -
2. 选择包文件:加载 awp_ansatools_v1.0.bpkg,系统自动识别为 Plugin 类型并弹出安装向导。 -
3. Package Information:核对插件名称、版本、作者等信息。 -
4. 选择安装路径(4种模式): 选项 路径说明 适用场景 ANSA installation plugins directory../ansa_vx.x.x/config/plugins/企业全员统一部署(需管理员权限) Existing plugin folder directory用户已创建的插件目录 已有规范目录的二次开发团队 Your .BETA plugins directory~/.BETA/ANSA/version_x.x.x/plugins/推荐 :个人使用,免权限,版本隔离 User defined directory自定义绝对路径 特殊项目管理需求 -
5. 完成安装:确认路径后点击 Install。插件将自动注册至 Plugin Manager 列表。 -
6. 生效验证:保存 ANSA GUI Settings 并重启。进入 Ribbon > Custom > Plugins,即可看到ansatools按钮组,点击即可调用对应工具。
四、 关键注意事项与最佳实践
|
|
|
|---|---|
| 依赖管理 |
.py 模块,根目录需包含 __init__.py,且模块间导入必须使用 Python 包内引用(Intra-package References),否则 Packager 会校验失败。 |
| 版本兼容 | .ppl
minHostApplicationVersion 务必严格填写。低版本ANSA加载高版本插件可能导致 API 不兼容崩溃。 |
| 路径安全 | self.filepath
os.path.join(dir, 'xxx.py') 动态拼接,避免打包后绝对路径失效。 |
| 静默部署 |
from beta import packager_installer 调用 no_gui_execute() 可实现 CI/CD 自动化打包与安装(详见官方文档 Functions' Arguments Description 章节)。 |
| 更新机制 |
.bpkg 重新安装。Installer 会自动处理旧版本文件替换与注册表更新。 |
结语
通过 Plugin Packager 与 Plugin Installer 的组合,ANSA 二次开发从“脚本拷贝”时代正式迈入“标准化应用分发”时代。规范的文件结构、清晰的接口映射配合官方打包工具,不仅能大幅降低团队维护成本,还能保障代码安全与运行稳定性。建议各CAE团队将 .bpkg 纳入版本管理(如 Git),并结合 .BETA 目录实现开发、测试、生产环境的无缝流转。
以上内容由AI排版。
夜雨聆风