本帖最后由 zml84 于 2012-10-19 14:27 编辑
ttttttttt.LSP
;|http://bbs.mjtd.com/forum.php?mod=viewthread&tid=95983&extra=page%3D1%26filter%3Dtypeid%26typeid%3D22%26typeid%3D22
运行的时候如果把红色的行启用就会得到 数据类型不正确 number nil的信息
红色的语句行如果不启用,那么运行的时候只要点了插入图形 就会导致cad崩溃死掉。。。。。
求高手指点啊。。。。
|;
;;;=================================================================*
(defun c:tt () (c:nqy))
;;;=================================================================*
(defun c:nqy (/ nq_dcl test tmp)
;;初始值
(or *r0 (setq *r0 10.0))
(or *n (setq *n 2))
(setq nq_dcl (load_dialog (nqy-makedcl)))
;;
(setq test t)
(while test
(setq tmp (nqy-showdcl *n *r0))
(cond ((= tmp 2)
;;貌似无意义。因为dcl内即可输入。
;;可修改为点取一个圆对象,进而获取半径。
(if (setq r0_new (getdist "\n请输入新的半径值:"))
(setq *r0 r0_new)
)
)
((= tmp 1)
(and (setq pt0 (getpoint "选取大圆圆心"))
(nqy-draw *r0 *n pt0)
(setq test nil)
)
)
(t (setq test nil))
)
)
(princ)
)
;;;=================================================================*
;;;显示对话框
(defun nqy-showdcl (n r0)
(new_dialog "nq" nq_dcl)
(set_tile "nqn" (itoa n))
(set_tile "Rd" (rtos r0 2 2))
(mode_tile "nqn" 2)
(action_tile "Rd1" "(done_dialog 2)")
(action_tile "cancel" "(done_dialog 0)")
(action_tile "crtx" "(nqy-finish)(done_dialog 1)")
(start_dialog)
)
;;;=================================================================*
(defun nqy-finish ()
(setq *r0 (atof (get_tile "Rd")))
(setq *n (atoi (get_tile "nqn")))
)
;;;=================================================================*
;;;功能:画图 *
;;;参数:real_r int_n *
;;; 算法貌似有误,不做深究。 *
(defun nqy-draw (r0 n pt0 / c a1 s1 r1 l c1 circle1)
(if (and (> r0 0) (> n 1))
(progn
(setq c pt0
a1 (/ (/ pi n) 2)
s1 (sin a1)
r1 (* (/ r0 (+ 1 s1)) s1)
l (/ r1 s1)
c1 (polar c (/ pi 2) l)
)
(command "circle" "non" c r0 "circle" "non" c1 r1)
(setq circle1 (entlast))
(command "array" circle1 "" "p" "non" c n 360 "Y")
t
)
)
)
;;;=================================================================*
;;;生成日期:20121019.133239
;;;本文件由程序自动生成。 *
;;;示例:(nqy-makedcl) *
(defun nqy-makedcl (/ lst_str str file f)
(setq lst_str '("nq:dialog{"
" label=\"内切圆测试演示\";"
" :column{"
" :boxed_column{"
" :edit_box { label = \"内切圆数量\";"
" key = \"nqn\";"
" }"
" spacer_1;"
" :row {"
" :edit_box{label = \"大圆半径\";"
" key = \"Rd\";}"
" :button {label = \"选取半径\"; "
" key = \"Rd1\";}"
" }"
" }"
" spacer_1;"
" :row{ :button {label = \"插入图形\";"
" key = \"crtx\";}"
" "
" cancel_button;}"
" }"
" }"
)
)
(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
)
;;;=================================================================*
(princ)
|