明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 994|回复: 7

[提问] 在AutoLISP中使用ActiveX对象

[复制链接]
发表于 2015-9-7 19:44 | 显示全部楼层 |阅读模式
1. 在学习这一块的时候,得到的结果都是指针,只能机械的应用,却不能理解,如vlax-Get-Acad-Object、vla-Get-ActiveDocument、vla-Get-Layers,看多了也大体上知道是用来做什么的,如何能更好的理解这样做的目的?想在程序里去感受,但得到的结果却自己看起来也不是那么明白。比如
  1. (setq a (vlax-Get-Acad-Object))
  2. (setq b (vla-Get-ActiveDocument a))
  3. (setq c (vla-Get-Layers b))
  4. (setq d (vla-GetExtensionDictionary c))
  5. (setq e (vla-Remove d "ACAD_LAYERFILTERS"))


得到的各种指针结果看起来似乎也看得不是很明白,这块应该如何理解?

2. 同时,有一些Vla-系列的命令在《AutoLisp函数(葵花宝典).chm》里找不到,这个时候应该去哪里找寻相关信息?比如vla-GetExtensionDictionary、vla-Remove。

3. 在以下代码中:
  1. (defun C:pu ()
  2. (vl-Load-Com)
  3. (vl-Catch-All-Apply
  4. '(lambda ()
  5. (vla-Remove
  6.    (vla-GetExtensionDictionary
  7.    (vla-Get-Layers
  8.    (vla-Get-ActiveDocument
  9.    (vlax-Get-Acad-Object)
  10.    )
  11.    )
  12.    )
  13.    "ACAD_LAYERFILTERS"
  14. )
  15. )
  16. )
  17. (command "_.PURGE" "a" "*" "N")
  18. (princ "\n所有图层过滤器已经被删除。")(princ)
  19. )
vla-GetExtensionDictionary这一步开始就不太明白了,vla-GetExtensionDictionary这个得到的是图层的扩展词典吗?
vla-Remove这个命令是是排除扩展词典里的图层类信息吗?
vl-Catch-All-Apply中执行了无参数的函数lambda ()...,如果成功了反回vla-Remove后得到的结果,如果出现错误,返回一个错误对象,这里我不太明白为什么还要特别采用vl-Catch-All-Apply,函数lambda ()...有错误的可能吗?不是肯定能成功吗?
最后,对于(command "_.PURGE" "a" "*" "N")命令之前的内容,我没有看明白编程人员的目的是什么,直接这条命令不也可以运行吗?







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-9-7 20:36 | 显示全部楼层
楼主的问题问的好,我也没有真正理解到,希望大神来解答
VLA系列的命令在http://bbs.mjtd.com/thread-113573-1-1.html这里可以下载查询
发表于 2015-9-7 22:32 | 显示全部楼层
本帖最后由 Gu_xl 于 2015-9-7 22:36 编辑

打开vlide,按F1查阅VBA帮助!
查阅对象方法调用方式:方法名称前添加"VLA-"即为方法函数:VLA-XXX

查阅对象属性调用方式:属性名称前添加“VLA-Get-”即为属性调用函数:VLA-Get-xxx

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 很给力!

查看全部评分

 楼主| 发表于 2015-9-7 22:58 | 显示全部楼层
重慶崽兒 发表于 2015-9-7 20:36
楼主的问题问的好,我也没有真正理解到,希望大神来解答
VLA系列的命令在http://bbs.mjtd.com/thread-1135 ...

谢谢提供的链接,谢谢。
 楼主| 发表于 2015-9-7 23:06 | 显示全部楼层
Gu_xl 发表于 2015-9-7 22:32
打开vlide,按F1查阅VBA帮助!
查阅对象方法调用方式:方法名称前添加"VLA-"即为方法函数:VLA-XXX

找到了,谢谢。
发表于 2015-9-8 23:25 | 显示全部楼层
关于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部分的帮助和多练习
 楼主| 发表于 2015-9-9 06:32 | 显示全部楼层
llsheng_73 发表于 2015-9-8 23:25
关于vla,我也基本一头雾水,只会用些比较基本的。。。
对于很多vla对象,它有哪些属性可以被获取或者修改 ...

已经收到了,vlax-dump-Object 这个命令在看相关书中有介绍,就是你所说的这种方法。
对于lisp语言,因为非常容易理解和学习,做对于Active X这块,知识还欠缺非常一大块,需要系统性补充,这块没有lisp那样容易掌握。

谢谢了
 楼主| 发表于 2015-9-10 08:27 | 显示全部楼层
Gu_xl 发表于 2015-9-7 22:32
打开vlide,按F1查阅VBA帮助!
查阅对象方法调用方式:方法名称前添加"VLA-"即为方法函数:VLA-XXX

通过几天的学习后,重新再看一下自己一楼里的代码和你的回复,第一次理解你的回复的时候没有理解到位,现在应该算是理解到位了。为了能理解语句,对代码进行了小调整:
  1. (defun C:pu ()
  2. (vl-Load-Com)
  3.   (setq a(vla-GetExtensionDictionary
  4.    (vla-Get-Layers
  5.    (vla-Get-ActiveDocument
  6.    (vlax-Get-Acad-Object)
  7.    )
  8.    )
  9.    ))
  10.   (setq b (vlax-dump-object a t ))
  11. (vl-Catch-All-Apply
  12. '(lambda ()
  13. (setq c (vla-Remove a
  14.    
  15.    "ACAD_LAYERFILTERS"
  16. ))
  17. )
  18. )
  19. (command "_.PURGE" "a" "*" "N")
  20. (princ "\n所有图层过滤器已经被删除。")(princ)
  21. )
:有以下几个问题,还要麻烦版主解答:
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相关的内容?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-28 18:42 , Processed in 0.519703 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表