ObjectARX 是 AutoCAD 的一个开发环境,它允许开发者使用 C++ 扩展 AutoCAD 的功能。通过 ObjectARX,开发者可以创建自定义命令、修改现有命令的行为、访问和操作图形数据等。
在 AutoCAD 中,命令的执行是异步的,这意味着当用户执行一个命令时,AutoCAD 并不会立即完成该命令的所有操作,而是会继续响应用户输入。这可能导致在某些情况下,下一个命令在前一个命令完成之前就开始执行,从而产生不可预测的结果。
在使用 ObjectARX 检查活动(等待)命令完成时,可以使用 acedGetInput()
函数来暂停程序的执行,直到用户完成当前命令。然后,可以使用 VB 或 C# 编写代码来运行下一个命令。
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
public class Commands
{
[CommandMethod("WaitAndRunNext")]
public void WaitAndRunNext()
{
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Editor acEd = acDoc.Editor;
// 等待当前命令完成
acEd.WriteMessage("等待当前命令完成...");
acEd.FlushInputBuffer();
Application.SetSystemVariable("cmdecho", 0);
Application.WaitInput(1000);
// 运行下一个命令
acEd.WriteMessage("运行下一个命令...");
acDoc.SendStringToExecute("LINE", false, false, false);
}
}
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Public Class Commands
<CommandMethod("WaitAndRunNext")>
Public Sub WaitAndRunNext()
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acEd As Editor = acDoc.Editor
' 等待当前命令完成
acEd.WriteMessage("等待当前命令完成...")
acEd.FlushInputBuffer()
Application.SetSystemVariable("cmdecho", 0)
Application.WaitInput(1000)
' 运行下一个命令
acEd.WriteMessage("运行下一个命令...")
acDoc.SendStringToExecute("LINE", False, False, False)
End Sub
End Class
通过上述代码,可以在当前命令完成后运行下一个命令,确保命令执行的顺序和正确性。
领取专属 10元无门槛券
手把手带您无忧上云