zkq1212 发表于 2014-7-17 14:30:01

帮我看一下哪里有问题?

lisp文件如下。运行时总是提示缺少函数
(DEFUN C:e00(/DT DT1 DT2 DT3);标注加前后缀
(setvar "cmdecho" 0)
(setq sys (getvar "osmode"))
(setvar "osmode" 0)
(setqdcl_id (load_dialog "e00"))
(new_dialog "e00" dcl_id)
(action_tile "DT1" "(setq DT1 $value)")
(action_tile "DT2" "(setq DT2 $value)")
(start_dialog)
(setq DT3 "<>")
(setq DT (STRCAT DT1 DT3DT2 ))
(COMMAND "_DIMOVERRIDE" "DIMPOST" DT"")
(setvar "osmode" sys)
(setvar "cmdecho" 1)
(PRINC)
)

对话框文件
e00:dialog{
label="添加标注前后缀";
    :edit_box{
    label="标注前缀";
    edit_width=10;
    key="DT1";
   }   
    :edit_box{
   label="标注后缀";
   edit_width=10;
    key="DT2";
   }
    ok_cancel;
}

ll_j 发表于 2014-7-17 15:18:53

问题出在第一行声明局部参数的时候/后面少一个空格,另外,在strcat一句前面应该对dt1和dt2是否为空进行判别。

zkq1212 发表于 2014-7-18 09:04:23

ll_j 发表于 2014-7-17 15:18 static/image/common/back.gif
问题出在第一行声明局部参数的时候/后面少一个空格,另外,在strcat一句前面应该对dt1和dt2是否为空进行判别 ...

O(∩_∩)O谢谢。再问一下在strcat一句前面应该对dt1和dt2是否为空进行判别怎么做?
下面的程序是不是不用加?
(DEFUN C:e00(/ DT DT1 DT2 DT3)
(setvar "cmdecho" 0)
(setq sys (getvar "osmode"))
(setvar "osmode" 0)
(setq DT1 (getstring"标注前缀"))
(setq DT2 (getstring"标注后缀"))
(setq DT3 "<>")
(setq DT (STRCAT DT1 DT3DT2 ))
(COMMAND "_DIMOVERRIDE" "DIMPOST" DT"")
(setvar "osmode" sys)
(setvar "cmdecho" 1)
(PRINC)
)

ll_j 发表于 2014-7-18 09:23:14

zkq1212 发表于 2014-7-18 09:04 http://bbs.mjtd.com/static/image/common/back.gif
O(∩_∩)O谢谢。再问一下在strcat一句前面应该对dt1和dt2是否为空进行判别怎么做?
下面的程序是不是不用 ...

getstring是允许空输入的,空输入返回空字符串"",所以不需要判别,前面的对话框没做判别,空输入则返回nil,程序出错,所以在strcat一句之前,应该加上判别,可以这样:
(if (not dt1) (setq dt1 ""))
(if (not dt2) (setq dt2 ""))
(setq dt (strcat...

zkq1212 发表于 2014-7-18 10:11:14

ll_j 发表于 2014-7-18 09:23 static/image/common/back.gif
getstring是允许空输入的,空输入返回空字符串"",所以不需要判别,前面的对话框没做判别,空输入则返回 ...

O(∩_∩)O谢谢,全部改好了。

(DEFUN C:EDIM2(/ DT DT1 DT2 DT3)
(vl-load-com)
(setvar "cmdecho" 0)
(setq sys (getvar "osmode"))
(setvar "osmode" 0)
(setq dclname (vl-filename-mktemp "re-dcl-tmp.dcl"))
               (setq filen (open dclname "w"))
               (write-line "RENAME:dialog {" filen)
               (write-line "    label = \"标注添加前后缀\" ;" filen)
               (write-line "      :edit_box {label = \" 前缀:\";    key = \"DT1\" ;}" filen)
               (write-line "      :edit_box {label = \" 后缀:\";    key = \"DT2\" ;}" filen)
               (write-line "    :row {" filen)
               (write-line "      :button {is_default = true ; key = \"done_dialog \" ; label = \"确认\" ; }" filen)
               (write-line "      :button { is_cancel = true ; key = \"btn_cancle\" ; label = \"取消\" ; }" filen)
               (write-line "      }}" filen)
               (close filen)
               (setq dcl_re (load_dialog dclname))
               (new_dialog "RENAME" dcl_re)
               (action_tile "DT1" "(setq DT1 $value)")
               (action_tile "DT2" "(setq DT2 $value)")
               (start_dialog)
               (unload_dialog dcl_re)
               (vl-file-delete dclname)
(if (= NIL dt1) (setq dt1 " "))
(if (= NIL dt2) (setq dt2 " "))
(setq DT3 "<>")
(setq DT (STRCAT DT1 DT3DT2 ))
(COMMAND "_DIMOVERRIDE" "DIMPOST" DT"")
(setvar "osmode" sys)
(setvar "cmdecho" 1)
(PRINC)
)

xyp1964 发表于 2014-7-18 10:41:37

(defun c:tt (/ ilst)
(defun main-pro (/ dt)
    (setq dt (strcat t1 "<>" t2))
    (command "_dimoverride" "dimpost" dt "")
)
(xyp-initSet '(t1 t2) '("" ""))
(setq ilst '(("t1" "前缀" "str" "12")
               ("t2" "后缀" "str" "12")
               "spacer;"
            )
)
(if (= (xyp-Dcl-Init Ilst "【标注添加前后缀】" t) 1)
    (main-pro)
)
(princ)
)

zkq1212 发表于 2014-7-18 10:43:14

本帖最后由 zkq1212 于 2014-7-18 11:59 编辑

xyp1964 发表于 2014-7-18 10:41 static/image/common/back.gif

对方没有e派工具箱,我一个朋友,cad小白一个尺寸经常被改的很乱。
页: [1]
查看完整版本: 帮我看一下哪里有问题?