明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5089|回复: 24

高手帮忙看一下添加文件搜索路径的lsp

  [复制链接]
发表于 2011-6-7 16:03 | 显示全部楼层 |阅读模式
本帖最后由 shep2008 于 2011-6-7 16:08 编辑

在网上找到一个添加路径到CAD文件搜索路径的lsp如图所示位置,不知道要添加到哪里,请高手指点一下,例如我要添加D:\AutoCAD1和D:\autocad2两个路径,要怎么改下面的代码:

代码我话到二楼去了,放这里不会自动换行

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-6-7 16:07 | 显示全部楼层
回复 shep2008 的帖子

(defun Example_SupportPath ()

;;;这个范例返回

;;;SupportPath的当前设定值,接着改变它的值,最后恢复初始值

(VL-LOAD-COM)

(setq AcadObject (vlax-get-acad-object)

AcadDocument (vla-get-ActiveDocument AcadObject)

mSpace (vla-get-ModelSpace AcadDocument)

)

(setq preferenceSel (vla-get-Preferences AcadObject))

(setq fileSel (vla-get-Files preferenceSel))

;;;取出当前的SupportPath值

(setq currSupportPath (vla-get-SupportPath fileSel))

(princ "SupportPath的值当前设定为: ")

(princ currSupportPath)

(princ " SupportPath范例\n")

(PROMPT "<Enter>进行:")

(VL-CMDF pause)

;;;改变SupportPath的值

(vla-put-SupportPath fileSel "TestSupportPath")

(setq newSupportPath (vla-get-SupportPath fileSel))

(princ "SupportPath的新值设定为: ")

(princ newSupportPath)

(princ " SupportPath范例\n")

(PROMPT "<Enter>进行:")

(VL-CMDF pause)

;;;将 SupportPath 重设为原来的值

(vla-put-SupportPath fileSel currSupportPath)

(vla-Regen AcadDocument acAllViewports)

(princ "SupportPath的值已经重设为: ")

(princ currSupportPath)

(princ " SupportPath范例\n")

(princ)

)

回复 支持 0 反对 1

使用道具 举报

发表于 2020-9-24 23:00 | 显示全部楼层
cabinsummer 发表于 2012-4-15 12:27
昨天的有误,今天更新如下:

代码很好用,谢谢分享。我修改了一下,这样就可以放在最前面或最后面:

