组装自己的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);写入 非常好的程序,谢谢楼主分享啊 。 学习学习-------> 好东西 !学习了! 本帖最后由 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 学习了。。。好东西。。 适合自己就好!!!!! 一直在关注楼主的东东! **** Hidden Message ***** 有点高深看不懂啊 什么东西那么神秘,需要回复才能看到 学习学习 看看