- 积分
- 11278
- 明经币
- 个
- 注册时间
- 2007-1-4
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
首先,论坛里面很多高手已经写出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 "*")
- (setq str (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);写入
|
|