Bill Tillman 发表于 2022-7-6 22:17:14

将变量传递给AutoCAD fro

我正在做的一个项目使用VB。NET项目读取一些数据,然后启动AutoCAD,通过使用send命令,我告诉它要加载和运行哪个LISP文件。为了简化项目,我合并了几个LISP文件。问题是,当初始LISP程序运行时,它需要一些关于它将要做什么的初始信息。所以我想知道是否有一种方法可以在AutoCAD打开模板绘图并开始使用LISP程序时将变量传递给AutoCAD。
 
天啊,现在我读到了,连我自己都搞糊涂了。基本上,AutoCAD将打开一个图形模板,然后运行一个LISP程序,该程序将依次加载其他LISP程序。。。但是第一个LISP需要知道要加载和执行哪些LISP程序。我希望可以在AutoCAD环境中设置一个变量,以便LISP可以相应地对其作出反应。

BlackBox 发表于 2022-7-6 22:28:28

嘿,比尔,
 
我认为SendStringToExecute()是你想要的,但很难确定。
 
... 有关访问AutoCAD命令行的详细信息。
 
HTH公司

BlackBox 发表于 2022-7-6 22:35:56

如果您的LISP是通过VL-ACAD-DEFUN注册的,那么您也可以调用acedInvoke()

Bill Tillman 发表于 2022-7-6 22:46:50

谢谢这是我用来启动AutoCAD的代码。。。
 

Imports AutoCAD

Module LaunchAutoCAD

   '**************************************************************************************************************
   ' LAUNCH AUTOCAD & LISP
   '**************************************************************************************************************
   Sub Launch_AutoCAD(ByVal DwgName As String, ByVal LispCMD As String)

       Dim vAcadApp As AcadApplication
       Dim vAcadDoc As AcadDocument
       Dim FrmType As String
       If Left(HatchType, 1) = "A" Then
         FrmType = "Angle"
       Else
         FrmType = "Trough"
       End If

       Dim DwgPath As String = "\\A_Long_Novell_Path\MyDrawings\"
       Dim LispPath As String = "//A_Long_Novell_Path/LISP/"

       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 & LispCMD & ".lsp"" ""The load failed"") " & LispCMD & Chr(13))
       Catch ex As Exception

       Finally
         vAcadApp = Nothing
         vAcadDoc = Nothing

       End Try
   End Sub

End Module

 
我有我的项目结构,以便LISP程序的名称和启动它的命令是相同的文本。而被调用的那个取决于通过互联网传入的请求。
 
蓝色代码行是我从VB直接与AutoCAD对话的地方。NET,就在VB之前。NET程序退出舞台左侧。我想我可以添加另一行类似的代码来设置变量,这个变量会告诉LISP程序需要加载哪些其他LISP程序。现在用这个做更多的测试。
 
我应该提到,不完全关闭AutoCAD是故意的。如果一个AutoCAD实例没有打开,这将启动一个新的AutoCAD实例,但这需要时间,而且由于来自Internet的这些请求之间的间隔可能只有几秒钟,我只需将一个实例保持24/7打开,这将大大加快速度。

BlackBox 发表于 2022-7-6 22:47:50

 
不幸的是,通过使用COM,您被降级为使用SendCommand。。。像这样简单的事情行吗?
 
伪代码:
 

         vAcadDoc = vAcadApp.Documents.Open(DwgPath & DwgName, True)
         vAcadDoc.SendCommand("(setq *YourGlobalVariable* """ & YourValueFromNet & ")")
         vAcadDoc.SendCommand("(load """ & LispPath & LispCMD & ".lsp"" ""The load failed"") " & LispCMD & Chr(13))

Bill Tillman 发表于 2022-7-6 23:00:25

是的,效果很好。现在,我可以在LISP程序启动之前将一些额外的变量传递到AutoCAD应用程序,这将有助于我的项目更加精简。

BlackBox 发表于 2022-7-6 23:03:12

 
总是乐于帮助朋友。
 
 
 
比尔,比尔,比尔,比尔。。。比尔,今天是星期几?
 

Bill Tillman 发表于 2022-7-6 23:12:50

我直到星期五早上才看到这个。我喜欢那个广告。作为一个真正的办公室隔间人物,这只骆驼变得如此可信。
 
祝你和论坛上所有其他优秀的人星期五快乐。

BlackBox 发表于 2022-7-6 23:20:24

比尔,你说得太好了,星期五快乐。
页: [1]
查看完整版本: 将变量传递给AutoCAD fro