马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一个动态对话框的实例

- [FONT=courier new]
- ;_一个动态对话框的实例__BY__WKAI__晓东CAD论坛
- ;_____________________________________________
- (defun c:tt (/ flag s ent_lst n ss_lst e index_value nn del_ss)
- ;____________________________
- (defun convert_string_to_lst (str ch / lst n s1 cha)
- (setq s1 ""
- n 0
- )
- (repeat (strlen str)
- (setq cha (substr str (setq n (1+ n)) 1))
- (if (= ch cha)
- (setq lst (append lst (list s1))
- s1 ""
- )
- (setq s1 (strcat s1 cha))
- )
- )
- (setq lst (append lst (list (atoi s1))))
- )
- ;____________________________
- (defun *error* (msg)
- (if f
- (close f)
- )
- )
- ;____________________________
- (setq dcl_name (car (convert_string_to_lst (getenv "ACAD") ";")))
- (setq dcl_name (strcat dcl_name "\\easysel" ".dcl"))
- ;_确定动态dcl文件的位置
- (setq ent_lst '(("LINE" "直线段") ("ARC" "圆弧") ("CIRCLE" "圆") ("ELLIPSE" "椭圆")("LWPOLYLINE" "轻装多义线")))
- ;_设定动态dcl的内容索引表ent_lst
- (setq s (ssget);_选择物体
- flag "run" ;_设定标志
- )
- (while (and (> (sslength s) 0) (= "run" flag));_循环
- (SETQ f (OPEN dcl_name "w"));创建dcl文件
- (setq ss_lst nil
- n -1
- )
- (repeat (sslength s);_在选中的的物体中找到符合动态dcl的内容索引表的,生成一个表ss_lst
- (setq e (cdr (assoc 0 (entget (ssname s (setq n (1+ n)))))))
- (setq ss_lst (if (or (not (assoc e ent_lst)) (member e ss_lst))
- ss_lst
- (append ss_lst (list e))
- )
- )
- )
- (write-line "ss:dialog{label="test";\n:column{\n" f);_写入dcl文件的第行
- (if ss_lst
- (foreach n ss_lst ;_循环生成按钮,写入dcl文件
- (write-line
- (strcat ":button{label="删除" (cadr (assoc n ent_lst)) "";key="" n "";}")
- f
- )
- )
- (progn
- (write-line ":text{label="没有选中指定的实体类型!";}" f)
- (write-line ":text{label="ent_lst中设定的实体类型如下:";}" f)
- (foreach n ent_lst
- (write-line
- (strcat ":text{label="" (car n) "";}")
- f
- )
- )
- )
- )
- (write-line "}ok_only;}" f);_写入dcl文件的最后一行
- (close f);_关闭文件
- (setq index_value (load_dialog dcl_name));_加载dcl文件
- (new_dialog "ss" index_value);_开始新对话框
- (foreach nn ss_lst
- (action_tile
- nn
- (strcat "( done_dialog " (itoa (vl-position (assoc nn ent_lst) ent_lst)) ")")
- ;_给按钮添加动作,用类型在ent_lst中的序号为参数完成对话框
- )
- )
- (action_tile "accept" "(done_dialog -1)");_设置OK按钮的完成参数为-1
- (setq flag (start_dialog));_用flag获得对话框的完成参数,可以知道用户点击了哪个按钮
- (if (/= -1 flag);_如果用户按的不是ok
- (progn
- (command "._select" s "")
- (setq del_ss (ssget "p" (list (cons 0 (car(nth flag ent_lst)))) ));_获得属于被删除物体的选择集
- (command "._select" s "r" del_ss "")
- (setq s (ssget "p"));_获得去除被删除物体后的选择集
- (command "._erase" del_ss "");_删除物体
- (setq flag "run");_设置继续运行标志
- )
- )
- (unload_dialog index_value);_卸载对话框
- )
- )
- [/FONT]
演示: |