如何在vba中获取AUTOCAD cal 命令的返回值?

2024-10-22 13:02:23
推荐回答(1个)
回答1:

用function:
Public Function GetLispSym(symbolName As String) As Variant
'Retrieves a variable from ACAD (LISP)
Dim VL As Object
Set VL = AcadApplication.GetInterfaceObject("VL.Application.16")

With VL.ActiveDocument.functions
GetLispSym = .Item("eval").funcall(.Item("read").funcall(symbolName))
End With

End Function

调用的时候注意,每次只能返回一个value(不能是list)
比如,p1是AutoCAD command line返回值(显示为(0,1,2)),那么先用car指针返回p1 list里面的第一个值作为x :
ThisDrawing.SendCommand ("(setq x (car p1))" & vbCr)
Dim Variable1 As Variant
Variable1 = GetLispSym("x")
'Variable1就等于p1里的第一个值了(=0)

至于p1的第二(=1)、三(=2)个值,用cdr和car重复上面sendcommand的语句,终归能倒腾出来后面两个值来。方法很笨,我也不会lisp语句,凑合吧。我用中英文搜了好久都没能找到满意的答案,还望高手指点!