乐于分享
好东西不私藏

ANSA二次开发插件分发指南:Plugin Packager与Installer实战

ANSA二次开发插件分发指南:Plugin Packager与Installer实战

ANSA二次开发插件分发指南:Plugin Packager与Installer实战

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

本文将以实际工程中的 ansatools 插件为例,详细讲解 Plugin Packager 与 Plugin Installer 的标准工作流。


一、 插件核心文件结构规范

一个可被ANSA识别的插件由两部分组成:

  1. 1. .ppl 描述文件:插件的“身份证”,定义元数据、主程序路径及Ribbon按钮映射。
  2. 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. 1. 打开工具:在ANSA界面进入 Ribbon > Tools > Development > BETA Packager Installer,点击左侧 Packager
  2. 2. 选择应用类型:在向导中选择 Plugin(对应 Plugin Packager)。
  3. 3. 加载描述文件:点击 Browse 选择 ansatools.ppl
  4. 4. Modules Selection(模块配置)
    • • Root Directory:选择包含 ansa_tools_module.py 的文件夹根路径。
    • • 勾选需要编译加密的模块(生成 .pyb 保护源码)。
    • • 确认 Main Module 已自动识别为 ansa_tools_module.py
  5. 5. Documents & Scripts(可选)
    • • 可添加说明文档目录、插件图标(将显示在 Custom > Plugins 选项卡)。
    • • 配置 Pre/Post 安装脚本(如环境检查、权限配置等,本例无需)。
  6. 6. 填写元数据:设置唯一的 Package Name(如 awp_ansatools_v1.0),选择 .bpkg 输出路径,点击 Finish 生成。

✅ 完成后,您将获得 awp_ansatools_v1.0.bpkg 文件。


三、 使用 Plugin Installer 安装插件

其他用户或测试机获取 .bpkg 后,可通过 Plugin Installer 实现一键部署,无需手动复制文件或修改环境变量。

📥 操作步骤:

  1. 1. 启动安装器:在 BETA Packager Installer 中切换至 Installer 页签,或打开 Plugin Manager 点击 Install...
  2. 2. 选择包文件:加载 awp_ansatools_v1.0.bpkg,系统自动识别为 Plugin 类型并弹出安装向导。
  3. 3. Package Information:核对插件名称、版本、作者等信息。
  4. 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. 5. 完成安装:确认路径后点击 Install。插件将自动注册至 Plugin Manager 列表。
  6. 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') 动态拼接,避免打包后绝对路径失效。
静默部署
支持 No-GUI 批处理。通过 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排版。