(setq sp (getenv "ACAD"))
(setq path '("D:\\autocad1" "D:\\autocad2" "D:\\autocad3"))
;(foreach x path (setq sp (strcat sp ";" x))) ;文件搜索路径放在最后
(foreach x path (setq sp (strcat x ";" sp))) ;文件搜索路径放在最前
(setenv "ACAD" sp)
发表于 2018-1-19 12:27 | 显示全部楼层
...不需要指定好路径...

且问路径从何得来?
全盘搜寻?有着数个磁盘且有外接盘;
光盘也有可能有放...
再加上公司的Server环境
那得多少时间!?
遇上同名资料夹如何抉择!?


程序猿知道自家的果子挂何处
但所打造的钩子他人未必能一体适用啊

所以最好能自己量身打造
要不Autodesk早给了
发表于 2011-6-7 16:48 | 显示全部楼层
本帖最后由 zhynt 于 2011-6-7 17:12 编辑

(defun StrUnParse (Lst Delimiter / return)
  (setq return "")
  (foreach str Lst
    (setq return (strcat return Delimiter str))
  )
  (substr return 2)
)
(defun strParse (sstring sstr)
  (setq string_list '())
  (setq n1 (strlen sstring))
  (setq n2 (strlen sstr))
  (while (setq m2 (vl-string-search sstr sstring))
    (setq str_1 (substr sstring 1 m2))
    (setq sstring (substr sstring (+ 1 m2 n2)))
    (if (/= str_1 "")
      (setq string_list (cons str_1 string_list))
    )
  )
  (if (/= sstring "")
    (setq string_list (cons sstring string_list))
  )
  (reverse string_list)
)
(defun AddSupportPath (PathToAdd isFirst / supportlist)
  (if (not
        (vl-string-search
          (strcase (strcat pathToAdd ";"))
          (strcase (strcat (getenv "ACAD") ";"))
        )
      )
    (progn
      (setq supportlist (strparse (getenv "ACAD") ";"))
      (setq supportlist
             (vl-remove-if-not
               'vl-file-directory-p
               supportlist
             )
      )
      (if isFirst
        (setq supportlist (cons PathToAdd supportlist))
        (setq supportlist (append supportlist (list PathToAdd)))
      )
      (setenv "ACAD" (strUnParse supportlist ";"))
    )
  )
)
(AddSupportPath "D:\\autocad1" nil)
(AddSupportPath "D:\\autocad2" nil)

说明:当isFirst参数为“nil ”,添加路径到末尾,否则为开头。
 楼主| 发表于 2011-6-7 18:10 | 显示全部楼层
先去试一下,谢谢!!
 楼主| 发表于 2011-6-8 14:38 | 显示全部楼层
好像不行啊。只能添加一个。。
还有我记得好像可以添加到第几列的?可以设置吗?
发表于 2011-6-14 14:27 | 显示全部楼层
  1. (defun strParse (sstring sstr)
  2.   (setq string_list '())
  3.   (setq n1 (strlen sstring))
  4.   (setq n2 (strlen sstr))
  5.   (while (setq m2 (vl-string-search sstr sstring))
  6.     (setq str_1 (substr sstring 1 m2))
  7.     (setq sstring (substr sstring (+ 1 m2 n2)))
  8.     (if (/= str_1 "")
  9.       (setq string_list (cons str_1 string_list))
  10.     )
  11.   )
  12.   (if (/= sstring "")
  13.     (setq string_list (cons sstring string_list))
  14.   )
  15.   (reverse string_list)
  16. )
  17. -----------------------------------------------------------------------
  18. (defun StrUnParse (Lst Delimiter / return)
  19.   (setq return "")
  20.   (foreach str Lst
  21.     (setq return (strcat return Delimiter str))
  22.   )
  23.   (substr return 2)
  24. )
  25. (defun AddSupportPath (PathToAdd isFirst / supportlist)
  26.   (if (not
  27. (vl-string-search
  28.    (strcase (strcat pathToAdd ";"))
  29.    (strcase (strcat (getenv "ACAD") ";"))
  30. )
  31.       )
  32.     (progn
  33.       (setq supportlist (strparse (getenv "ACAD") ";"))
  34.       (setq supportlist
  35.       (vl-remove-if-not
  36.         'vl-file-directory-p
  37.         supportlist
  38.       )
  39.       )
  40.       (if isFirst
  41. (setq supportlist (cons PathToAdd supportlist))
  42. (setq supportlist (append supportlist (list PathToAdd)))
  43.       )
  44.       (setenv "ACAD" (strUnParse supportlist ";"))
  45.     )
  46.   )
  47. )
  48. (AddSupportPath  "C:\\test1"  " ")
  49. (AddSupportPath  "C:\\test2"  nil)
  50. (AddSupportPath  "C:\\test3"  nil)
  51. (AddSupportPath  "C:\\test4"  nil)
  52. (princ)

是可以添加多个目录的,前提是这些目录是真实有效的。
如:我的c盘局部截图:
我原来的文件搜索列表:
添加后:

本帖子中包含更多资源

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

x
发表于 2011-6-14 14:31 | 显示全部楼层
另外关于添加位置的问题,其实在什么位置是无关紧要的,只是有搜索的先后而已,如果有目录需要先搜索,可以加载其到开头。如上例的test1
发表于 2011-6-14 15:28 | 显示全部楼层
多谢zhynt热心指导
会那么多,真佩服您.您做什么工作啊?
我做市政等设计,编autolisp程序纯粹是爱好,有时还挺上瘾,不过是挺费时间的.
发表于 2011-6-14 16:35 | 显示全部楼层
我是做建筑设计的。
发表于 2011-6-15 09:46 | 显示全部楼层
本帖最后由 tywsc 于 2011-6-15 20:37 编辑

回9#zhynt
您也是自学的吧,一边上班赶图,一边学编程---真的挺辛苦
您要是一线设计人,是不是也总加班啊.
我们基本就没歇过完整的假期.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 20:59 , Processed in 0.252833 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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