popup_list的值如何反馈到lisp中,并下次使用默认选择的值
我想知道如何将dcl对话框中的popup_list的key值转换到lisp函数中,并且下一次使用该命令是会重复上一次选择的key值,如下列代码所示,在DCL中的d5如何反馈到lisp中的c3d5,并下一次使用该命令时对话框显示上一次使用该命令时显示的值(defun c:c3e(/p1 p2 p3 p4 p5 p6 p7 p8 e1 p9 d5 d6 d7 d8 d9 o0s pt1 i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16 i17 i18 i19) ;直管一键展开绘制
(setvar "cmdecho" 0) ;关闭普通命令提示信息
(setvar "osmode" 0);关闭对象捕捉状态
(command "._undo" "_begin")
(defun make-dclCS(/ lst_str str file f );;面板的界面显示dcl
(setq lst_str
'(
"矩形直管口字型展开程序:dialog"
"{ // start dcl"
"label = \"矩形直管口字型展开程序\";"
":row{"
":boxed_column{"
":edit_box{label=\"直管序号为(个):\";key=\"d1\"; edit_width=10;}"
":edit_box{label=\"直管长度为(mm):\";key=\"d2\"; edit_width=10;}"
":edit_box{label=\"直管宽度为(mm):\";key=\"d3\"; edit_width=10;}"
":edit_box{label=\"直管高度为(mm):\";key=\"d4\"; edit_width=10;}"
":popup_list{label=\"板材厚度为(mm):\";key=\"d5\";list=\"1.5t\\n0.8t\\n1.0t\\n1.2t\\n2.0t\\n3.0t\"; edit_width=10;}"
"} "
":image{width=30;height=4;key=\"img1\"; color=-16;}} "
":row{"":button{label=\"确定(&Q)\";key=\"accept\";
is_default=true;height=2;}" ":button{label=\"取消(&C)\";key=\"cancel\";is_cancel=true;height=2;}"":button{label=\"帮助(&H)\";key=\"help\";is_cancel=true;height=2;}" "}"
"fixed_width=true;"
"alignment=left;"
"} // end dll" ;结尾
)
)
(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 getdata2() ;获取当前dcl界面里面控件key的当前值,并保存为全局变量,这里需要保存值的变量名字(JH bhd2 JR)尽量起的复杂一点,否则会引起全局变量冲突
(setq c3d1(atof(get_tile "d1")))
(setq c3d2(atof(get_tile "d2")))
(setq c3d3(atof(get_tile "d3")))
(setq c3d4(atof(get_tile "d4")))
(setq c3d5(atof(get_tile "d5")))
)
(if (not c3d1)
(progn (setq c3d1 1) ;判断变量是否存在并且为字符串,如果不是则进行初始化定义
(setq c3d2 500);判断变量是否存在并且为字符串,如果不是则进行初始化定义
(setq c3d3 500);判断变量是否存在并且为字符串,如果不是则进行初始化定义
(setq c3d4 2697);判断变量是否存在并且为字符串,如果不是则进行初始化定义
));判断变量是否存在并且为字符串,如果不是则进行初始化定义
(if (= (setq dcl_id (load_dialog (setq Dcl_File(make-dclCS)))) 0)(progn(alert "\n无法显示对话框!")(exit)))
(if Dcl_File(vl-file-delete Dcl_File));加载后删除DCL文件
(if(not (new_dialog "矩形直管口字型展开程序" dcl_id))(progn(alert "\n无法显示对话框!")(exit)))
(start_image "img1")
(setq max_x (dimx_tile "img1"))
(setq max_y (dimy_tile "img1"))
(slide_image 0 0 max_x max_y "D:/插件/sld/1.sld")
(end_image);显示图形对话框
(mode_tile "d1" 2);设置d1为焦点
(set_tile "d1" (rtos c3d1 2 2)) ;将对应key的全局变量传递给控件,以便显示界面的时候直接显示上次记忆的控件key值
(set_tile "d2" (rtos c3d2 2 2));将对应key的全局变量传递给控件
(set_tile "d3" (rtos c3d3 2 2));将对应key的全局变量传递给控件
(set_tile "d4" (rtos c3d4 2 2));将对应key的全局变量传递给控件
(action_tile "accept" "(getdata2)(done_dialog 1)") ;当按下确认按钮的时候保存控件值,然后退出界面,并执行对于功能函数
(action_tile "cancel" "(getdata2)(done_dialog 0)") ;当按下取消按钮的时候保存控件值,然后退出界面
(action_tile "help" "(getdata2)(done_dialog 2)")
(setq re (start_dialog))
(unload_dialog dcl_id)
(cond ((= re 0)
(setq dss (get_tile "d5"))
(princ dss)
)
((= re 2)
(ALERT
"\n 1ccccccc"
)
)
((= re 1)
(princ "\n单击了确定按钮"))))
本帖最后由 lee50310 于 2023-4-30 13:51 编辑
你的意思是 讓 每個 輸入項及選單 有記憶功能 ?
改好了,請參考看看!
(set_tile "d5" (rtos c3d5 2 2)) (START_LIST "LAY1")
(MAPCAR 'ADD_LIST LAYL)
(END_LIST)
(set_tile "LAY1" (RTOS (vl-position LAY LAYL) 2 0))
这是我对图层popup_list的赋值,key是LAY1,list是图纸的图层列表。如果不对popup_list进行赋值,会自动选择字符串“0”,即图层列表中第一项作为默认值。如果想赋值上次的选择,你取得list中上次值的序号,用vl-position函数,然后把这个int转换成字符串,赋值给popup_list的key。(set_tile "LAY1" (RTOS (vl-position LAY LAYL) 2 0)),取得上次图层设定值在图层列表中序号,然后。。。。
页:
[1]