找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 740|回复: 3

[求助] [求助]:怎么把某目录设置为CAD搜索目录呢

[复制链接]
发表于 2007-3-1 10:56:00 | 显示全部楼层 |阅读模式

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

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

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

  1. [FONT=courier new]
  2. ;;; 解析字符串为表(函数来自明经通道转载)
  3. ;;; ---------------------------------------------------------------------------------
  4.   (defun strParse (Str Delimiter / SearchStr StringLen return n char)
  5.     (setq SearchStr Str)
  6.     (setq StringLen (strlen SearchStr))
  7.     (setq return '())
  8.     (while (> StringLen 0)
  9.       (setq n 1)
  10.       (setq char (substr SearchStr 1 1))
  11.       (while (and (/= char Delimiter) (/= char ""))
  12.         (setq n (1+ n))
  13.         (setq char (substr SearchStr n 1))
  14.       ) ;_ end of while
  15.       (setq return (cons (substr SearchStr 1 (1- n)) return))
  16.       (setq SearchStr (substr SearchStr (1+ n) StringLen))
  17.       (setq StringLen (strlen SearchStr))
  18.     ) ;_ end of while
  19.     (reverse return)
  20.   ) ;_ end of defun

  21. ;;; 反解析表为字符串(函数来自明经通道转载)
  22. ;;; ---------------------------------------------------------------------------------
  23.   (defun StrUnParse (Lst Delimiter / return)
  24.     (setq return "")
  25.     (foreach str Lst
  26.       (setq return (strcat return Delimiter str))
  27.     ) ;_ end of foreach
  28.     (substr return 2)
  29.   ) ;_ end of defun

  30. ;;; 添加支持文件搜索路径
  31. ;;; ---------------------------------------------------------------------------------
  32. ;;; note:  第二个参数如果为真, 插最前,否则插最后
  33. ;;;        
  34.   (defun AddSupportPath (PathToAdd isFirst / supportlist)
  35.     (if        (not
  36.           (vl-string-search
  37.             (strcase (strcat pathToAdd ";"))
  38.             (strcase (strcat (getenv "ACAD") ";"))
  39.           )
  40.         )                                ; 保证不重复添加
  41.       (progn
  42.         (setq supportlist (strparse (getenv "ACAD") ";"))
  43.         (setq supportlist
  44.                (vl-remove-if-not
  45.                  'vl-file-directory-p
  46.                  supportlist
  47.                )
  48.         )                                ; 移除不存在的文件夹
  49.         (if isFirst
  50.           (setq supportlist (cons PathToAdd supportlist))
  51.           (setq supportlist (append supportlist (list PathToAdd)))
  52.         )
  53.         (setenv "ACAD" (strUnParse supportlist ";"))
  54.       )
  55.     )
  56.   )
  57. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-3-1 22:45:56 | 显示全部楼层
:)
谢谢秋枫版主提供代码。
版主的代码应该考虑的因素比较多的了。

为了好好学习,也在网上找了一下资料,好像大概都是两种写法,setenv和vla-put-supportpath

学习作笔记~

[AcadX.com]的代码,可能年代也挺久的,和秋枫版主的类似

  1. (defun addSP (dir pos / tmp c lst)
  2.   (setq tmp ""
  3.         c -1
  4.   )
  5.   (if (not (member (strcase dir) (setq lst (mapcar
  6.                                              'strcase
  7.                                              (parse (getenv "ACAD") ";")
  8.                                            )
  9.                                  )
  10.            )
  11.       )
  12.     (progn
  13.       (if (not pos)
  14.         (setq tmp (strcat (getenv "ACAD") ";" dir))
  15.         (mapcar
  16.           '(lambda (x)
  17.              (setq tmp (if (= (setq c (1+ c))
  18.                               pos
  19.                            )
  20.                          (strcat tmp ";" dir ";" x)
  21.                          (strcat tmp ";" x)
  22.                        )
  23.              )
  24.            )
  25.           lst
  26.         )
  27.       )
  28.       (setenv "ACAD" tmp)
  29.     )
  30.   )
  31.   (princ)
  32. )

  33. (defun parse (str delim / lst pos)
  34.   (setq pos (vl-string-search delim str))
  35.   (while pos
  36.     (setq lst (cons (substr str 1 pos) lst)
  37.           str (substr str (+ pos 2))
  38.           pos (vl-string-search delim str)
  39.     )
  40.   )
  41.   (if (> (strlen str) 0)
  42.     (setq lst (cons str lst))
  43.   )
  44.   (reverse lst)
  45. )
  46. ;  Arguments : A folder path and the position at which to insert it. (0 based.)
  47. ;  Here's an example to add a support folder :
  48. (addSP "c:\\afralisp" 3)


