找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 927|回复: 11

[LISP程序]:请教秋风几个位:如何在lisp程序中增加搜索路径?

[复制链接]
发表于 2002-3-22 17:54:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
请教秋风几个位:如何在lisp程序中增加搜索路径?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-3-22 21:40:11 | 显示全部楼层
参考!!!!


  1. (defun C:SUPPORT_PATH (/            ACADOBJECT         ACADDOCUMENT
  2.                        PREF            PREF_FILES         PATH
  3.                        SUPPORTPATH
  4.                       )
  5.   (vl-load-com)
  6.   (setq ACADOBJECT (vlax-get-acad-object))
  7.   (setq ACADDOCUMENT (vla-get-activedocument ACADOBJECT))
  8.   (setq PREF (vla-get-preferences ACADOBJECT))
  9.   (setq PREF_FILES (vla-get-files PREF))
  10.   (setq PATH (vla-get-supportpath PREF_FILES));;取得原尋找路徑
  11.   (setq SUPPORTPATH (strcat PATH ";C:\\Program Files\\mdt6"));;增加尋找路徑
  12.   (vla-put-supportpath PREF_FILES SUPPORTPATH)
  13.   (princ)
  14. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-3-23 01:52:16 | 显示全部楼层
我也是这种办法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-3-24 22:32:15 | 显示全部楼层
最初由 LUCAS 发布
[B]参考!!!!

[code]
(defun C:SUPPORT_PATH (/            ACADOBJECT         ACADDOCUMENT
                       PREF            PREF_FILES         PATH
                       SUPPORTPATH
                      )
  (vl-load-com)
  (setq ACADOBJECT (vlax-get-acad-objec... [/B]


建议先检查是否具备该路径,如有,就加上,否则不用加,另外,如果把新路径作为参数来传递,就具有通用性了,代码如下:

(defun C:SUPPORT_PATH ( NEWPATH /          
ACADOBJECT         ACADDOCUMENT
PREF            PREF_FILES         PATH
SUPPORTPATH
                      )
  (vl-load-com);R14中不要此行  
  (setq ACADOBJECT (vlax-get-acad-object))
  (setq ACADDOCUMENT (vla-get-activedocument ACADOBJECT))
  (setq PREF (vla-get-preferences ACADOBJECT))
  (setq PREF_FILES (vla-get-files PREF)) ;R14中不要此行
  (setq PATH (vla-get-supportpath PREF_FILES));;取得原尋找路徑
  (if (NOT (vl-string-search NEWPATH PATH))
     (setq SUPPORTPATH (strcat PATH ";" NEWPATH));;增加尋找路徑
  )
  (vla-put-supportpath PREF_FILES SUPPORTPATH)
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-8 04:23:06 | 显示全部楼层
我在试这个程序过程中,返回的path是nil
是vla-get-files命令处出问题了。在帮助里也未能找到这个命令。
怎么解决?请高手指点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-8 23:27:04 | 显示全部楼层
最初由 zhangzg 发布
[B]我在试这个程序过程中,返回的path是nil
是vla-get-files命令处出问题了。在帮助里也未能找到这个命令。
怎么解决?请高手指点! [/B]


vla-get-files 是一个ActiveX命令,原型为vlax-get。files 是对象的属性,
vla-get 是调用对象属性的通用方法,在LISP中,为了使用面向对象的编程特征,可以调用vla-get加上“属性”来取得对象的特定属性值,而vla-put加上“属性”则为修改对象的特定属性值。在VLISP的帮助文件里,有一段为“advanced topics(高级话题) ”,包含这方面的内容。

注意了,在R14中,以上程序需要作简单的修改。改法如下:

(defun SUPPORT_PATH ( NEWPATH /
ACADOBJECT ACADDOCUMENT
PREF PREF_FILES PATH
SUPPORTPATH
)
(setq ACADOBJECT (vlax-get-acad-object))
(setq ACADDOCUMENT (vla-get-activedocument ACADOBJECT))
(setq PREF (vla-get-preferences ACADOBJECT))
(setq PATH (vla-get-supportpath PREF));;取得原尋找路徑
(if (NOT (vl-string-search NEWPATH PATH))
(setq SUPPORTPATH (strcat PATH ";" NEWPATH));;增加尋找路徑
)
(vla-put-supportpath PREF SUPPORTPATH)
(princ)
)

举例:
(support_path "c:\\")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-9 05:51:01 | 显示全部楼层
我逐句执行,当执行到
(setq PATH (vla-get-supportpath PREF));;取得原尋找路徑
提示错误: ActiveX 服务器返回错误: 未知名称: SupportPath
我的pref的数据是:#<VLA-OBJECT IAcadDatabasePreferences 01d08904>
请问该怎样解决!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-9 10:20:08 | 显示全部楼层
这段函数完全能在R14中运行,没有用到VL


(defun add_path ( dir / a b c)
  (if (and dir
           (setq c (getenv "ACAD"))               
      );and
      (progn
       ;prepare to look for 'dir' within the AutoCAD search path
       (setq a (strcase c)
             b (strcase dir)
       );setq
       (if (not (equal ";" (substr a 1 1)))
           (setq a (strcat ";" a));add a ";" in front of the string if not already present
       );if
       (if (not (equal ";" (substr a (strlen a) 1)))
           (setq a (strcat a ";")
                 c (strcat c ";");add a trailing ";" if not already present
           );setq
       );if
       (if (not (wcmatch a (strcat "*;" b ";*"))) ;is 'dir' already present in search path?
           (progn
            (setq c (strcat c dir));setq
            (setenv "ACAD" c)
           );progn
           (setq c nil)
       );if   
      );progn then
      (setq c nil)
  );if
  c
);defun add_path
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-4-9 21:58:31 | 显示全部楼层
最初由 明经通道 发布
[B]这段函数完全能在R14中运行,没有用到VL


(defun add_path ( dir / a b c)
  (if (and dir
           (setq c (getenv "ACAD"))               
      );and
      (progn
       ;prepare to look for '... [/B]


高人!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-10 00:05:27 | 显示全部楼层

如果事先知道文件所在路经,用(findfile)直接找... 

如果事先知道文件所在路经,用(findfile)直接找就行了, 问题是事先不知道你要找的文件在哪里?!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-9 19:00:17 | 显示全部楼层
不错,
(defun add_path ( dir / a b c)
(if (and dir
(setq c (getenv "ACAD"))
);and
(progn
;prepare to look for 'dir' within the AutoCAD search path
(setq a (strcase c)
b (strcase dir)
);setq
(if (not (equal ";" (substr a 1 1)))
(setq a (strcat ";" a));add a ";" in front of the string if not already present
);if
(if (not (equal ";" (substr a (strlen a) 1)))
(setq a (strcat a ";")
c (strcat c ";");add a trailing ";" if not already present
);setq
);if
(if (not (wcmatch a (strcat "*;" b ";*"))) ;is 'dir' already present in search path?
(progn
(setq c (strcat c dir));setq
(setenv "ACAD" c)
);progn
(setq c nil)
);if
);progn then
(setq c nil)
);if
c
);defun add_path

我用的也是这个!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-9 21:09:43 | 显示全部楼层
网络水手是哪位?是不是认识的哪位水手阿?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 12:50 , Processed in 0.434374 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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