首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用ObjectARX检查活动(等待)命令完成,然后使用VB或C#运行下一个命令

基础概念

ObjectARX 是 AutoCAD 的一个开发环境,它允许开发者使用 C++ 扩展 AutoCAD 的功能。通过 ObjectARX,开发者可以创建自定义命令、修改现有命令的行为、访问和操作图形数据等。

在 AutoCAD 中,命令的执行是异步的,这意味着当用户执行一个命令时,AutoCAD 并不会立即完成该命令的所有操作,而是会继续响应用户输入。这可能导致在某些情况下,下一个命令在前一个命令完成之前就开始执行,从而产生不可预测的结果。

相关优势

  • 灵活性:ObjectARX 提供了对 AutoCAD 内部机制的深入访问,使得开发者可以创建高度定制化的应用程序。
  • 性能:直接与 AutoCAD 的内部数据结构交互,可以实现高效的图形处理和数据处理。
  • 兼容性:ObjectARX 开发的应用程序通常可以在不同版本的 AutoCAD 上运行,只要这些版本支持相应的 ARX 版本。

类型

  • 命令扩展:创建新的 AutoCAD 命令或修改现有命令。
  • 实体操作:创建、修改或删除图形实体。
  • 事件处理:响应 AutoCAD 中的事件,如命令开始、命令结束等。

应用场景

  • 自动化绘图:编写脚本或程序来自动生成复杂的图纸。
  • 定制化界面:创建自定义的用户界面和工作流程。
  • 数据交换:实现与其他软件系统的数据交换和集成。

问题与解决方案

在使用 ObjectARX 检查活动(等待)命令完成时,可以使用 acedGetInput() 函数来暂停程序的执行,直到用户完成当前命令。然后,可以使用 VB 或 C# 编写代码来运行下一个命令。

示例代码(C#)

代码语言:txt
复制
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);
    }
}

示例代码(VB)

代码语言:txt
复制
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

参考链接

通过上述代码,可以在当前命令完成后运行下一个命令,确保命令执行的顺序和正确性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 曾是最流行的语言之一,Visual Basic 28年兴衰记

    这是一篇暴露年龄的文章。为什么这么说?因为现在年轻的程序员可能没有接触过当年红极一时的 Visual Basic。28 年前的 1991 年 4 月,Microsoft 发布了 Visual Basic 1.0 for Windows,次年 9 月,发布了 Visual Basic 1.0 for DOS。这在当时引起了很大的轰动,许多专家把 VB 的出现当做是软件开发史上的一个具有划时代意义的事件。以现在的眼光来看,VB1.0 版的功能其实非常弱,但它在推出时可是第一个 “可视” 的编程软件。这使得程序员欣喜之极,都尝试在 VB 的平台上进行软件创作。到了 1998 年夏天,Microsoft 发布了 VB 6,这是 VB.NET 至今仍然无法完全取代的版本。但随着.NET 的兴起,VB 开始走上下坡路。它是如何兴起的,又是如何衰落的?让我们跟着 Matthew MacDonald 的脚步笑看 VB 的风起云落吧!

    02
    领券