【问题标题】:Interfacing AutoCAD plugin with external programAutoCAD 插件与外部程序的接口
【发布时间】:2016-08-28 19:41:42
【问题描述】:

我正在制作一个 python 应用程序来自动化 AutoCAD 中的一些任务(在特定图层中绘制特定形状并检查一些圆圈的位置)。

对于第一部分,绘图,使用 AutoCAD 互操作库很容易,因为您可以轻松地将对象放入活动文档中,而无需在 AutoCAD 上执行任何操作,甚至无需加载任何插件。但是我没有找到任何使用同一个库来检查文档中对象属性的方法。

我需要一个函数,当作为参数传递层名称时,它会返回该层中每个圆的中心列表。

现在,只需加载插件即可轻松完成。但我需要将该信息传递给 python 程序(通过 pythonnet 加载 AutoCAD 互操作库),我不知道该怎么做。

所以,总结一下,我需要:

  • 了解如何使用 AutoCAD 互操作库来检索图形信息。

  • 将 AutoCAD 插件与用 python 编写的外部应用程序连接。

有可能我打算做什么?最好的方法是什么?

【问题讨论】:

  • 您需要构建一个选择集,该选择集经过过滤以仅选择相关图层上的圆圈。然后迭代选择集并检查每个圆并获得中心点。

标签: c# python com interop autocad


【解决方案1】:

您也可以在没有 Interop 的情况下使用 AutoCAD:

  1. 您可以在 AutoCAD 中托管 WCF 服务并与之交互。抱歉,我没有免费样品(仅限我的私人解决方案,不用于发布)。 WCF 服务可以托管在acad.exeaccoreconsole.exe 中(accoreconsole.exe 2016 除外)。

  2. 您可以在 AutoCAD 中托管 PowerShell 并与之交互。这种方式的示例我发布了here

我将这些方法用于不同的情况。

【讨论】:

    【解决方案2】:

    关于这个: "将 AutoCAD 插件与用 python 编写的外部应用程序接口"

    据我了解,该插件只能通过打开的 AutoCAD 应用程序访问,因此为了与插件交互,您的应用程序必须与 AutoCAD 交互。

    我不知道这是否可以通过 Python 实现,但是使用 AutoCAD 与 C# 的互操作可以做到这一点:

    public void SendCommand(string command, params object[] args)
    {
        AcadApplication app = GetActiveApp();
        AcadDocument acDoc = app.ActiveDocument;
    
        // Without arguments
        acDoc.SendCommand("command");
    
        // With arguments
        acDoc.SendCommand("command args[2], args[1], args[2]");
    }
    

    所以你可以这样调用你的插件:

    acDoc.SendCommand("yourPluginCommandName layerName");
    

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 2015-11-28
      • 2010-10-14
      • 2015-02-20
      • 1970-01-01
      相关资源
      最近更新 更多