明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1418|回复: 13

[讨论] 如何记住对话框按钮的选择

[复制链接]
发表于 2022-8-15 08:29:29 | 显示全部楼层 |阅读模式
执行这个程序时选择这个加点的按钮,如何下次再执行记住上次的选择,不然每次都要点一下这个加点的按钮
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-8-15 16:36:11 | 显示全部楼层
szx025 发表于 2022-8-15 11:10
好像不行,aa同ok_yxbz这里与加点没有关系



(defun c:yxbz(/ jd dcl_id sword_list xword_list dd key newlist vvs txt1 txt2 kd3 msg ty kd1 kd2 kd p pd gr mode pt p0 p1 p2 jd_z )

   (setvar "cmdecho" 0)
   (setq sword_list'("墙上留洞" "砖砌踏步3级"  "1:2防水砂浆找坡" "平台见建筑总说明详图3" "T40-10-"
                    "T40-08-" ))
   (setq xword_list'("中心标高" "底标高"  "宽250,高度均分" "最薄处20厚" "L1=L3=" "L1=" "L3="
                    ))
   (dcl_yxbz)

   (prin1)
)
(defun dcl_yxbz(/ jd jd_z )
(setq jd_z 1)
   (if (not jd1) (setq jd1 "0"));曲银德修改--------              --
   (setq dcl_id (load_dialog "yxbz"))
   (new_dialog "yxbz" dcl_id)
   (show_list "kslist" sword_list)
   (show_list "kxlist" xword_list)
   (set_tile "rb" jd1);曲银德修改--------              --
   (action_tile "kslist" "(sub_klist1 $value)")
   (action_tile "kxlist" "(sub_klist2 $value)")
   (action_tile "accept" "(ok_yxbz)(done_dialog 1)")
   (setq dd(start_dialog))
   (if (= dd 1)
       (bz)
   )
)
(defun show_list(key newlist)
   (start_list key)
   (mapcar 'add_list newlist)
   (end_list)
)
(defun sub_klist1(vvs)
   (set_tile "sstr" (nth (atoi vvs) sword_list))
)
(defun sub_klist2(vvs)
   (set_tile "xstr" (nth (atoi vvs) xword_list))
)


(defun ok_yxbz()
   (setq txt1 (get_tile "sstr"))
   (setq txt2 (get_tile "xstr"))
   (setq jd1 (get_tile "rb"));曲银德修改--------              --
   (if (= txt2 "")
   (progn
   (setq kd3 0)
   (setq txt2 "aa")
   )
   (setq kd3 1)
   )
)
(defun bz (/ *error* name1 name2 name3 )
  (defun *error* (msg) ;将描述错误的字符串存入变量msg
    (entdel name1) (entdel name2) (if name3 (entdel name3))
    (princ "错误: ")(princ msg)) ;打印错误信息
  (setq ty (getvar "TEXTSTYLE"))
  (setq kd1 (caadr (textbox (list '(0 . "text")(cons 1 txt1)(cons 40 300)(cons 41 0.7)(cons 7 ty)))))
   ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
  (setq kd2 (caadr (textbox (list '(0 . "text")(cons 1 txt2)(cons 40 300)(cons 41 0.7)(cons 7 ty)))))
   ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
  (setq kd (max kd1 kd2) kd (+ kd 50))
    (setq p (getpoint "\n输入基点:"))
  (if  ( = jd1 "1");曲银德修改--------              --
   (command "Donut" "0" "80" p "")
   )
  (setq pd t)
  (while pd
    (setq gr (grread t 4 1) mode (car gr) pt (cadr gr))
    (if (= kd3 0) (setq kd kd1))
    (if (and (listp pt) (>= (car pt) (car p))) (progn
      (setq p0 (polar pt 0 kd))
      (setq p1 (polar pt 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
      (setq p2 (polar pt 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
    (if (and (listp pt) (< (car pt) (car p))) (progn
      (setq p0 (polar pt pi kd))
      (setq p1 (polar p0 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
      (setq p2 (polar p0 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
    (if (= mode 5) (progn
      (if name1 (entdel name1))
      (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 3)
        (cons 10 p)(cons 10 pt)(cons 10 p0)))
      (setq name1 (entlast))
      (if name2 (entdel name2))
      (entmake (list '(0 . "text")(cons 1 txt1)(cons 40 300)(cons 41 0.7)(cons 10 p1)(cons 7 ty)))
      ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
      (setq name2 (entlast))
      (if name3 (entdel name3))
      (if (= kd3 1) (entmake (list '(0 . "text")(cons 1 txt2)(cons 40 300)(cons 41 0.7)(cons 10 p2)(cons 7 ty))))
      ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
      (if (= kd3 1) (setq name3 (entlast)))))
    (if (= mode 3) (setq pd nil))
    (if (or (= mode 2) (= mode 25)) (progn (setq pd nil) (entdel name1) (entdel name2) (if name3 (entdel name3)))))
  (princ))
发表于 2022-8-15 16:26:57 | 显示全部楼层
本帖最后由 sniper1111 于 2022-8-15 16:35 编辑




(defun c:yxbz(/ jd dcl_id sword_list xword_list dd key newlist vvs txt1 txt2 kd3 msg ty kd1 kd2 kd p pd gr mode pt p0 p1 p2 jd_z )

   (setvar "cmdecho" 0)
   (setq sword_list'("墙上留洞" "砖砌踏步3级"  "1:2防水砂浆找坡" "平台见建筑总说明详图3" "T40-10-"
                    "T40-08-" ))
   (setq xword_list'("中心标高" "底标高"  "宽250,高度均分" "最薄处20厚" "L1=L3=" "L1=" "L3="
                    ))
   (dcl_yxbz)

   (prin1)
)
(defun dcl_yxbz(/ jd jd_z )
(setq jd_z 1)
   (if (not jd1) (setq jd1 "0"));曲银德修改--------              --
   (setq dcl_id (load_dialog "yxbz"))
   (new_dialog "yxbz" dcl_id)
   (show_list "kslist" sword_list)
   (show_list "kxlist" xword_list)
   (set_tile "rb" jd1);曲银德修改--------              --
   (action_tile "kslist" "(sub_klist1 $value)")
   (action_tile "kxlist" "(sub_klist2 $value)")
   (action_tile "accept" "(ok_yxbz)(done_dialog 1)")
   (setq dd(start_dialog))
   (if (= dd 1)
       (bz)
   )
)
(defun show_list(key newlist)
   (start_list key)
   (mapcar 'add_list newlist)
   (end_list)
)
(defun sub_klist1(vvs)
   (set_tile "sstr" (nth (atoi vvs) sword_list))
)
(defun sub_klist2(vvs)
   (set_tile "xstr" (nth (atoi vvs) xword_list))
)


(defun ok_yxbz()
   (setq txt1 (get_tile "sstr"))
   (setq txt2 (get_tile "xstr"))
   (setq jd1 (get_tile "rb"));曲银德修改--------              --
   (if (= txt2 "")
   (progn
   (setq kd3 0)
   (setq txt2 "aa")
   )
   (setq kd3 1)
   )
)
(defun bz (/ *error* name1 name2 name3 )
  (defun *error* (msg) ;将描述错误的字符串存入变量msg
    (entdel name1) (entdel name2) (if name3 (entdel name3))
    (princ "错误: ")(princ msg)) ;打印错误信息
  (setq ty (getvar "TEXTSTYLE"))
  (setq kd1 (caadr (textbox (list '(0 . "text")(cons 1 txt1)(cons 40 300)(cons 41 0.7)(cons 7 ty)))))
   ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
  (setq kd2 (caadr (textbox (list '(0 . "text")(cons 1 txt2)(cons 40 300)(cons 41 0.7)(cons 7 ty)))))
   ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
  (setq kd (max kd1 kd2) kd (+ kd 50))
    (setq p (getpoint "\n输入基点:"))
  (if  ( = jd1 "1");曲银德修改--------              --
   (command "Donut" "0" "80" p "")
   )
  (setq pd t)
  (while pd
    (setq gr (grread t 4 1) mode (car gr) pt (cadr gr))
    (if (= kd3 0) (setq kd kd1))
    (if (and (listp pt) (>= (car pt) (car p))) (progn
      (setq p0 (polar pt 0 kd))
      (setq p1 (polar pt 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
      (setq p2 (polar pt 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
    (if (and (listp pt) (< (car pt) (car p))) (progn
      (setq p0 (polar pt pi kd))
      (setq p1 (polar p0 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
      (setq p2 (polar p0 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
    (if (= mode 5) (progn
      (if name1 (entdel name1))
      (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 3)
        (cons 10 p)(cons 10 pt)(cons 10 p0)))
      (setq name1 (entlast))
      (if name2 (entdel name2))
      (entmake (list '(0 . "text")(cons 1 txt1)(cons 40 300)(cons 41 0.7)(cons 10 p1)(cons 7 ty)))
      ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
      (setq name2 (entlast))
      (if name3 (entdel name3))
      (if (= kd3 1) (entmake (list '(0 . "text")(cons 1 txt2)(cons 40 300)(cons 41 0.7)(cons 10 p2)(cons 7 ty))))
      ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
      (if (= kd3 1) (setq name3 (entlast)))))
    (if (= mode 3) (setq pd nil))
    (if (or (= mode 2) (= mode 25)) (progn (setq pd nil) (entdel name1) (entdel name2) (if name3 (entdel name3)))))
  (princ))
 楼主| 发表于 2022-8-15 08:33:43 | 显示全部楼层
(defun c:yxbz(/ jd dcl_id sword_list xword_list dd key newlist vvs txt1 txt2 kd3 msg ty kd1 kd2 kd p pd gr mode pt p0 p1 p2 jd_z )
   (HJSZ)
   (setvar "cmdecho" 0)
   (setq sword_list'("墙上留洞" "砖砌踏步3级"  "1:2防水砂浆找坡" "平台见建筑总说明详图3" "T40-10-"
                    "T40-08-" ))
   (setq xword_list'("中心标高" "底标高"  "宽250,高度均分" "最薄处20厚" "L1=L3=" "L1=" "L3="
                    ))
   (dcl_yxbz)
   (HFHJSZ)
   (prin1)
)
(defun dcl_yxbz(/ jd jd_z )
(setq jd_z 1)  
   (setq dcl_id (load_dialog "yxbz"))
   (new_dialog "yxbz" dcl_id)
   (show_list "kslist" sword_list)
   (show_list "kxlist" xword_list)
   (action_tile "kslist" "(sub_klist1 $value)")
   (action_tile "kxlist" "(sub_klist2 $value)")
   (action_tile "rb" "(aa)")
   (action_tile "accept" "(ok_yxbz)(done_dialog 1)")
   (setq dd(start_dialog))
   (if (= dd 1)
       (bz)
   )
)
(defun show_list(key newlist)
   (start_list key)
   (mapcar 'add_list newlist)
   (end_list)
)
(defun sub_klist1(vvs)
   (set_tile "sstr" (nth (atoi vvs) sword_list))
)
(defun sub_klist2(vvs)
   (set_tile "xstr" (nth (atoi vvs) xword_list))
)
(defun aa()
  (if(= jd_z 1)(setq jd_z 1)(setq jd_z 2))
  (cond
    ((= jd_z 1)(setq jd "加点")(setq jd_z 2))
    ((= jd_z 2)(setq jd "")(setq jd_z 1))
  )
)

(defun ok_yxbz()
   (setq txt1 (get_tile "sstr"))
   (setq txt2 (get_tile "xstr"))
   (if (= txt2 "")
   (progn
   (setq kd3 0)
   (setq txt2 "aa")
   )
   (setq kd3 1)
   )
)
(defun bz (/ *error* name1 name2 name3 )
  (defun *error* (msg) ;将描述错误的字符串存入变量msg
    (entdel name1) (entdel name2) (if name3 (entdel name3))
    (princ "错误: ")(princ msg)) ;打印错误信息
  (setq ty (getvar "TEXTSTYLE"))
  (setq kd1 (caadr (textbox (list '(0 . "text")(cons 1 txt1)(cons 40 300)(cons 41 0.7)(cons 7 ty)))))
   ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
  (setq kd2 (caadr (textbox (list '(0 . "text")(cons 1 txt2)(cons 40 300)(cons 41 0.7)(cons 7 ty)))))
   ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
  (setq kd (max kd1 kd2) kd (+ kd 50))
    (setq p (getpoint "\n输入基点:"))
  (if  ( = jd "加点")
   (command "Donut" "0" "80" p "")
   )
  (setq pd t)
  (while pd
    (setq gr (grread t 4 1) mode (car gr) pt (cadr gr))
    (if (= kd3 0) (setq kd kd1))
    (if (and (listp pt) (>= (car pt) (car p))) (progn
      (setq p0 (polar pt 0 kd))
      (setq p1 (polar pt 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
      (setq p2 (polar pt 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
    (if (and (listp pt) (< (car pt) (car p))) (progn
      (setq p0 (polar pt pi kd))
      (setq p1 (polar p0 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") 50))
      (setq p2 (polar p0 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350))))
    (if (= mode 5) (progn
      (if name1 (entdel name1))
      (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 3)
        (cons 10 p)(cons 10 pt)(cons 10 p0)))
      (setq name1 (entlast))
      (if name2 (entdel name2))
      (entmake (list '(0 . "text")(cons 1 txt1)(cons 40 300)(cons 41 0.7)(cons 10 p1)(cons 7 ty)))
      ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
      (setq name2 (entlast))
      (if name3 (entdel name3))
      (if (= kd3 1) (entmake (list '(0 . "text")(cons 1 txt2)(cons 40 300)(cons 41 0.7)(cons 10 p2)(cons 7 ty))))
      ;字高300,字宽高比0.7,可以自己设置,字体为当前字体
      (if (= kd3 1) (setq name3 (entlast)))))
    (if (= mode 3) (setq pd nil))
    (if (or (= mode 2) (= mode 25)) (progn (setq pd nil) (entdel name1) (entdel name2) (if name3 (entdel name3)))))
  (princ))
 楼主| 发表于 2022-8-15 08:31:19 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2022-8-15 09:29:57 | 显示全部楼层
给dcl文件:toggle设置一个key值为1.还可以加一个if not实现记忆功能
 楼主| 发表于 2022-8-15 10:44:46 | 显示全部楼层
sniper1111 发表于 2022-8-15 09:29
给dcl文件:toggle设置一个key值为1.还可以加一个if not实现记忆功能

KEY设为1,执行程序就可以直接加点,但如果执行是取消加点,下次又有了,if not实现记忆功能能详细说说吗
发表于 2022-8-15 10:51:47 | 显示全部楼层
(if (not aa)(setq aa "1"))然后把aa赋值给key。
在ok_yxbz这里加
(setq aa (get_tile "key"))
 楼主| 发表于 2022-8-15 11:10:47 | 显示全部楼层
sniper1111 发表于 2022-8-15 10:51
(if (not aa)(setq aa "1"))然后把aa赋值给key。
在ok_yxbz这里加
(setq aa (get_tile "key"))

好像不行,aa同ok_yxbz这里与加点没有关系
发表于 2022-8-15 11:14:35 | 显示全部楼层
把整码发上来,缺少函数怎么测试
发表于 2022-8-15 13:47:30 来自手机 | 显示全部楼层
做一个全局变量就行了,上次有则有,无则无,只记住最后一次
 楼主| 发表于 2022-8-15 15:17:19 | 显示全部楼层
zj20190405 发表于 2022-8-15 11:14
把整码发上来,缺少函数怎么测试

DCL见附件

本帖子中包含更多资源

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

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 15:15 , Processed in 0.228364 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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