我目前正在将一些旧的AutoCAD插件从VBA重写为VB.NET。事实证明,所述插件的一个(相当大的)部分是在LISP中实现的,我被告知要离开它。因此问题变成了从.NET运行AutoCAD中的LISP代码。现在,有一些在线资源解释了这样做的必要过程(如this one),但所有这些资源都理所当然地认为已经加载了lisp文件/函数。我正在试图弄清楚如何转换的VBA函数是"(LOAD ""<file>"")"
,并且脚本的构建方式是它在加载时自动执行(这是一个简单的脚本,没有' t寄存器功能,只是从头到尾运行并且确实是这样。)
所以我的问题是。如何从.NET插件加载(并因此执行)autocad中的lisp文件?
答案 0 :(得分:1)
好的,有两种方法通过.NET sendcommand
。
您需要了解的第一件事是.NET中不存在ThisDocument
。
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中完成的方式相同。
如果你能更好地解释自动执行部分,我也可以提供帮助。