高手看看,怎么优化一下,感觉写得太复杂了。
(defun Form1_load( / dcl_id Dialog_Return key keys Dcl_File)(vl-load-com)
(setq dcl_id (load_dialog (setq Dcl_File (Write_Dcl_Form1))));对话框加载
(vl-file-delete Dcl_File);加载后删除DCL文件
(setq Dialog_Return 2)
(while (> Dialog_Return 1) ;循环控制对话框是否结束
(new_dialog "Form1" dcl_id);建立窗体
;-->-->-对话框初始化->-->--
(setq keys '("List1" "accept" "cancel"));列表全部控件名称
(setq 图层列表 (当前图纸所有图层))
(start_list "List1");直列表 {"List1"} 初始化
(mapcar 'add_list 图层列表);添加列表项
(end_list)
(foreach key keys;全部控件的初始化
(if (eval (read (strcat key "_bak"))) (set_tile key (eval (read (strcat key "_bak")))));控件内容
(action_tile key "(Action_Form1_Keys $key $value)");点击动作
)
;--<--<-对话框初始化完成-<--<--
(setq Dialog_Return (start_dialog));开启对话框(用户可见)
)
(unload_dialog dcl_id);退出时卸载对话框
(princ);防止函数回显
)
(defun Action_Form1_Keys (key value) ;全部控件的点击动作触发
(cond
((= key "accept") ;{确认按钮}
(setq 所选择的项 (get_tile "List1") )
(Get_Form1_Data)
(done_dialog 1);对话框退出返回主函数 传递给Dialog_Return值为1
)
((= key "cancel") ;{取消按钮}
(exit)
(done_dialog 0);对话框退出返回主函数 传递给Dialog_Return值为0
)
((= key "List1") ; {} (普通列表)
()
)
)
)
(defun Get_Form1_Data( / key);临时生成Dcl文件 返回文件名
(foreach key keys
(set (read (strcat key "_bak")) (get_tile key));每个控件都赋给一个变量 用于下次开启初始化
)
)
(defun Write_Dcl_Form1( / Dcl_File file str)
(setq Dcl_File (vl-filename-mktemp nil nil ".Dcl"))
(setq file (open Dcl_File "w"))
(foreach str '(
"Form1:dialog"
"{"
" label = \"选择删除所在图层的图元\";"
" :list_box"
" {"
" key = \"List1\" ;"
" width = 5 ;"
" height = 20 ;"
"multiple_select = true;"
" }"
"ok_cancel ;"
"}"
)
(write-line str file)
)
(close file)
Dcl_File
)
(defun 当前图纸所有图层 ( / D R)
(while
(setq D (tblnext "layer" (null D)))
(setq R (cons (cdr (assoc 2 D)) R))
)
(reverse r)
)
(defun 去掉重复项 (lst / a lst2);去掉表中相同元素
(while
(setq a (car lst))
(setqlst2 (cons a lst2))
(setq lst (vl-remove a lst))
)
(reverse lst2)
)
(defun SSGET项目 (图层列表 所选择的项 / i d c b e f);此部分是测试代码用
(setq i 0)
(setq d nil)
(repeat (strlen 所选择的项)
(setq i (1+ i))
(setq c (substr 所选择的项 i 1))
(if (/= c " ")
(setq b (strcat (nth (atoi c) 图层列表) ","))
)
(setq d (append d (list b)))
(setq e (apply 'strcat (去掉重复项 d)))
)
(setq f (cons 8 (substr e 1 (-(strlen e)1))))
;(setq ss (ssget 组码))
)
(defun c:tt( / ss 图层列表 所选择的项);此部分是测试代码用
(Form1_load)
(setq ss (ssget (list (SSGET项目 图层列表 所选择的项))))
(command "ERASE" ss "")
(princ)
)
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 取个长点勒名字的微博
页:
[1]