求助
哪位大佬能出手,优化下我这个DCL,我想要右边拾取到数值后联动到对应左边的对话框里,不知道怎么写,望大佬们能指导下。(defun c:tt (/ *get-lujing* dcl_id get-lujing re sg-lt-yk-getdata-zhinengwenzitihuan str ent txt old-dcl)
(or sg-lt-xdx (setq sg-lt-xdx ""))
(or sg-lt-jdx (setq sg-lt-jdx "******"))
(defun sg-lt-yk-getdata-zhinengwenzitihuan ()
(setq sg-lt-xdx (get_tile "sg-lt-xdx"))
(setq sg-lt-jdx (get_tile "sg-lt-jdx"))
)
(defun get-text-from-user (key / ent txt)
(princ "\n请在屏幕上选择文字或数字: ")
(if (setq ent (entsel))
(progn
(setq txt (cdr (assoc 1 (entget (car ent)))))
(if (= key "sqjdx")
(setq sg-lt-jdx txt)
(setq sg-lt-xdx txt)
)
txt
)
)
)
(setq old-dcl (findfile "DclTemp.dcl"))
(if old-dcl (vl-file-delete old-dcl))
(if (= (setq dcl_id (load_dialog (sg-lt-yk-make-dcl-zhinengwenzitihuan))) 0)
(progn (alert "\n无法显示对话框!") (exit))
)
(setq re 4)
(while (>= re 2)
(if (not (new_dialog "dllC" dcl_id))
(progn (alert "\n无法显示对话框!") (exit))
)
(set_tile "sg-lt-xdx" sg-lt-xdx)
(set_tile "sg-lt-jdx" sg-lt-jdx)
(action_tile "sqjdx" "(done_dialog 2)")
(action_tile "sqxdx" "(done_dialog 3)")
(action_tile "accept" "(sg-lt-yk-getdata-zhinengwenzitihuan)(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(setq re (start_dialog))
(cond
((= re 2) (get-text-from-user "sqjdx"))
((= re 3) (get-text-from-user "sqxdx"))
((= re 1) (sg-lt-zhinengwenzitihuan))
((= re 0) nil)
)
)
(unload_dialog dcl_id)
(princ)
)
(defun sg-lt-yk-make-dcl-zhinengwenzitihuan (/ lst_str str file f)
(setq lst_str '(
"dllC:dialog"
"{ // start dcl"
"label = \"文字替换\";"
":column{"
":row{"
":row{:edit_box{label=\"旧对象:\";key=\"sg-lt-jdx\"; edit_width=10;}}"
":button{label = \"拾取\";key = \"sqjdx\" ;}}"
":row{"
":row{:edit_box{label=\"新对象:\";key=\"sg-lt-xdx\"; edit_width=10;}}"
":button{label = \"拾取\";key = \"sqxdx\" ;}}"
"}"
":row{"
":button{label=\"确定(&Q)\";key=\"accept\";is_default=true;height=3;}"
":button{label=\"取消(&C)\";key=\"cancel\";is_cancel=true;height=3;}"
"}"
"fixed_width=true;"
"alignment=left;"
"} "
))
(setq file (vl-filename-mktemp "DclTemp.dcl"))
(setq f (open file "w"))
(foreach str lst_str
(princ "\n" f)
(princ str f)
)
(close f)
file
)注释了你的幻灯片文件路径,导致程序报错无法加载,你看看是不是这样 (defun C:MM ()
(vl-load-com)
(setq texta "")
(while
(progn
(setq tmp-dcl-file-name (vl-filename-mktemp nil nil ".dcl"))
(setq dcl_file (open tmp-dcl-file-name "w"))
(foreach x
'(
"ZW:dialog {"
"label = \"测试\";"
":edit_box { key = \"AAA\";}"
":button { label = \"拾取\"; key = \"CCC\"; }"
"ok_cancel;"
"}"
)
(write-line x dcl_file)
)
(close dcl_file)
(setq dcl_id (load_dialog tmp-dcl-file-name))
(vl-file-delete tmp-dcl-file-name)
(if (not (new_dialog "ZW" dcl_id))(exit))
(set_tile "AAA" texta)
(action_tile "CCC" "(done_dialog 2)")
(action_tile "accept" "(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
(setq AA (start_dialog))
(unload_dialog dcl_id)
(cond
((= AA 2)(setq texta (YYDS)))
(T nil)
)
)
)
(princ)
)
(defun YYDS ()
(setq ent (entsel "\n选择一个文字对象: "))
(if ent
(progn
(setq data (entget (car ent)))
(cdr (assoc 1 data))
)
)
)
xiao1984 发表于 2025-4-21 19:48
(defun c:tt (/ *get-lujing* dcl_id get-lujing re sg-lt-yk-getdata-zhinengwenzitihuan str ent txt old ...
感谢大佬,妙笔生花
页:
[1]