找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1151|回复: 8

[教学]:一个动态对话框的实例,高手免进~

[复制链接]
发表于 2004-1-9 23:37:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一个动态对话框的实例

  1.   [FONT=courier new]
  2. ;_一个动态对话框的实例__BY__WKAI__晓东CAD论坛
  3. ;_____________________________________________
  4.   (defun c:tt (/ flag s ent_lst n ss_lst e index_value nn del_ss)
  5.     ;____________________________
  6.   (defun convert_string_to_lst (str ch / lst n s1 cha)
  7.     (setq s1 ""
  8.           n  0
  9.     )
  10.     (repeat (strlen str)
  11.       (setq cha (substr str (setq n (1+ n)) 1))
  12.       (if (= ch cha)
  13.         (setq lst (append lst (list s1))
  14.               s1  ""
  15.         )
  16.         (setq s1 (strcat s1 cha))
  17.       )
  18.     )
  19.     (setq lst (append lst (list (atoi s1))))
  20.   )
  21.     ;____________________________
  22.   (defun *error* (msg)
  23.     (if        f
  24.       (close f)
  25.     )
  26.   )
  27.     ;____________________________
  28.   (setq dcl_name (car (convert_string_to_lst (getenv "ACAD") ";")))
  29.   (setq dcl_name (strcat dcl_name "\\easysel" ".dcl"))
  30.     ;_确定动态dcl文件的位置
  31.   (setq ent_lst '(("LINE" "直线段") ("ARC" "圆弧") ("CIRCLE" "圆") ("ELLIPSE" "椭圆")("LWPOLYLINE" "轻装多义线")))
  32.     ;_设定动态dcl的内容索引表ent_lst
  33.   (setq        s    (ssget);_选择物体
  34.         flag "run"  ;_设定标志
  35.   )
  36.   (while (and (> (sslength s) 0) (= "run" flag));_循环
  37.     (SETQ f (OPEN dcl_name "w"));创建dcl文件
  38.     (setq ss_lst nil
  39.           n -1
  40.     )
  41.     (repeat (sslength s);_在选中的的物体中找到符合动态dcl的内容索引表的,生成一个表ss_lst
  42.       (setq e (cdr (assoc 0 (entget (ssname s (setq n (1+ n)))))))
  43.       (setq ss_lst (if (or (not (assoc e ent_lst)) (member e ss_lst))
  44.                      ss_lst
  45.                      (append ss_lst (list e))
  46.                    )
  47.       )
  48.     )
  49.     (write-line "ss:dialog{label="test";\n:column{\n" f);_写入dcl文件的第行
  50.     (if        ss_lst
  51.       (foreach n ss_lst ;_循环生成按钮,写入dcl文件
  52.         (write-line
  53.           (strcat ":button{label="删除" (cadr (assoc n ent_lst)) "";key="" n "";}")
  54.           f
  55.         )
  56.       )
  57.       (progn
  58.         (write-line ":text{label="没有选中指定的实体类型!";}" f)
  59.         (write-line ":text{label="ent_lst中设定的实体类型如下:";}" f)
  60.         (foreach n ent_lst
  61.           (write-line
  62.             (strcat ":text{label="" (car n) "";}")
  63.             f
  64.           )
  65.         )
  66.       )
  67.     )   
  68.     (write-line "}ok_only;}" f);_写入dcl文件的最后一行
  69.     (close f);_关闭文件
  70.     (setq index_value (load_dialog dcl_name));_加载dcl文件
  71.     (new_dialog "ss" index_value);_开始新对话框
  72.     (foreach nn        ss_lst
  73.       (action_tile
  74.         nn
  75.         (strcat "( done_dialog " (itoa (vl-position (assoc nn ent_lst) ent_lst)) ")")
  76.         ;_给按钮添加动作,用类型在ent_lst中的序号为参数完成对话框
  77.       )
  78.     )
  79.     (action_tile "accept" "(done_dialog -1)");_设置OK按钮的完成参数为-1
  80.     (setq flag (start_dialog));_用flag获得对话框的完成参数,可以知道用户点击了哪个按钮
  81.     (if        (/= -1 flag);_如果用户按的不是ok
  82.       (progn
  83.         (command "._select" s "")
  84.         (setq del_ss (ssget "p" (list (cons 0 (car(nth  flag ent_lst)))) ));_获得属于被删除物体的选择集
  85.         (command "._select" s "r" del_ss "")
  86.         (setq s (ssget "p"));_获得去除被删除物体后的选择集
  87.         (command "._erase" del_ss "");_删除物体
  88.         (setq flag "run");_设置继续运行标志
  89.       )
  90.     )
  91.     (unload_dialog index_value);_卸载对话框
  92.   )
  93. )
  94.   [/FONT]


演示:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-1-11 15:39:15 | 显示全部楼层
(getenv "ACAD")  --> (getenv "temp") 好些

功能再多一点,要考虑全面,是不简单的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-1-12 00:42:50 | 显示全部楼层
现在可懒了,碰上这样的问题,全交给doslib。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-7 19:45:34 | 显示全部楼层
太厉害了,敬礼!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-7 21:36:04 | 显示全部楼层
楼主的创意实在是高,恐怕能利用这个方法修改button的label 吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-28 14:38:17 | 显示全部楼层
楼主是在世太高明了,能做到这样的好,佩服了,绝对支持。但是提点建议,就是实现的功能只能是删除,其他功能没有了,能否扩展充实呢?不过好像也没有必要啊,cad系统自带的右键菜单都有啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-28 18:32:46 | 显示全部楼层
我也是新手,敬佩
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-30 08:47:13 | 显示全部楼层
不错,我试一试.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-30 09:46:14 | 显示全部楼层
确实不错,不过全删的时候不是很多吧,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 00:20 , Processed in 0.293661 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表