fengyu6913 发表于 2024-9-4 00:31:57

请大佬帮助:拼凑个自动加载程序,不知道哪里出问题了??

本帖最后由 fengyu6913 于 2024-9-4 12:35 编辑


从网上找的加载子函数,想拼凑个自动加载程序,卡住了,也不知道哪里出问题了

请大佬帮忙看下问题出在哪里了?



(defun c:tt () (c:lispautoload));;长命令简化“调用”方法

(defun c:lispautoload ( / x )

(setq path_root"H:\\00. CAD相关\\1.加载\\");;设置根路径

(setq path0   (strcatpath_root   "0. 快捷"))
(setq path1   (strcatpath_root   "1. 绘图"))
(setq path2   (strcatpath_root   "2. 变量"))
(setq path3   (strcatpath_root   "3. 标注"))
(setq path4   (strcatpath_root   "4. 方字"))
(setq path5   (strcatpath_root   "5. 座标"))

(CQ-AUTOLOADFILE   path0)
(CQ-AUTOLOADFILE   path1)
(CQ-AUTOLOADFILE   path2)
(CQ-AUTOLOADFILE   path3)
(CQ-AUTOLOADFILE   path4)
(CQ-AUTOLOADFILE   path5)
)
;;以下子程序是是论坛还是群里找到的
(DEFUN   CQ-AUTOLOADFILE(   PATH      /   FILENAME   I   INF   SELF   )      
   (setq   FILENAME   (MAPCAR   'STRCASE   (APPLY   'APPEND   (MAPCAR   '(LAMBDA   (X   )
                        (VL-DIRECTORY-FILES   PATH   X   )   )   '("*.VLX"   "*.FAS"   "*.LSP"   )   )   )   ))   
   (setq   SELF   (STRCASE   (STRCAT   (VL-FILENAME-BASE   (VL-BB-REF   'FILEPATH   )   )
                        (VL-FILENAME-EXTENSION   (VL-BB-REF   'FILEPATH   )   )   )   ))   
   (setq   FILENAME   (VL-REMOVE   SELF   FILENAME   ))   
   (setq   I   0)   
   (FOREACH   X   FILENAME      
      (if   (VL-CATCH-ALL-ERROR-P   (setq      INF
                        (VL-CATCH-ALL-APPLY   'LOAD   (LIST   (STRCAT   PATH   "/"   X   )   )   ))   )   
         (PROGN      
            (setq   I   (1+   I   ))
            (PRINC   (STRCAT   "\n("   (ITOA   I   )   ")   "   X   "   加载失败!   "   (VL-CATCH-ALL-ERROR-MESSAGE   INF   )   )   )   
         )
      )
      (PRINC   )
   )   
   (PRINC   )      
)





lostbalance 发表于 2024-9-4 13:54:03

CQ-AUTOLOADFILE那个不明白为什么会写的这么复杂。
第1步是找到了路径下所有的程序文件;
第2步和第3步完全没看明白是想干嘛,另外出错就是在第2步,第3步没测试。
后面是加载程序文件。

简单来说,把第2步和第3步删掉,程序就能用了,也就是下面这些删掉
   (setq   SELF   (STRCASE   (STRCAT   (VL-FILENAME-BASE   (VL-BB-REF   'FILEPATH   )   )
                        (VL-FILENAME-EXTENSION   (VL-BB-REF   'FILEPATH   )   )   )   ))   
   (setq   FILENAME   (VL-REMOVE   SELF   FILENAME   ))   

当然了,删掉后,可以在清理一下这个函数的废弃变量名。

xyp1964 发表于 2024-9-5 13:49:37

本帖最后由 xyp1964 于 2024-9-6 08:15 编辑

(defun c:tt () (c:lispAutoLoad)) ; 长命令简化“调用”方法
(defun c:lispAutoLoad (/ root)
(defun autoloadfile (path / lst)
    (setq lst (mapcar '(lambda (x) (vl-directory-files path x 1))'("*.vlx" "*.fas" "*.lsp")))
    (mapcar '(lambda (x) (load (strcat path "\\" x))) (apply 'append lst))
)
(setq root "H:\\00.CAD相关\\1.加载\\") ;设置根路径
(foreach a '("0.快捷" "1.绘图" "2.变量" "3.标注" "4.方字" "5.座标");子目录
    (autoloadfile (strcat root a))
)
(princ)
)

xxyyzzlg 发表于 2024-9-6 11:20:58

本帖最后由 xxyyzzlg 于 2024-9-6 11:43 编辑

本想取代之前的自动加载加载程序,遇到了些问题。
之前能正常加载部分函数,如黄大师之前分享的,
用这个方法加载会出现出错提示。
错误: LOAD 失败: D:\11\1.绘图\21.绘图\明经常用函数.lsp

而同路径下的某些程序却能正常加载。想不通哪里出了问题。

qazxswk 发表于 2024-9-4 02:58:44

想自动加载插件?你只要把代码复制到acad20**.lsp文件里,启动CAD就可以自动加载了。20**是你的CAD版本号。

C哩C哩 发表于 2024-9-4 09:48:02

用别人写好的就可以吧,kk开头那个挺好用

fengyu6913 发表于 2024-9-4 12:33:43

插件经常有变动,几台机子要同步挺麻烦的,就想着放移动硬盘里
用时直接能把整个文件夹里的自动加载

kozmosovia 发表于 2024-9-4 13:39:57

fengyu6913 发表于 2024-9-4 12:33
插件经常有变动,几台机子要同步挺麻烦的,就想着放移动硬盘里
用时直接能把整个文件夹里的自动加载

要多台电脑都同步,不如直接全部从web加载,将来只需要更新web上的lsp,保证每次加载的都是最新的

fengyu6913 发表于 2024-9-5 10:35:21

问题已解决,感谢大佬们相助

fengyu6913 发表于 2024-9-5 20:41:10

xyp1964 发表于 2024-9-5 13:49



xyp1964 大神出现了,这个代码好精简

学习了!

yk1216 发表于 2024-9-5 21:45:12

膜拜大神了
页: [1] 2
查看完整版本: 请大佬帮助:拼凑个自动加载程序,不知道哪里出问题了??