ObjectARX 2026(C++)执行已注册命令的方案

最近更新于 2026-04-15 17:14

环境

  • AutoCAD Mechanical 2026
  • ObjectArx 2026
  • VS 2022

环境搭建参考:https://blog.iyatt.com/?p=21187

方案

API

virtual Acad::ErrorStatus sendStringToExecute(
    AcApDocument* pAcTargetDocument, 
    const ACHAR * pszExecute, 
    bool bActivate = true, 
    bool bWrapUpInactiveDoc = false, 
    bool bEchoString = true
) = 0;

这个函数用于将命令字符串发送到目标文档并执行。

  • pAcTargetDocument:接收输入指令的文档对象
  • pszExecute:作为输入发送并执行的指令文本
  • bActivate:指示是否激活目标文档
  • bWrapUpInactiveDoc:指示在切换活动文档时,是否将当前活动文档挂起,并在下一次 OnIdle()(空闲)时完成
  • bEchoString:指示发送的字符串是否显示在命令行中

示例

我这里实现了通过点击 List Control 报表执行对应命令,就是用这个 API 来调用已注册的命令。
file

下面是我项目中的代码片段。
curDoc() 用于获取当前打开状态的图纸对象。
②命令前加英文句点时,会调取原生命令,而不会调用用户自己定义的命令(比如用户自己写了同名命令替换 AutoCAD 的原生命令)。
③命令前加下划线时,会调用通用命令,而不是本地命令。
AutoCAD 命令注册函数时,需要传入两个命令名,cmdGlobalName 就是全球通用名,cmdLocaleName 就是本地名。
全球通用名在不同语言的 AutoCAD 中都能执行,而本地名在不同语言下有可能不同。假设直线绘制命令 Line 是通用名,在中文版 CAD 可能叫 绘制直线
我自己实现的命令是把两个命令名设为一样的,纯英文命令是最方便输入的,中文命令要用输入法效率会更低。
file
④可以在命令后加一个空格或换行符作为确认执行符号。建议使用换行符,比如下面的例子卸载插件:首先执行 ARX 命令,然后选择 U 选项,然后输入插件路径确认。输入路径这里如果使用空格的话则无效,路径输入状态下按空格会输入空格,只有用换行符才能确认。
注:acedGetAppName() 可以用于获取插件自己的文件路径。
file

ObjectARX 2026(C++)执行已注册命令的方案
Scroll to top
打开目录