明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1505|回复: 6

求助。。。新手第一个程序求助

[复制链接]
发表于 2012-8-13 18:29:53 | 显示全部楼层 |阅读模式
本帖最后由 深空星海之主 于 2012-8-13 19:21 编辑

(defun c:nqy ()
  (setq dd 1)
  (setq r0 "0")
  (setq n "2")
;;;  (while (or (= dd 1) (= dd 2))
    (setq nq_dcl (load_dialog "nq"))
    (new_dialog "nq" nq_dcl)
    (set_tile "nqn" n)
    (set_tile "Rd" r0)
    (mode_tile "nqn" 2)
;;;    (action_tile "Rd1" "(getR) (done_dialog 2) (getR1)")
    (action_tile "cancel" "(done_dialog 0)")
    (action_tile "nqn" "(checkn)")
    (action_tile "Rd" "(checkn)")
    (action_tile "crtx" "(finish)(done_dialog 1)")
    (setq dd (start_dialog))
;;;  )
)



(defun checkn ()   ;n整数确定
  (setq n (atof (get_tile "nqn")))
  (setq nn (fix n))
  (setq cp (- n nn))
)

(defun finish ()   ;主画图计算程序
  (if (/= cp 0)
    (alert "内切圆数量必须是整数")
    (progn (setq r0 (atof (get_tile "Rd")))
    (setq n (atoi (get_tile "nqn")))
    ;;(setq c (getpoint "选取大圆圆心"))
           (setq c '(0 0))                           ;;;c点圆心测试,启用上面一行就把这一行注释掉
    (setq a1 (/ (/ pi n) 2))
    (setq s1 (sin a1))
    (setq r1 (* (/ r0 (+ 1 s1)) s1))
    (setq l (/ r1 s1))
    (setq c1 (polar c (/ pi 2) l))
    (command "circle" c r0)
    (command "circle" c1 r1)
    (setq circle1 (entlast))
    (command "array" circle1 "" "p" c n 360 "Y")
           (setq r0 (rtos r0 2))
           (setq n (itoa n))
    )
  )
)
;;;
;;;(defun getR ()
;;;  
;;;  (setq r0 (getdist))
;;;  (setq r0 (rtos r0 2))
;;;  
;;;)
;;;(defun getR1()
;;;
;;;(setq n (get_tile "nqn")
;;;)
;;;)
-------------------------------------------以上是lisp主程序-----------------------------------------

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;}
      }
      }
-----------------------------------以上是dcl代码-----------------------------------------

运行的时候如果把红色的行启用就会得到  数据类型不正确 number nil的信息

红色的语句行如果不启用,那么运行的时候只要点了插入图形 就会导致cad崩溃死掉。。。。。

求高手指点啊。。。。
 楼主| 发表于 2012-8-13 18:42:34 | 显示全部楼层
自己顶。。。。
发表于 2012-8-13 21:11:46 | 显示全部楼层
老毛病了。未退出对话框不能使用COMMAND和GET系列函数。
 楼主| 发表于 2012-8-13 23:29:41 | 显示全部楼层
但是 您看啊。。。我把get去掉以后 cad直接就崩溃了。。。。而且那个getpoint我是放在done_dialog后面。。。这么写不可以么。。。
发表于 2012-10-19 14:26:51 | 显示全部楼层
本帖最后由 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)
发表于 2012-10-19 14:50:37 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-1-13 21:48:26 | 显示全部楼层
[em0]高!有没有可以实现批量画三角形的内切圆?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-1 23:40 , Processed in 0.183249 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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