crazylsp 发表于 2013-10-22 16:25:07

请教DCL问题

本帖最后由 crazylsp 于 2013-10-22 16:59 编辑

为什么1选择"一线"和"全部"按钮都是调用一线的子程序cc1, cc2如何才能调用呢?2文本框的值无法获取,get_title "kd"没有值。3删除对话框文件貌似无法删除 有谁可知道原因呢。

;加宽拾取的一个片断的线
(defun cc1 ()
( setq
         vo(vlax-ename->vla-object (car(setq et(entsel"选择多段线" ))))
         pt(cadr et)
         pte (vlax-curve-getclosestpointto vo pt )
         n   (fix ( vlax-curve-getparamatpoint vo pte ) )
)
( vlax-invoke-method vo 'setwidth n (setq wd(getdist)) wd )
)
;加宽全部的
(defun cc2 ()
(command "pedit" "m" (ssget) "" "w" (getdist) "")
)

(defun c:cc ()
;建立临时对话框
(setq tempname (vl-filename-mktemp "d:/temp.dcl") ;返回路径
         filen    (open tempname "w") ;打开文件并覆盖 无文件会自动建文件
         stream
      "cc:dialog{
      \n label =\"多段线加宽\";
      \n :edit_box{label=\"多段线宽度: \";key=\"kd\";width=3;value=\"0.35\";}
      \n :radio_column{key=\"ak\";:radio_button{label=\"加宽拾取的一段\";key =\"1\";}}
      \n :radio_column{key=\"bp\";:radio_button{label=\"加宽全部的\";key =\"2\";}}
      \nok_cancel;}
         "
)
(write-line streamfilen) ;将字符写入文件
(close filen) ;关闭文件才能将字符写入
(setq dclname tempname)
(setq dcl_re (load_dialog dclname)) ;装入指定对话框文件
(new_dialog "cc" dcl_re) ;初始化对话框
;(if (not(new_dialog "cc" dcl_re))(progn (princ"无对话框")(exit))) ;无对话框定义退出
(setq std (start_dialog)) ;启动对话框
;(setq kd (atof(get_tile "kd"))) ;获得当前值
(action_tile "ak" (cc1))
(action_tile "bp" (cc2))
(action_tile "accept" "(done_dialog 1)") ;终止显示当前对话框
(action_tile "cancel" "(done_dialog)") ;终止显示当前对话框
(unload_dialog dcl_re);卸载指定对话框文件
;(vl-file-delete dclname);删除对话框文件
(vl-file-delete dcl_re)
(princ)
)

飞跃重生 发表于 2013-11-27 19:10:07

 把这句 ' (setq std (start_dialog)) ;启动对话框' 移到'(unload"_dialog dcl_re)'前面即可。
页: [1]
查看完整版本: 请教DCL问题