Accumark二次开发环境搭建与API入门

Gerber Accumark 二次开发环境搭建

Gerber Accumark 的二次开发主要支持 VBA (Visual Basic for Applications) 和 C# (.NET) 两种主流语言。VBA 适合快速编写宏和简单自动化脚本,直接集成在软件内部;C# 则适用于开发独立的外部插件、复杂数据交互及高性能计算模块 。

  1. 开发环境配置对比

| 开发语言 | 适用场景 | 核心依赖/工具 | 配置关键步骤 |

| :--- | :--- | :--- | : |

| VBA | 内部宏命令、简单样板生成、批量打印、基础数据导出 | AccuMark 内置编辑器、Microsoft Office VBA 引用 | 1. 打开 AccuMark,进入 Utilities -> Macro 编辑器。

  1. 在引用列表中添加 AccuMark Type Library (通常为 amk.tlb 或类似 COM 组件)。

  2. 直接编写代码并在软件内运行调试 。 |

| C# | 外部独立程序、复杂算法排料、ERP/MES 系统对接、自定义 UI 界面 | Visual Studio (2019/2022)、.NET Framework (通常需 4.7+)、AccuMark COM Interop | 1. 安装 AccuMark SDK 或确保主程序已注册 COM 组件。

  1. VS 新建项目,右键"添加引用" -> "COM" ->选择 Gerber AccuMark x.x Type Library。

  2. 生成 Interop 程序集 (Interop.AccuMark.dll) 以便强类型调用 。 |

  3. C# 环境搭建代码示例 (项目配置)

在 Visual Studio 中,通过代码初始化 AccuMark 应用程序对象是开发的第一步。以下示例展示了如何实例化 AccuMark 应用并处理异常:

csharp 复制代码
using System;
using AccuMark; // 引用生成的 Interop 命名空间,具体名称视版本而定
using System.Runtime.InteropServices;

namespace AccuMarkDevDemo
{ public class AccumarkConnector
    {
        private AccuMark.Application _appInstance;

        /// <summary>
        /// 初始化并连接 AccuMark 应用程序
        /// </summary>
        public void Connect()
 {
            try
            {
                // 尝试获取正在运行的 AccuMark 实例
                _appInstance = Marshal.GetActiveObject("AccuMark.Application") as AccuMark.Application;
                
                // 若无运行实例,则创建新实例
                if (_appInstance == null)
                {
                    Type accuType = Type.GetTypeFromProgID("AccuMark.Application");
                    _appInstance = Activator.CreateInstance(accuType) as AccuMark.Application;
                    _appInstance.Visible = true; // 设置软件可见
                }                
                Console.WriteLine("AccuMark 连接成功,版本:" + _appInstance.Version);
            }
            catch (COMException ex)
            {
                Console.WriteLine($"COM 组件调用失败:{ex.Message},请检查 AccuMark 是否安装且 COM 注册正常。");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"初始化错误:{ex.Message}");
            }
        }

        /// <summary>
        /// 释放资源
        /// </summary>
        public void Disconnect() {
            if (_appInstance != null)
            {
                Marshal.ReleaseComObject(_appInstance);
                _appInstance = null;
                GC.Collect();
                GC.WaitForPendingFinalizers(); }
        }
    }
}

Gerber Accumark API 核心功能介绍

AccuMark 的 API 基于 COM 接口设计,核心对象模型围绕 Application(应用程序)、Project(项目)、Piece(样片)、Marker(排料图)和 Table(裁床)展开。开发者可通过这些对象实现对样板几何数据的读写、排料逻辑控制及生产数据管理 。

  1. 核心 API 对象与功能映射
对象层级 核心类/接口 主要功能描述 典型应用场景
Application IAmkApplication 全局入口,控制软件启动、关闭、路径设置及全局参数访问。 插件初始化、批量任务调度前的环境检查。
Project/Data IAmkProject, IAmkData 管理项目文件夹结构,访问 PDS (打版)、Marker (排料)、Model (模型) 等数据库。 自动归档样板、从 ERP 读取款号并创建对应项目目录。
Pattern (PDS) IAmkPiece, IAmkPoint 操作样片几何信息,包括点坐标、线段类型、剪口、钻位及缝份修改。 自动根据规则生成基础样板、批量修改缝份宽度、几何校验。
Marker IAmkMarker, IAmkPlacement 控制排料图创建、样片放置策略、布料利用率计算及重叠检测。 智能排料算法集成、自动输出利用率报告、限制样片旋转角度。
Output IAmkPlotter, IAmkExporter 驱动绘图仪输出或导出数据格式 (如 DXF, AAMA, ASTM)。 自动生成切割文件、转换 DXF 供其他 CAD 使用 。
  1. API 实战:创建样片与导出逻辑

