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 锁定项目或建立备份机制,防止并发操作导致的数据损坏 。

参考来源

相关推荐
木井巳2 小时前
【动态规划: 线性dp】解码方法
java·算法·leetcode·动态规划·推荐算法
春弦_10 小时前
自用算法整理二
数据结构·算法·图论
hetao173383711 小时前
2026-10-22~23 hetao1733837 的刷题记录
c++·算法
java_nnnn12 小时前
LeetCode刷题滑动窗口(串联所有单词的子串+最小覆盖的子串)Java
算法·leetcode·职场和发展
Navigator_Z12 小时前
LeetCode //C - 1301. Number of Paths with Max Score
c语言·算法·leetcode
卡卡~~13 小时前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法
企业数字化笔记13 小时前
AI视频增强后画质怎么验收?插值基线、伪细节与帧间闪烁的检查方法
人工智能·算法·音视频
学逆向的14 小时前
C 内存属性
c语言·开发语言·算法·网络安全