在AutoLISP中使用ActiveX对象
1. 在学习这一块的时候,得到的结果都是指针,只能机械的应用,却不能理解,如vlax-Get-Acad-Object、vla-Get-ActiveDocument、vla-Get-Layers,看多了也大体上知道是用来做什么的,如何能更好的理解这样做的目的?想在程序里去感受,但得到的结果却自己看起来也不是那么明白。比如(setq a (vlax-Get-Acad-Object))(setq b (vla-Get-ActiveDocument a))
(setq c (vla-Get-Layers b))
(setq d (vla-GetExtensionDictionary c))
(setq e (vla-Remove d "ACAD_LAYERFILTERS"))
得到的各种指针结果看起来似乎也看得不是很明白,这块应该如何理解?
2. 同时,有一些Vla-系列的命令在《AutoLisp函数(葵花宝典).chm》里找不到,这个时候应该去哪里找寻相关信息?比如vla-GetExtensionDictionary、vla-Remove。
3. 在以下代码中:(defun C:pu ()
(vl-Load-Com)
(vl-Catch-All-Apply
'(lambda ()
(vla-Remove
(vla-GetExtensionDictionary
(vla-Get-Layers
(vla-Get-ActiveDocument
(vlax-Get-Acad-Object)
)
)
)
"ACAD_LAYERFILTERS"
)
)
)
(command "_.PURGE" "a" "*" "N")
(princ "\n所有图层过滤器已经被删除。")(princ)
)vla-GetExtensionDictionary这一步开始就不太明白了,vla-GetExtensionDictionary这个得到的是图层的扩展词典吗?
vla-Remove这个命令是是排除扩展词典里的图层类信息吗?
vl-Catch-All-Apply中执行了无参数的函数lambda ()...,如果成功了反回vla-Remove后得到的结果,如果出现错误,返回一个错误对象,这里我不太明白为什么还要特别采用vl-Catch-All-Apply,函数lambda ()...有错误的可能吗?不是肯定能成功吗?
最后,对于(command "_.PURGE" "a" "*" "N")命令之前的内容,我没有看明白编程人员的目的是什么,直接这条命令不也可以运行吗?
楼主的问题问的好,我也没有真正理解到,希望大神来解答
VLA系列的命令在http://bbs.mjtd.com/thread-113573-1-1.html这里可以下载查询 本帖最后由 Gu_xl 于 2015-9-7 22:36 编辑
打开vlide,按F1查阅VBA帮助!
查阅对象方法调用方式:方法名称前添加"VLA-"即为方法函数:VLA-XXX
查阅对象属性调用方式:属性名称前添加“VLA-Get-”即为属性调用函数:VLA-Get-xxx
重慶崽兒 发表于 2015-9-7 20:36 static/image/common/back.gif
楼主的问题问的好,我也没有真正理解到,希望大神来解答
VLA系列的命令在http://bbs.mjtd.com/thread-1135 ...
谢谢提供的链接,谢谢。 Gu_xl 发表于 2015-9-7 22:32 static/image/common/back.gif
打开vlide,按F1查阅VBA帮助!
查阅对象方法调用方式:方法名称前添加"VLA-"即为方法函数:VLA-XXX
找到了,谢谢。 关于vla,我也基本一头雾水,只会用些比较基本的。。。
对于很多vla对象,它有哪些属性可以被获取或者修改,有哪些方法可以作用于它,怎么用都不清楚。。。
不过好在vlisp有一个函数在程序中基本上没有任何用处,但实际上用处却相当大,那就是vlax-dump-Object
一般情况下,vla开始都会有类似(vlax-Get-Acad-Object)一句用来获取当前对象。但得到这个对象后接下来能做什么或者应该做什么?比如你的第2句(vla-Get-ActiveDocument a)获取当前cad对象的当前活动文档,但这个属性从哪里知道它的?如果不知道是肯定写不出这一句的,对吧?
这个时候vlax-dump-Object的作用可以体现出来了,在控制台运行(vlax-dump-Object a t)通常会得到很多内容,但是其实只有两部分,前边是这个对象具有的一些属性,后边是能作用于这个对象的方法以及这些方法需要的参数个数。。。
当然,知道了方法需要的参数个数其实基本上没用,因为还不知道都是些什么参数,这就需要按G版说的方法去认真查看了
但是,对于前边的属性部分,很多都可以直接通过(vla-get-属性名称 对象)这样的语句来得到,同时也可以通过(vla-put-属性名称 对象 属性值)对它进行修改
当然,更多的还是需要多看VAB部分的帮助和多练习 llsheng_73 发表于 2015-9-8 23:25 static/image/common/back.gif
关于vla,我也基本一头雾水,只会用些比较基本的。。。
对于很多vla对象,它有哪些属性可以被获取或者修改 ...
已经收到了,vlax-dump-Object 这个命令在看相关书中有介绍,就是你所说的这种方法。
对于lisp语言,因为非常容易理解和学习,做对于Active X这块,知识还欠缺非常一大块,需要系统性补充,这块没有lisp那样容易掌握。
谢谢了 Gu_xl 发表于 2015-9-7 22:32 static/image/common/back.gif
打开vlide,按F1查阅VBA帮助!
查阅对象方法调用方式:方法名称前添加"VLA-"即为方法函数:VLA-XXX
通过几天的学习后,重新再看一下自己一楼里的代码和你的回复,第一次理解你的回复的时候没有理解到位,现在应该算是理解到位了。为了能理解语句,对代码进行了小调整:(defun C:pu ()
(vl-Load-Com)
(setq a(vla-GetExtensionDictionary
(vla-Get-Layers
(vla-Get-ActiveDocument
(vlax-Get-Acad-Object)
)
)
))
(setq b (vlax-dump-object a t ))
(vl-Catch-All-Apply
'(lambda ()
(setq c (vla-Remove a
"ACAD_LAYERFILTERS"
))
)
)
(command "_.PURGE" "a" "*" "N")
(princ "\n所有图层过滤器已经被删除。")(princ)
):有以下几个问题,还要麻烦版主解答:
1. 变量A通过 (vlax-dump-object a t )得到a的属性和方法,但属性和方法里并没有 "ACAD_LAYERFILTERS"这个选项?
2. (setq b (vlax-dump-object a t ))这样得到的b值是T,实际上是没有意义吧,只能在控制台里输入 (vlax-dump-object a t )才可以得到属性与方法?
3. 对象模型那张图表,是否是用来得到下一级的属性?免去每一层去查看(vlax-dump-object a t )相关的属性与方法,直接vla-get-xxx相关的内容?
页:
[1]