77077 发表于 2014-10-20 22:44:35

组装自己的DCL菜单,欢迎大家一起来练习

首先,论坛里面很多高手已经写出dcl菜单。
http://bbs.mjtd.com/thread-109056-1-1.html
http://bbs.mjtd.com/thread-109086-1-1.html
http://bbs.mjtd.com/thread-84942-1-1.html
还有很多很多,不一一列举了。

到这里,个人觉得这些面板菜单都还不够完美,没办法自动生成及更新。

下面,咱们来讨论下如何利用lisp生成DCL面板菜单所需要的menu列表文件,以便生成和更新。
个人思路:
1.读取文件夹及lsp文件列表
2.分别读取lsp文件中"(defun c:"后面到"("中间的字符,算作是命令
3.分别连接起文件名及命令。最终形成"文件名称+命令"的格式,如:"坐标标注.lsp,zbbz"
4.保存到一个txt文件中,让高手们写的DCL面板菜单来调用。

~放个未完成的例子,;; 将此文件拖入ACAD绘图区,生成工具箱菜单要用的命令列表
;菜单列表写入文本文件,一行一个
(defun write-lst2txt (lst ff)
(setq file (open ff "w"))
(foreach str lst (write-line str file))
(close file)
)
;读取lsp文件内的命令,链接到文件名上
;最终形成"文件名称+命令"的格式,如:"坐标标注.lsp,zbbz"
;未完成
(defun read-c: (ff)
(setq file (open ff "r"))

)
;====开始===
(vl-load-com)
(princ "\n")
(setq path (getvar "lastprompt"))
(if (wcmatch (strcase path) "*(LOAD \"*")
(setqstr(vl-string-search "(LOAD \"" path)
      path (substr path
         (+ str 8)
         (- (vl-string-search "\")" path) str 7)
       )
)
);获取路径
(setq path (strcase (vl-filename-directory path) t))
(setq lst1 (vl-directory-files path "*.lsp"));获取文件列表
(setq lst2 (cddr(vl-directory-files path nil -1)));获取目录列表,排除掉"." ".." 这两项
(setq lstn '() lstnx '())
(foreach n lst2
(setq lstn (vl-directory-files (strcat path "/" n) "*.lsp")
       lstn (mapcar '(lambda(x)(strcat n "-" x))lstn)
       lstnx (cons lstn lstnx)
       )
)
(setq lst3 '())
(foreach a lstnx (setq lst3 (append a lst3)))
(setq lst3 (append lst1 lst3))
(setq ff (strcat (vl-string-translate "/" "\\" path) "\\menu.txt"));菜单保存文件名
(write-lst2txt lst3 ff);写入

vladimir 发表于 2016-10-26 13:00:37

非常好的程序,谢谢楼主分享啊 。

479274135 发表于 2016-10-25 14:36:25

学习学习------->

hm6313967 发表于 2023-2-25 16:12:13

好东西 !学习了!

77077 发表于 2014-10-20 22:51:39

本帖最后由 77077 于 2014-10-20 23:04 编辑

占楼,以备后用~~~

例如,我的目录是E:.
│menu.txt
│将此文件拖入ACAD绘图区更新菜单.LSP
│无标题2.lsp

├─1
│      1.lsp
│      2.lsp
│      3.lsp

├─2
│      1.lsp
│      2.lsp
│      3.lsp

├─3
│      1.lsp
│      2.lsp
│      3.lsp

└─4
      1.lsp
      2.lsp
      3.lsp
生成的是
将此文件拖入ACAD绘图区更新菜单.LSP
无标题2.lsp
1/1.lsp
1/2.lsp
1/3.lsp
2/1.lsp
2/2.lsp
2/3.lsp
3/1.lsp
3/2.lsp
3/3.lsp
4/1.lsp
4/2.lsp
4/3.lsp

aisr花园 发表于 2014-10-21 09:08:24

学习了。。。好东西。。

spp_wall 发表于 2014-10-21 10:07:09

适合自己就好!!!!!

USER2128 发表于 2014-10-25 16:20:05

一直在关注楼主的东东!

zzyong00 发表于 2014-10-25 18:03:24

**** Hidden Message *****

伪书虫86 发表于 2014-10-25 19:43:51

有点高深看不懂啊

香田里浪人 发表于 2014-10-25 20:34:46

什么东西那么神秘,需要回复才能看到

yshf 发表于 2014-10-25 21:13:22

学习学习

xchj81 发表于 2014-10-25 21:21:56

看看
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 组装自己的DCL菜单,欢迎大家一起来练习