将变量传递给AutoCAD fro
我正在做的一个项目使用VB。NET项目读取一些数据,然后启动AutoCAD,通过使用send命令,我告诉它要加载和运行哪个LISP文件。为了简化项目,我合并了几个LISP文件。问题是,当初始LISP程序运行时,它需要一些关于它将要做什么的初始信息。所以我想知道是否有一种方法可以在AutoCAD打开模板绘图并开始使用LISP程序时将变量传递给AutoCAD。天啊,现在我读到了,连我自己都搞糊涂了。基本上,AutoCAD将打开一个图形模板,然后运行一个LISP程序,该程序将依次加载其他LISP程序。。。但是第一个LISP需要知道要加载和执行哪些LISP程序。我希望可以在AutoCAD环境中设置一个变量,以便LISP可以相应地对其作出反应。 嘿,比尔,
我认为SendStringToExecute()是你想要的,但很难确定。
... 有关访问AutoCAD命令行的详细信息。
HTH公司 如果您的LISP是通过VL-ACAD-DEFUN注册的,那么您也可以调用acedInvoke() 谢谢这是我用来启动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打开,这将大大加快速度。
不幸的是,通过使用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))
是的,效果很好。现在,我可以在LISP程序启动之前将一些额外的变量传递到AutoCAD应用程序,这将有助于我的项目更加精简。
总是乐于帮助朋友。
比尔,比尔,比尔,比尔。。。比尔,今天是星期几?
我直到星期五早上才看到这个。我喜欢那个广告。作为一个真正的办公室隔间人物,这只骆驼变得如此可信。
祝你和论坛上所有其他优秀的人星期五快乐。 比尔,你说得太好了,星期五快乐。
页:
[1]