我在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中?如何实现呢?
如何在vba中获取AUTOCAD cal 命令的返回值?
答案:2 悬赏:50 手机版
解决时间 2021-03-04 15:07
- 提问者网友:杀手的诗
- 2021-03-04 03:01
最佳答案
- 五星知识达人网友:毛毛
- 2021-03-04 03:17
用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语句,凑合吧。我用中英文搜了好久都没能找到满意的答案,还望高手指点!
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语句,凑合吧。我用中英文搜了好久都没能找到满意的答案,还望高手指点!
全部回答
- 1楼网友:人類模型
- 2021-03-04 04:53
搜一下:如何在vba中获取AUTOCAD cal 命令的返回值?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