shep2008 发表于 2011-6-7 16:03:46

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

本帖最后由 shep2008 于 2011-6-7 16:08 编辑

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

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

shep2008 发表于 2011-6-7 16:07:03

回复 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)

)

aichong 发表于 2020-9-24 23:00:36

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)

zhangrunze 发表于 2025-3-12 10:36:51

学习了~
(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)

(princ)

zhynt 发表于 2011-6-7 16:48:03

本帖最后由 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 ”,添加路径到末尾,否则为开头。

shep2008 发表于 2011-6-7 18:10:26

先去试一下,谢谢!!

shep2008 发表于 2011-6-8 14:38:13

好像不行啊。只能添加一个。。
还有我记得好像可以添加到第几列的?可以设置吗?

zhynt 发表于 2011-6-14 14:27:50

(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 StrUnParse (Lst Delimiter / return)
(setq return "")
(foreach str Lst
    (setq return (strcat return Delimiter str))
)
(substr return 2)
)
(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"C:\\test1"" ")
(AddSupportPath"C:\\test2"nil)
(AddSupportPath"C:\\test3"nil)
(AddSupportPath"C:\\test4"nil)
(princ)

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

zhynt 发表于 2011-6-14 14:31:35

另外关于添加位置的问题,其实在什么位置是无关紧要的,只是有搜索的先后而已,如果有目录需要先搜索,可以加载其到开头。如上例的test1

tywsc 发表于 2011-6-14 15:28:51

多谢zhynt热心指导
会那么多,真佩服您.您做什么工作啊?
我做市政等设计,编autolisp程序纯粹是爱好,有时还挺上瘾,不过是挺费时间的.

zhynt 发表于 2011-6-14 16:35:35

我是做建筑设计的。

tywsc 发表于 2011-6-15 09:46:28

本帖最后由 tywsc 于 2011-6-15 20:37 编辑

回9#zhynt
您也是自学的吧,一边上班赶图,一边学编程---真的挺辛苦
您要是一线设计人,是不是也总加班啊.
我们基本就没歇过完整的假期.
页: [1] 2 3
查看完整版本: 高手帮忙看一下添加文件搜索路径的lsp