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

来源:百度知道 编辑:UC知道 时间:2024/04/30 15:20:07
我在VBA中通过sendCommand向AutoCAD发送了如下命令
ThisDrawing.SendCommand "cal ilp([1,1,1],[1,2,1],[1,1,0],[2,2,0],[1,1,2])" & vbCr

求空间直线[1,1,1],[1,2,1]与空间平面[1,1,0],[2,2,0],[1,1,2]的交点坐标,想在VBA中获取该坐标,应该如何实现呢??也就是说,利用vba调用autoCAD的CAL后,得到的结果可否返回到VBA中?如何实现呢?

用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语句,凑合吧。我用中英文搜了好久都没能找到满意的答案,还望高手指点!