明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1237|回复: 6

[求助]卸载对话框后变量的值丢失

[复制链接]
发表于 2010-9-27 11:01:00 | 显示全部楼层 |阅读模式

   ......

    (action_tile "user_dim" "(f_user (get_tile \"user_dim\")) (getdata)")
    (action_tile "accept" "(getdata)(done_dialog 1)") 
    (action_tile "cancel" "(done_dialog -1)") 
    (setq sdt (start_dialog))
  )

......    

(unload_dialog id)
    (if(= user_md "0")(setq d (nth (atoi d_n) s_d_list) l (nth (atoi l_n) s_l_list)) (setq d d1 l l1))
    (if (= sdt 1)
    (drawscrew s_t d l p0 alf cen_md cc tc sc)
  )
  (princ)
  )

 高手解答一下,按确定按钮卸载对话框后,变量的值都变成nil了,是哪里出错了?

 楼主| 发表于 2010-9-27 11:50:00 | 显示全部楼层
小弟是初学者,麻烦高手们指点了
发表于 2010-9-27 14:57:00 | 显示全部楼层

    (if(= user_md "0")(setq d (nth (atoi d_n) s_d_list) l (nth (atoi l_n) s_l_list)) (setq d d1 l l1))

(unload_dialog id)
    (if (= sdt 1)
    (drawscrew s_t d l p0 alf cen_md cc tc sc)
  )

;把卸载对话框放在取值后面

 楼主| 发表于 2010-9-27 15:00:00 | 显示全部楼层
但是accept按键的动作设定里面,(getdata)是自定义的一个赋值函数,已经赋值完毕了。
发表于 2010-9-27 15:02:00 | 显示全部楼层

把全部程序贴出来,估计是变量局部化,,,,

 楼主| 发表于 2010-9-27 15:05:00 | 显示全部楼层