John Laidler ,也用setenv函数,没有选择位置项

  1. ;;; John Laidler  
  2. ;;; [url]http://groups.google.com/group/autodesk.autocad.customization/browse_thread/thread/d1072d257e2d2174/4[/url]

  3. b0851cbad83d142?lnk=gst&q=add+support+path&rnum=4#4b0851cbad83d142        
  4. (defun CS:AddSupportPath (dir / tmp Cpath)
  5.   (vl-load-com)
  6.   (setq Cpath (getenv "ACAD")
  7.         tmp (strcat ";" dir ";")
  8.   )
  9.   (if (not (vl-string-search dir cpath))
  10.     (setenv "ACAD" (strcat Cpath ";" dir))
  11.   )
  12.   (princ)
  13. )

  14. (CS:ADDSUPPORTPATH  "c:\\b")


下面三个是theswamp找到的函数
MP,只用一句话,是vla函数

  1. ;;;[MP]
  2. (defun _AddSupportPath ( path / files )
  3.     (vla-put-supportpath
  4.         (setq files
  5.             (vla-get-files
  6.                 (vla-get-preferences
  7.                     (vlax-get-acad-object)
  8.                 )
  9.             )
  10.         )
  11.         (strcat
  12.             (vla-get-supportpath files) ";"
  13.             path
  14.         )   
  15.     )
  16. )

  17. (_addsupportpath "c:\\3")


Jeff_M和kerry Brown都是为了一个问题写的,希望一次加多个子目录

  1. (defun c:ldp (/ FilePrefs addEnviron EnvironBase acadEnviron)
  2.   (setq FilePrefs (vla-get-files (vla-get-preferences
  3.                                                       (vlax-get-acad-object)
  4.                                  )
  5.                   )
  6.   )
  7.   (setq acadEnviron (vla-get-supportpath FilePrefs))
  8.   (setq EnvironBase "M:\\_Cad Support\\AutoCAD 2004\\2004dannyCAD\\MENU\")
  9.   (setq addEnviron '("Area" "Blocks"
  10.          "Dimensions" "Layers"
  11.          "Linetypes" "Plotting"
  12.          "Settings" "Shortcuts"
  13.          "Text"
  14.         );;;add any others you want to this list

  15.   )
  16.   (if (not (vl-string-search (strcat EnvironBase (car addEnviron))
  17.                              acadEnviron
  18.            );;;make sure we haven't already done this
  19.       )
  20.     (progn
  21.       (mapcar
  22.         '(lambda (x)
  23.            (setq acadEnviron (strcat acadEnviron ";" EnvironBase x))
  24.          )
  25.         addEnviron
  26.       )
  27.       (vla-put-supportpath FilePrefs acadEnviron)
  28.       (princ "\n....Support Paths updated!")
  29.     );progn
  30.     (princ "\n....Support Paths were previously updated...nothing done.")
  31.   );if
  32.   (princ)
  33. )
  34.        


Kerry Brown

  1. (VL-LOAD-COM)
  2. (prompt "\n < LDP > Load Dependant Support Paths to profile [V0.01]")
  3. (defun c:LDP (/ fileprefs addenviron environbase acadenviron)
  4.   (setq fileprefs (vla-get-files (vla-get-preferences
  5.                                                       (vlax-get-acad-object)
  6.                                  )
  7.                   )
  8.   )
  9.   (setq acadenviron (vla-get-supportpath fileprefs))
  10.   (setq environbase "M:\\_Cad Support\\AutoCAD 2004\\2004dannyCAD\\MENU\")
  11.   (setq addenviron '("Area" "Blocks"
  12.          "Dimensions" "Layers"
  13.          "Linetypes" "Plotting"
  14.          "Settings" "Shortcuts"
  15.          "Text"
  16.         )
  17.   )
  18.   (mapcar
  19.     '(lambda (x)
  20.        (setq acadenviron (strcat acadenviron ";" environbase x))
  21.      )
  22.     addenviron
  23.   )
  24.   (vla-put-supportpath fileprefs acadenviron)
  25.   (PRINC)
  26. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2007-3-3 15:44:43 | 显示全部楼层
最初由 snoopychen 发布
[B]:)
谢谢秋枫版主提供代码。
版主的代码应该考虑的因素比较多的了。

为了好好学习,也在网上找了一下资料,好像大概都是两种写法,setenv和vla-put-supportpath

学习作笔记~

[AcadX.com]的代码,可能年... [/B]


加在第几个很重要.

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 17:37 , Processed in 0.172745 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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