Gerber Accumark 二次开发环境搭建
Gerber Accumark 的二次开发主要支持 VBA (Visual Basic for Applications) 和 C# (.NET) 两种主流语言。VBA 适合快速编写宏和简单自动化脚本,直接集成在软件内部;C# 则适用于开发独立的外部插件、复杂数据交互及高性能计算模块 。
- 开发环境配置对比
| 开发语言 | 适用场景 | 核心依赖/工具 | 配置关键步骤 |
| :--- | :--- | :--- | : |
| VBA | 内部宏命令、简单样板生成、批量打印、基础数据导出 | AccuMark 内置编辑器、Microsoft Office VBA 引用 | 1. 打开 AccuMark,进入 Utilities -> Macro 编辑器。
-
在引用列表中添加
AccuMark Type Library(通常为amk.tlb或类似 COM 组件)。 -
直接编写代码并在软件内运行调试 。 |
| C# | 外部独立程序、复杂算法排料、ERP/MES 系统对接、自定义 UI 界面 | Visual Studio (2019/2022)、.NET Framework (通常需 4.7+)、AccuMark COM Interop | 1. 安装 AccuMark SDK 或确保主程序已注册 COM 组件。
-
VS 新建项目,右键"添加引用" -> "COM" ->选择
Gerber AccuMark x.x Type Library。 -
生成 Interop 程序集 (
Interop.AccuMark.dll) 以便强类型调用 。 | -
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(裁床)展开。开发者可通过这些对象实现对样板几何数据的读写、排料逻辑控制及生产数据管理 。
- 核心 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 使用 。 |
- 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}");
}
}
关键技术注意事项
- 坐标系与单位归一化:AccuMark 内部单位通常为毫米或英寸,而在进行 DXF/AAMA 转换时,必须严格执行单位归一化处理,避免因单位不一致导致的裁片尺寸错误 。
- 曲线精度控制:API 获取的样片轮廓包含 B-Spline 曲线信息。在转换为其他格式(如用于 AI 训练或第三方切割)时,需进行重拟合处理,确保弦高误差控制在 0.01mm 以内,以保证切割精度 。
- COM 内存管理 :在使用 C# 调用 COM 接口时,务必在操作结束后显式调用
Marshal.ReleaseComObject并触发 GC,防止因 AccuMark 进程驻留内存导致软件卡顿或崩溃 。 - 数据安全与稳定性:在进行批量数据写入或删除操作前,建议先通过 API 锁定项目或建立备份机制,防止并发操作导致的数据损坏 。