(defun c:screw(/ sdt d l x y p0 alf d_n l_n cc tc sc user_md d1 l1 cen_md)
     ;初始化变量、大径表和标准长度表
  (setq sdt 2
 s_t "0"
 d 10
 l 50
 x 200
 y 100
 alf 0
 d_n "5"
 l_n "7"
 cc 3
 tc 4
 sc 5
 user_md "0"
 d1 10
 l1 50
 cen_md "1"
 p0 (list x y)
  )
  (setq s_d_list (list 1.6 2 2.5 3 4 5 6 8 10 12 14 16 20))
  (setq
    s_l_list (list 2 2.5 3 4 5 6 8 10 12 14 16 20 25 30 35 40 45 50)
  )     ;定义初始化主对话框函数
  (defun initdlg1 ()
    (if (not (new_dialog "main_dlg" id))
      (exit)
    )
    (f_img "screw_0" "d:\\My Documents\\lisp\\13-1scr0");初始化图像按钮上
    (f_img "screw_1" "d:\\My Documents\\lisp\\13-1scr1")
    (f_img "screw_2" "d:\\My Documents\\lisp\\13-1scr2")
    (f_img "screw_3" "d:\\My Documents\\lisp\\13-1scr3");定义图像按钮的动作时确定螺钉的种类并且选中螺钉种类表的相应行
    (action_tile "screw_0" "(setq s_t \"0\")(set_tile \"s_type\" \"0\")")
    (action_tile "screw_1" "(setq s_t \"1\")(set_tile \"s_type\" \"1\")")
    (action_tile "screw_2" "(setq s_t \"2\")(set_tile \"s_type\" \"2\")")
    (action_tile "screw_3" "(setq s_t \"3\")(set_tile \"s_type\" \"3\")")
    (action_tile "s_type" "(f_stype)") ;定义螺钉种类列表的动作
    (action_tile "accept" "(done_dialog 2)") ;定义继续按钮的动作
    (action_tile "cancel" "(done_dialog 0)") ;定义退出按钮的动作
    (mode_tile "screw_0" 2)  ;聚焦在图像按钮screw_0上
    (set_tile "s_type" "0")  ;设置螺钉种类表的第一行为被选中状态
    (setq sdt (start_dialog))
  )
     ;定义初始化子对话框函数
  (defun initdlg2 (s_t)
    (if (not (new_dialog "children_dlg" id)) (exit))
    (setq sldname (strcat "d:\\My Documents\\lisp\\13-1screw"s_t));拼接幻灯片文件的名字和路径
    (f_img "id_img" sldname)  ;将幻灯片文件显示到图像按钮上
    (c_img "ccolor" cc)   ;填充中心线图像按钮的颜色
    (c_img "scolor" sc)
    (c_img "tcolor" tc)
    (set_tile "p_x" (rtos x 2 2)) ;设置定位点x编辑框的值
    (set_tile "p_y" (rtos y 2 2))
    (set_tile "alf" (rtos alf 2 2))
    (set_tile "user_d" (rtos d1 2 2))
    (set_tile "user_l" (rtos l1 2 2))
    (set_tile "user_dim" user_md) ;设置自定义尺寸切换开关的值
    (f_user user_md)   ;调用自定义尺寸函数
    (set_tile "cenline" cen_md)  ;设置中心线切换开关的值
    (action_tile "p_p" "(getdata)(done_dialog 3)");定义光标拾取定位点按钮的动作
    (action_tile "p_a" "(getdata)(done_dialog 4)");定义光标拾取旋转角按钮的动作
    (action_tile "ccolor" "(setq cc (c_c cc)) (c_img $key cc)");定义中心线图像接钮的动作是调用选择颜色对话框并将选择的颜色赋给该按钮
    (action_tile "tcolor" "(setq tc (c_c tc)) (c_img $key tc)")
    (action_tile "scolor" "(setq sc (c_c sc)) (c_img $key sc)")
    (action_tile "user_dim" "(f_user (get_tile \"user_dim\")) (getdata)");定义自定义尺寸切换开关的动作
    (action_tile "accept" "(getdata) (done_dialog 1)") ;定义OK按钮的动作
    (action_tile "cancel" "(done_dialog -1)") ;定义Cancel按钮的动作
    (setq sdt (start_dialog))
  )
     ;定义初始化图像函数
  (defun f_img (key sld)
    (start_image key)
    (slide_image 0 0 (dimx_tile key) (dimy_tile key) sld)
    (end_image)
  )
     ;定义获取AutoCAD标准颜色函数 
  (defun c_c (color / ccc)
    (setq ccc (acad_colordlg color nil))
    (if (not ccc) (setq ccc color))
    ccc
  )
     ;定义初始化颜色图像按钮数
  (defun c_img (key color)
    (if (>= color 0)
      (progn
 (start_image key)
 (fill_image 0 0 (dimx_tile key) (dimy_tile key) color)
 (end_image)
      )
    )
  )
     ;定义螺钉种类列表的动作函数
  (defun f_stype ()
    (setq s_t (get_tile "s_type")) ;将获得的螺钉种类赋给s_t
    (setq img_key (strcat "screw_"s_t)) ;拼接图像按钮的关键字
    (mode_tile img_key 2)  ;设置相应的图像按钮为聚焦状态
  )
     ;定义自定义尺寸函数
  (defun f_user (user_md)
    (if (= user_md "0")
      (progn    ;自定义尺寸切换开关为关闭状态时
 (mode_tile "user_d" 1)  ;禁用自定义大径编辑框
 (mode_tile "user_l" 1)  ;禁用自定义长度编辑框
 (mode_tile "s_d" 0)  ;设置大径列表为可用状态
 (mode_tile "s_l" 0)  ;设置长度列表为可用状态
 (set_tile "s_d" d_n)  ;设置大径列表的被选行号
 (set_tile "s_l" l_n)  ;设置长度列表的被选行号
      )
    (progn
      (mode_tile "s_d" 1)
      (mode_tile "s_l" 1)
      (mode_tile "user_d" 0)
      (mode_tile "user_l" 0)
      (set_tile "user_d" (rtos d1 2 2))
      (set_tile "user_l" (rtos l1 2 2))
    )
   )
  )
     ;定义获取所有控件当前数据的函数
  (defun getdata ()
    (setq l_n (get_tile "s_l"))  ;获取大径表被选项的序号
    (setq d_n (get_tile "d_l"))  ;获取大径表被选项的序号
    (setq x (atof (get_tile "p_x"))) ;获取x编辑框的值
    (setq y (atof (get_tile "p_y"))) ;获取y编辑框的值
    (setq alf (atof (get_tile "alf"))) ;获取alf编辑框的值
    (setq user_md (get_tile "user_dim")) ;获取自定义尺寸切换开关的值
    (setq d1 (atof (get_tile "user_d"))) ;获取自定义大径编辑框的值
    (setq l1 (atof (get_tile "user_l"))) ;获取自定义长度编辑框的值
    (setq cen_md (get_tile "cenline")) ;获取中心线切换开关的值
    (setq p0 (list x y))
  )
  (if(< (setq id (load_dialog "d:\\My Documents\\lisp\\main.dcl")) 0)(exit))
                                        ;装入对话框文件
  (initdlg1);初始化主对话框
  (while (> sdt 1);while 循环开始
    (initdlg2 s_t);初始化子对话框
    (if(= sdt 3)
       (progn ;用光标确定定位点
  (initget 1);禁止空输入
  (setq p0 (getpoint "输入定位点:"))
  (setq x (car p0) y (cadr p0))
       )
     )
    (if(= sdt 4)
      (progn ;用光标确定旋转角
 (initget 1);禁止空输入
 (setq ang (getangle p0 "输入旋转角:"))
 (setq alf (* 180.0 (/ ang pi)))
      )
    )
  );while循环结束
  (unload_dialog id)
    (if(= user_md "0")(setq d (nth (atoi d_n) s_d_list) l (nth (atoi l_n) s_l_list)) (setq d d1 l l1))
    (if (= sdt 1)
    (drawscrew s_t d l p0 alf cen_md cc tc sc)
    )
    (princ)
  )

 

 楼主| 发表于 2010-9-27 15:33:00 | 显示全部楼层

找到问题所在了,谢谢

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

本版积分规则

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

GMT+8, 2024-10-2 12:29 , Processed in 0.187510 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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