从C++代码运行Lisp
大家好,我想知道是否可以通过在Visual Studio中构建(运行)C++代码在AutoCAD中运行lisp。我的意思是,我可以打开AutoCAD,并行运行C++代码,并在AutoCAD中自动加载lisp吗?
我要使用的lisp是“ascpoint”,它获取一个文本文件,其中输入坐标,并在这些坐标处插入点。
任何帮助都将不胜感激。
谢谢
亚历克斯 欢迎来到CADTutor,Alex;祝贺你第一次发帖!
首先,您为什么不简单地调试一个新的AutoCAD过程?
考虑到ObjectARX(C++),比如。NET(C#、F#、VB等)编译成一个程序集,该程序集需要-加载到AutoCAD的活动会话(进程)中。。。做你想做的事对一个男人来说是不可能的。NET assembly(因为没有这样的NETUNLOAD CommandMethod/LispFunction方法),但是,我怀疑您的ARX*可能*能够,因为它可以随后被ARXUNLOAD-ed。
我认为您的VS项目可能需要获取活动的AutoCAD进程,并使用COM API调用LISP(不确定ARX为这类事情公开了哪些API?)。
我通常编码。NET插件,它们是在会话开始时加载的,或者是按需加载的,因此我恐怕在这里无法为您提供更多帮助,因为ObjectARX不是(目前)我所擅长的语言。我能提供的唯一其他建议是,ARX可以通过acedInvoke()方法直接调用LISP。 简而言之,答案是肯定的。您可以构建一个C#项目,该项目将打开AutoCAD或使用其已打开的现有实例,然后向其发送一个命令,该命令将加载并运行您选择的LISP程序。我总是这样做。我使用COM方法,更喜欢尽可能远离AutoCAD环境。我使用的LISP代码还读取文本文件以输入创建图形。哦,我应该提到我使用VB。净额。如果你在互联网上搜索,你会发现很多这样做的例子。它看起来像这样。为此,您需要添加对AutoCAD的引用。
Imports AutoCAD
Module LaunchAutoCAD
'**************************************************************************************************************
' LAUNCH AUTOCAD & LISP
'**************************************************************************************************************
Sub Launch_AutoCAD(ByVal DwgName As String)
Dim vAcadApp As AcadApplication
Dim vAcadDoc As AcadDocument
Dim DwgPath As String = "\\My_Path_To\Engineering\Automated Drawings\"
Dim LispPath As String = "//My_Path_To/LISPFiles/"
Try
If Process.GetProcessesByName("acad").Length > 0 Then
vAcadApp = GetObject(, "AutoCAD.Application.19")
Else
vAcadApp = New AcadApplication
End If
vAcadApp.Visible = True
vAcadApp.WindowState = AcWindowState.acMax
vAcadDoc = vAcadApp.Documents.Open(DwgPath & DwgName, True)
vAcadDoc.SendCommand("(load """ & LispPath & My_Lisp & ".lsp"" ""The load failed"") " & Cmd_To_Start_LISP_Program & Chr(13))
Catch ex As Exception
Finally
vAcadApp = Nothing
vAcadDoc = Nothing
End Try
End Sub
这段代码大约在一年前与我共享,它是为AutoCAD 13配置的。当我的项目全天候通过Internet收到请求时,它还会使AutoCAD实例保持打开状态。也许有更好的方法,但这适合我的需要。 感谢您的回复!
我不知道你所说的“简单地调试一个新的AutoCAD进程”是什么意思。不幸的是,我对这个领域有点陌生(使用Lisp和运行代码在AutoCAD中实现一些事情)。
我不坚持使用Lisp来实现我想要的。我甚至宁愿不使用它!我试图实现的是编写一段C++代码,运行后将使AutoCAD获得一个包含坐标作为输入的文本文件,并在这些坐标处插入点(无需在AutoCAD中执行任何操作)。
你能帮我朝这个方向走吗?
谢谢,
亚历克斯 嗨,比尔,
好像是我在找的!但是,你能详细说明一下我如何让它运行吗?我在网上搜索了一下,但没有成功。
谢谢
亚历克斯
我现在忙得不可开交,但要获得一个AutoCAD实例,请阅读此线程。
您应该能够在不从ObjectARX(C++)API本机调用LISP的情况下完成所需的工作。。。我是一个。NET API的家伙(C#,VB.NET),不幸的是。
FWIW-特别是如果你是AutoCAD开发新手,如果你还不擅长C++,你可以很容易地跳进C,因为它也可以做你想做的一切。
干杯
我刚刚看了这个帖子,比尔在那里的第一篇帖子正是我要找的。我只是运行它有问题。我需要知道剩下的代码是什么,需要添加哪些引用等等。
如果我能运行这些代码就太好了。
我可以使用VB。
谢谢,
亚历克斯 首先,我看到您正在运行AutoCAD 2012。我认为那个版本的数字19变为18。至于代码的其余部分,可以用许多方法来回答。使用AutoCAD和总是有多种方法。NET项目。但是,以上代码应该通过打开AutoCAD或使用其现有实例来启动。一旦您的项目执行“SendCommand”部分,它将打开您想要的任何LISP文件,然后执行它。LISP文件可以读取点的文本文件,并将其放置在模型空间中。
我认为您也可以在AutoCAD环境中执行此操作。我的项目是完全自动化的,不允许用户输入。你的设置听起来有点不同,所以你真的可以只使用C。NET,VB。NET或普通的旧LISP本身。LISP可以很容易地打开和读取文本文件。除此之外,我们还需要更多地了解您的文件格式等。。。提供建议。
对不起,我现在看到你想跑出一个点。lsp,这是一个已经存在的LISP程序。上面的代码可以指向这样一个文件,但我不清楚为什么需要使用另一个开发环境来运行它。如果您能进一步解释一下为什么需要第二个开发平台来运行这个LISP,可能会有所帮助。 账单
我试图实现的是制作一个VB代码,当我运行它时,它将读取一个包含坐标的文本文件,并在AutoCAD中在该坐标处插入一个点。我还希望它自动化,我不想在AutoCAD中做任何事情(例如键入命令)。如果你能在这方面帮助我,我将不胜感激。
另外,你能告诉我要为上面的代码添加哪些引用吗?
谢谢,
亚历克斯 很抱歉延迟回复。您需要为您的AutoCAD版本添加参考,在您的情况下,将是“AutoCAD 2012类型库”。当您添加引用时,您将在COM选项卡下找到它。
现在这个方法的问题是如果你想要VB。NET程序在AutoCAD环境中运行
您将不会使用COM引用。你可以做到这一点,因为我使用COM方法,所以我的速度不够快。我的意思是我使用VB。NET加载/打开AutoCAD,启动图形模板,然后加载并执行一个LISP文件,该文件完成所有工作。在您的情况下,LISP文件将读取文本文件并插入点。
有几个LISP文件已经在那里做这件事。李·麦克在他的网站上有一个,杰弗里·桑德斯有一个XYZImport。lsp在这方面做得很好。但是,根据您的需要定制它需要做更多的工作。我们都会尽力帮忙。发回你到目前为止所做的事情。
页:
[1]
2