明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2456|回复: 10

[已解答] 判断ET工具是否安装

[复制链接]
发表于 2014-5-19 11:36:58 | 显示全部楼层 |阅读模式
  1. (if (>= (atof (getvar 'ACADVER)) 16.1);; "16.1" AutoCAD 2005
复制代码
能不能像这样在程序中判断ET工具是否安装?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-5-19 13:31:39 | 显示全部楼层
是否安裝了ET(findfile "acetutil.arx")

点评

正解,搞定!谢谢长老  发表于 2014-5-19 14:02
发表于 2014-5-19 15:27:51 | 显示全部楼层
来个加载 (or (member "acetutil.arx" (arx)) (and (findfile "acetutil.arx")(arxload "acetutil.arx")))

点评

谢谢E大,之前只是判断acetutil.arx是否存在,而没有判断是否加载  发表于 2014-5-19 16:20
 楼主| 发表于 2014-5-19 16:21:36 | 显示全部楼层
edata 发表于 2014-5-19 15:27
来个加载 (or (member "acetutil.arx" (arx)) (and (findfile "acetutil.arx")(arxload "acetutil.arx")))

为什么用or 而不是if ???

点评

一样的。写法不同而已。  发表于 2014-5-19 16:26
 楼主| 发表于 2014-5-19 16:33:40 | 显示全部楼层
本帖最后由 lucas_3333 于 2014-5-19 18:01 编辑
edata 发表于 2014-5-19 15:27
来个加载 (or (member "acetutil.arx" (arx)) (and (findfile "acetutil.arx")(arxload "acetutil.arx")))


  1. (or (member "acetutil.arx" (arx)) (and (findfile "acetutil.arx")(arxload "acetutil.arx"))
  2.    (progn

  1.      (Alert "Need install ET tool")
  2.    );; if
  3.   (princ)
  4. );; test


能运行了,但是好像没有判断,因为我把acetutil.arx这个删除了,程序还继续运行,这个判断没有起到作用
发表于 2014-5-19 17:03:06 | 显示全部楼层
lucas_3333 发表于 2014-5-19 16:33
我用之个是可以判断的

换成(or (member "acetutil.arx" (arx)) (and (findfile "acetutil.arx")(arxlo ...

or替代if是一种特殊用法,其中使用了or函数的“先到先得”的这种特性,但不是任何时候都可以替代的。
首先,我们要知道自己想干什么,在“如果非A就做B,否则就什么都不做”(if,then),这种情况是可以替代的,如果是“如果非A就做B,否则做C”这种“完全”的if,then,else模式下,是不可以替代的。
说说原理,or替代if的表达式写作(or A B),or函数是多个条件有也为真则为真,而且是顺序进行的,如果找到一个为真的条件就不再向下进行,这就是说,先检查“条件”A,如果“条件”A不为真,则再检查“结果”B。这里可以设想一下,这种被替代的if表达式是得到一个返回值的情况会怎样?显然or表达式就不可以了,or表达式只能得到真或假,所以,替代的另一个前提是if表达式的“结果”B是“过程作用”函数,加载(load)正是这样的函数。
 楼主| 发表于 2014-5-19 17:14:53 | 显示全部楼层
ll_j 发表于 2014-5-19 17:03
or替代if是一种特殊用法,其中使用了or函数的“先到先得”的这种特性,但不是任何时候都可以替代的。
首 ...

E大的例程是先判断有没有加载acetutil.arx, 如果没有再找到文件acetutil.arx,再加载,那现在又没有加载acetutil.arx,又没有找到acetutil.arx,即都为假,那怎么还继续?
发表于 2014-5-19 17:17:31 | 显示全部楼层
lucas_3333 发表于 2014-5-19 16:33
我用之个是可以判断的

换成

确认括号是否正确。
  1. (if (or (member "acetutil.arx" (arx)) (and (findfile "acetutil.arx")(arxload "acetutil.arx")))
  2.   (progn
  3.     (princ"test")
  4.     )
  5.   (Alert "Need install ET tool")
  6.   )


评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 谢谢E大,非常给力

查看全部评分

发表于 2014-5-19 17:29:42 | 显示全部楼层
lucas_3333 发表于 2014-5-19 17:14
E大的例程是先判断有没有加载acetutil.arx, 如果没有再找到文件acetutil.arx,再加载,那现在又没有加载ac ...

or得出的结果是真或假,并不会影响程序的继续运行,只是这两个条件都没有满足,就像if表达式的else这种结果,但这里的else是“什么都不做”。
你想听一个意见,我说,你可以这样,或者这样,否则,就“当我什么都没说”,这里的or结果为假,对程序而言,就是“什么都没说”,用if表达式时为:(if ~A B nil),就本句而言,并不影响整个程序的运行。
E大的代码还有一个函数and这个函数又和or不同,虽然也是顺序检查,但只有到条件是非时才退出,并返回假,所以,只有在findfile为真时,才会arxload。

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 讲解非常到位,谢谢长老

查看全部评分

 楼主| 发表于 2014-5-19 17:58:50 | 显示全部楼层
edata 发表于 2014-5-19 17:17
确认括号是否正确。

嗯,现在可以了,谢谢E大
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 18:11 , Processed in 0.190698 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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