【问题标题】:Loading (and executing) a lisp-file in autocad using .NET使用 .NET 在 AutoCAD 中加载(和执行)一个 lisp 文件
【发布时间】:2013-07-03 13:14:05
【问题描述】:

我目前正在将一些旧的 AutoCAD 插件从 VBA 重写为 VB.NET。事实证明,所述插件的一个(相当大的)部分是在 LISP 中实现的,我被告知不要这样做。所以问题变成了在 .NET 的 AutoCAD 中运行 LISP 代码。现在,网上有一些资源解释了这样做的必要过程(如this one),但他们都认为lisp 文件/函数已经加载是理所当然的。我目前正在挠头试图弄清楚如何转换的 VBA 函数是 "(LOAD ""<file>"")",并且脚本的构建方式是在加载时自动执行(它是一个简单的脚本,不注册功能,只是从头到尾运行并做到这一点)。

所以我的问题是。如何从 .NET 插件加载(并因此执行)AutoCAD 中的 lisp 文件?

【问题讨论】:

  • 试试Autodesk.AutoCAD.Internal.AcadTaskDialogs.AutoLISPLoadSettingsAutodesk.AutoCAD.Internal.Utils.RegisterLispCommand(string, string)
  • 关于您的问题,我确实有些不明白。您的 VBA 代码是否调用 lisp 文件???如果是这样,lisp 文件是否已经加载?如果是这样,它们也将已经加载了 .NET。如果没有,VBA 是否加载 lisp 文件???如果是这样,请发布这样做的 VBA 行。
  • 如果我能理解你的旧插件中加载了什么内容会更容易。
  • @Daniel 我确实发布了它(至少或多或少)。 VBA 脚本通过发出ThisDrawing.SendCommand("(LOAD ""<lisp-file>"")") 来加载(并执行)lisp 脚本。
  • 好的...现在,当您说脚本“自动执行”时,您的意思是,当 autocad 打开时?或者当文档打开时?还是您的意思是当 vba 调用 load 时 lisp 脚本会自行执行?

标签: vb.net autocad autocad-plugin autolisp


【解决方案1】:

好的,有两种方法可以通过 .NET 来sendcommand

您首先需要了解的是ThisDocument 在.NET 中不存在。 ThisDocument 是编写 VBA 代码的文档,但由于您的插件与文档无关,因此它是独立的,您必须从 Application 对象中获取文档。

您通过以下方式访问应用程序:

Autodesk.AutoCAD.ApplicationServices.Application

如果您想将其转换为与 VBA 中相同的 Application 对象,具有相同的方法和函数

using Autodesk.Autocad.Interop;
using Autodesk.Autocad.Interop.Common;

AcadApplication App = (AcadApplication)Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication;

第一个应用程序有MdiActiveDocument,您可以从那里调用Editor并发送书面命令,或者如其他答案所述调用SendStringToExecute

AcadApplication 具有ActiveDocument(一个行为与 VBA 中完全相同的 AcadDocument 对象)。 该文档将具有与您的 VBA 相同的 SendCommand,使用方式与在 VBA 中的相同。

如果您能更好地解释自动执行部分,我也可以提供帮助。

【讨论】:

  • 啊,看来我遗漏了问题的重要部分。问题是 lisp 代码执行后,我需要继续运行 .NET 代码。我通过创建一个充当回调的<LispFunction> 并使用字符串(load <file>)\r(myCallbackFunc) 运行SendStringToExecute 来“解决”它(不是一个漂亮的解决方案)。
  • 虽然您的回答实际上回答了问题,但我将其标记为已解决。
猜你喜欢
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
相关资源
最近更新 更多