革天明 发表于 2014-11-28 11:33:34

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

语法(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文件时,当检查到已经自检过了,就不需要再自检了。但以上代码说明这个想法不能实现。




Gu_xl 发表于 2014-11-28 11:33:35

本帖最后由 Gu_xl 于 2014-11-28 14:15 编辑

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

vectra 发表于 2014-11-28 11:52:58

采用黑板变量就可以了吧 ,打开文件时vl-bb-ref获取一个已检查文档列表,如果列表中没有自身就执行所需功能并向列表中加入已检查文档名称vl-bb-set,如果列表中已有则放弃执行。

革天明 发表于 2014-11-28 11:57:56

vectra 发表于 2014-11-28 11:52 static/image/common/back.gif
采用黑板变量就可以了吧 ,打开文件时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我活着")
)

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

q3_2006 发表于 2014-11-28 13:32:47

革天明 发表于 2014-11-28 11:57 static/image/common/back.gif
(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已保存")
)
)

q3_2006 发表于 2014-11-28 14:15:55

Gu_xl 发表于 2014-11-28 14:13 static/image/common/back.gif
那就说明在后续打开的CAD文件中,vl-propagate 是最后才复值!采用黑板变量可以这样写!

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

革天明 发表于 2014-12-1 21:23:51

谢谢楼上两位的回答,我之前一直在使用vl-propagate来保存跨文档的变量,以前也没有检查过,之前的代码也能正常运行,现在尝试了很多次vl-propagate就是不能像黑板那样的保存变量供后续文档打开时检查,谢谢你们了!
页: [1]
查看完整版本: vl-propagate函数的使用方法探讨?