明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1574|回复: 6

[函数] vl-propagate函数的使用方法探讨?

[复制链接]
发表于 2014-11-28 11:33 | 显示全部楼层 |阅读模式
5明经币
    (vl-propagate 'symbol)
功能
    将变量的值复制到所有打开的文件名称空间(并在当前 AutoCAD 任务中打开的所有后续图形中设置它的值)。
说明
参数 symbol 为符号,指定 AutoLISP 变量。
返回值:
未确定。
样例:
命令:(vl-propagate 'diameter)
nil

从以上说明中,是否可以说明一旦完成(vl-propagate 'diameter)函数,后续打开的CAD文件中,diameter都不为nil?

我的问题是,下面的代码在加入启动组后,无论打开多个少CAD文件,在F2文本窗口中,看不到(Princ "\n我活着")运行的结果?
(if (not checkall20131205)
  (progn
    (vl-load-com)
    (setq checkall20131205 "checkall20131205")
    (vl-propagate 'checkall20131205)
  )
  (Princ "\n我活着")
)


望高手能指点一下,上面的代码只是例子,本意是想实现在首次打开CAD时运行自检代码,然后使用vl-propagate 来保存一个值,后续打开其它CAD文件时,当检查到已经自检过了,就不需要再自检了。但以上代码说明这个想法不能实现。




最佳答案

查看完整内容

那就说明在后续打开的CAD文件中,vl-propagate 是最后才复值!采用黑板变量可以这样写!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-11-28 11:33 | 显示全部楼层
本帖最后由 Gu_xl 于 2014-11-28 14:15 编辑

那就说明在后续打开的CAD文件中,vl-propagate 是最后才复值!采用黑板变量可以这样写!
  1.    (vl-load-com)   
  2. (if (not (vl-bb-ref 'checkall20131205))
  3.   (progn
  4.      (vl-bb-set 'checkall20131205 "checkall20131205")
  5.   )
  6.   (Princ "\n我活着")
  7. )
回复

使用道具 举报

发表于 2014-11-28 11:52 | 显示全部楼层
采用黑板变量就可以了吧 ,打开文件时vl-bb-ref获取一个已检查文档列表,如果列表中没有自身就执行所需功能并向列表中加入已检查文档名称vl-bb-set,如果列表中已有则放弃执行。
回复

使用道具 举报

 楼主| 发表于 2014-11-28 11:57 | 显示全部楼层
vectra 发表于 2014-11-28 11:52
采用黑板变量就可以了吧 ,打开文件时vl-bb-ref获取一个已检查文档列表,如果列表中没有自身就执行所需功能 ...

(vl-bb-ref 'checkall20131205)
(if (not checkall20131205)
  (progn
    (vl-load-com)
    (setq checkall20131205 "checkall20131205")
    (vl-bb-set 'checkall20131205 checkall20131205)
    (Princ "\n已保存")
  )
  (Princ "\n我活着")
)

这样写还是每次都显示“已保存”,您能把具体代码写一下吗?
回复

使用道具 举报

发表于 2014-11-28 13:32 | 显示全部楼层
革天明 发表于 2014-11-28 11:57
(vl-bb-ref 'checkall20131205)
(if (not checkall20131205)
  (progn

(if checkall20131205
  (Princ "\n我活着!")
  (progn
          (setq checkall20131205 (vla-get-ActiveDocument (vlax-get-acad-object)))
(vl-propagate 'checkall20131205)
    (Princ "\n已保存")
  )
)

评分

参与人数 1明经币 +1 收起 理由
革天明 + 1 虽然代码不能达到期望功能,但还是谢谢你!

查看全部评分

回复

使用道具 举报

发表于 2014-11-28 14:15 | 显示全部楼层
Gu_xl 发表于 2014-11-28 14:13
那就说明在后续打开的CAD文件中,vl-propagate 是最后才复值!采用黑板变量可以这样写!

原来不是我理解的意思呀...
回复

使用道具 举报

 楼主| 发表于 2014-12-1 21:23 | 显示全部楼层
谢谢楼上两位的回答,我之前一直在使用vl-propagate来保存跨文档的变量,以前也没有检查过,之前的代码也能正常运行,现在尝试了很多次vl-propagate就是不能像黑板那样的保存变量供后续文档打开时检查,谢谢你们了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 16:27 , Processed in 0.331649 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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