328302216 发表于 2011-12-20 17:39:52

DCL对话框高手路过的帮忙看看哪出问题了!

本帖最后由 328302216 于 2011-12-21 10:47 编辑

《AutoCAD完全应用指南》P282页的代码,执行之后没有得到书上的结果,是不是书上的代码本身有问题? (defun c:dia5b()
(setvar "cmdecho" 0)
(dcl_dia5b)
(prin1)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun dcl_dia5b()          ;子程序
(setq dcl_id (load_dialog "dia5b"))      ;加载dcl文件
(new_dialog "dia5b" dcl_id)      ;启动dia5b对话框
(set_tile "kww" "50")          ;设置ww起始值
(set_tile "khh" "50")          ;设置hh起始值
(action_tile "bb1" "(get_ww_hh) (done_dialog 1)");退出对话框并返回1
(action_tile "bb2" "(get_ww_hh) (done_dialog 2)");……………………2
(action_tile "bb3" "(get_ww_hh) (done_dialog 3)");……………………3
(setq dd (start_dialog))
(cond ((= dd 1) (c:dia5b1))
((= dd 2) (c:dia5b2))
((= dd 3) (c:dia5b3))
(t (alert "\n未完成任何操作!!!"))
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun get_ww_hh()          ;获取对话框的ww与hh值
(setq ww (atof (get_tile "kww")))
(setq hh (atof (get_tile "khh")))
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:dia5b1()          ;L形主程序
(setvar "cmdecho" 0)
(get_input_data)
(command "pline" p1 p2 p3 pm34 pm pm14 "c")
(prin1)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:dia5b2()          ;X行子程序
(setvar "cmdecho" 0)
(get_input_data)
(command "pline" p1 p2 p3 p4 "c")
(command "line" p1 p3 "")
(command "line" p2 p4 "")
(prin1)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:dia5b3()          ;沙漏型子程序
(setvar "cmdecho" 0)
(get_input_data)
(command "pline" p1 p2 p4 p3 "c")
(prin1)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun get_input_data()
;;;(setq ww (getreal "宽度 WW:"))
;;;(setq hh (getreal "\n高度 HH:"))
(setq p1 (getpoint "\n插入点:"))
(setq p2(polar p1 0 ww))
(setq p3 (polar p2 (* pi 0.5) hh))
(setq p4 (polar p3 pi ww))
(setq pm (inters p1 p3 p2 p4))
(setq pm12 (polar p1 0 (* ww 0.5)))
(setq pm34 (polar p3 pi (* ww 0.5)))
(setq pm23 (polar p2 (* pi 0.5) (* hh 0.5)))
(setq pm14 (polar p1 (* pi 0.5) (* hh 0.5)))
)
路过的帮忙看看!执行后弹出的是子程序(defun dcl_dia5b)里面的“未完成任何操作!!!”

328302216 发表于 2011-12-21 11:27:08

哪位大哥有《AutoCAD完全应用指南》这本书的?或者其他高手帮忙看看是哪里的问题啊
不过我觉得《AutoCAD完全应用指南》这本书错误的地方也真的有点多!!!

328302216 发表于 2011-12-21 17:33:59

各位大侠们,帮看看到底要怎么整才有效果啊!是书上错的还是我操作的问题?我按照书上一步一步的操作还是得不到效果啊!后面的这个也得不到效果!
dia5d:dialog{
label="对话框<text>文字实例测试";
:concatenation{
:text_part {label="共选择了[";}
:text{width=6;key="t_cir";}
:text_part{label="]个 CIRCLE";}
}
:concatenation{
:text_part {label="共选择了[";}
:text{width=6;key="t_line";}
:text_part{label="]个 LINE";}
}
:concatenation{
:text_part {label="共选择了[";}
:text{width=6;key="t_text";}
:text_part{label="]个 TEXT";}
}
ok_cancel;
}
(defun c:dia5d()
(setvar "cmdecho" 0)
(sub_dia5d)    ;调用子程序
(if ss (dcl_dia5d));调用对话框子程序
(prin1)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun sub_dia5d()
(setq ss (ssget));选择对象
(if(null ss)(setq ss (ssadd)));如果ss不存在,设置ss为空选集
(setq cir_num 0 line_num 0 text_num 0);设置默认起始值
(setq n 0)
(repeat (sslength ss)
    (setq en (ssname ss n))
    (setq entype (cdr (assoc 0 (entget en))));获取对象类别
    (cond ((= entype "CIRCLE") (setq cir_num (+ 1 cir_num)))
    ((= entype "LINE") (setq line_num (+ 1 line_num)))
    ((= entype "TEXT") (setq text_num (+ 1 text_num)))
      )
    (setq n(+ 1 n))
    )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun dcl_dia5d()
(setq dcl_id (load_dialog "dia5d"));加载DCL文件
(if (not (new_dialog "dia5d" dcl_id))(exit));启动对话框
(set_tile "t_cir" (itoa cir_num));显示圆的统计数量于对话框
(set_tile "t_line" (itoa line_num));显示直线的统计数量于对话框
(set_tile "t_text" (itoa text_num));显示文字的统计数量与对话框
(setq dd (start_dialog))
)

328302216 发表于 2011-12-21 17:36:43

后面的这个也是书上面的,对于各位老大们来说帮可能的只是一个小忙,但是对于我来说可是大忙了!

328302216 发表于 2011-12-21 17:44:11

终于自己整出来了

pw2543 发表于 2012-4-20 22:54:25


大半个月也没人来过

zhangcan0515 发表于 2022-4-22 21:35:07

没有啥问题,需要仔细一点
页: [1]
查看完整版本: DCL对话框高手路过的帮忙看看哪出问题了!