以下代码演示了如何通过 C# API 访问当前项目,遍历样片并执行简单的属性读取与导出操作。此逻辑常用于数据清洗或格式转换模块 。

csharp 复制代码
using System;
using AccuMark; // 假设已引用 Gerber AccuMark Type Library

public class PatternManager
{
    private AccuMark.Application _app;

    public PatternManager(AccuMark.Application app)
    {
        _app = app;
    }

    /// <summary>
    /// 遍历指定项目下的所有样片并提取关键信息
    /// </summary>
    /// <param name="projectName">项目名称</param>
    /// <param name="styleNumber">款号</param>
    public void AnalyzePatterns(string projectName, string styleNumber)
    {
        // 获取项目对象
        var project = _app.Projects.Item(projectName);
        if (project == null) throw new Exception("项目不存在");

        // 访问 PDS (打版) 数据区
        var pdsData = project.Data["PDS"]; 
        
        // 遍历样片集合
        foreach (AccuMark.Piece piece in pdsData.Pieces)
        {
            if (piece.StyleNumber == styleNumber)
            {
                Console.WriteLine($"发现样片:{piece.Name}, 尺码:{piece.Size}");
                
                // 获取样片点数 (几何复杂度分析)
                int pointCount = piece.Points.Count;
                Console.WriteLine($" 轮廓点数:{pointCount}");

                // 检查是否有非法自相交 (需结合几何算法库辅助判断,API 提供基础坐标)
                // 此处仅为示意,实际自相交检测需遍历 Points 坐标进行计算 
                ValidateGeometry(piece);
            }
        }
    }

    /// <summary>
    /// 模拟几何校验逻辑 /// </summary>
    private void ValidateGeometry(AccuMark.Piece piece)
    {
        // 在实际开发中,此处会提取 piece.Points 的 X,Y 坐标 // 传入专门的几何引擎进行闭合检测和自相交检测,确保弦高误差 <= 0.01mm 
        Console.WriteLine($" - 正在对 {piece.Name} 进行拓扑校验...");
    }

    /// <summary>
    /// 将样片导出为 DXF 格式
    /// </summary>
    public void ExportToDxf(string outputPath)
    {
        // 调用 AccuMark 内置导出器
        // 注意:具体方法名视 SDK 版本可能略有差异,通常为 Export 或 SaveAs
        _app.ActiveDocument.Export(outputPath, AccuMark.ExportFormat.dxf);        Console.WriteLine($"DXF 已导出至:{outputPath}");
    }
}

关键技术注意事项

  1. 坐标系与单位归一化:AccuMark 内部单位通常为毫米或英寸,而在进行 DXF/AAMA 转换时,必须严格执行单位归一化处理,避免因单位不一致导致的裁片尺寸错误 。
  2. 曲线精度控制:API 获取的样片轮廓包含 B-Spline 曲线信息。在转换为其他格式(如用于 AI 训练或第三方切割)时,需进行重拟合处理,确保弦高误差控制在 0.01mm 以内,以保证切割精度 。
  3. COM 内存管理 :在使用 C# 调用 COM 接口时,务必在操作结束后显式调用 Marshal.ReleaseComObject 并触发 GC,防止因 AccuMark 进程驻留内存导致软件卡顿或崩溃 。
  4. 数据安全与稳定性:在进行批量数据写入或删除操作前,建议先通过 API 锁定项目或建立备份机制,防止并发操作导致的数据损坏 。

参考来源

相关推荐
小雉系统15 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
唐墨12319 小时前
linux kernel 比较数据大小的宏定义
linux·算法
拂拉氏20 小时前
【知识讲解-题目讲解】 统计满足K约束的子字符串数量2 (滑动窗口+前缀和+二分查找+分析)
算法·前缀和·二分查找·滑动窗口
通信小呆呆1 天前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
笑容掩饰我的失落1 天前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black1 天前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_967979121 天前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔1 天前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆1 天前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac