userzhl 发表于 2007-7-5 09:11:00

[求助]哪位高手请帮忙看看,出错了. 函数被取消

<p>(defun C:ZHL_CV&nbsp; (/ p1 p2 s e cn) <br/>&nbsp; (defun ttt (ss n / m) <br/>&nbsp;&nbsp;&nbsp; (setq ee e <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ns (ssadd) <br/>&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp; (while (setq ee (entnext ee)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ns (ssadd ee ns)) <br/>&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp; (command "erase" ns "") <br/>&nbsp;&nbsp;&nbsp; (command "copy" ss "" "m" "non" p1) <br/>&nbsp;&nbsp;&nbsp; (setq m 0) <br/>&nbsp;&nbsp;&nbsp; (repeat (atoi n) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq m (1+ m)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond <br/>&nbsp;&nbsp;&nbsp; (t <br/>&nbsp;&nbsp;&nbsp;&nbsp; (command "non" <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mapcar '(lambda (x y) (+ x (* m (- y x)))) p1 p2) <br/>&nbsp;&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp; ;(command) <br/>&nbsp; ) <br/>&nbsp; (princ "\n选择要复制的物体:") <br/>&nbsp; (setq s (ssget)) <br/>&nbsp; (setq p1 (getpoint "\n复制的起点:")) <br/>&nbsp; (setq p2 (getpoint p1 "\n复制的终点(输入距离或点取):")) <br/>&nbsp; (setq e (entlast)) <br/>&nbsp; (command "copy" s "" "non" p1 "non" p2) <br/>(setq dist (distance p1 p2))<br/>(setq xx_dis (getdist "\n确定距离: ")<br/>) <br/>&nbsp;(while (/= 0 (ATOF (setq cn (itoa (/ (fix xx_dis) (fix DIST))))))<br/>&nbsp;(ttt s cn) <br/>&nbsp;) <br/>&nbsp; (princ) <br/>)</p><p><br/>需要点或选项关键字。<br/>; 错误: 函数被取消</p><p>指定第二个点或 [退出(E)/放弃(U)] &lt;退出&gt;:&nbsp; *取消*<br/></p>

Andyhon 发表于 2007-7-5 10:19:00

<p>我这儿 Run 过关!?</p><p>请说明测试环境与单步执行时的出错点<br/>最好是顺带提供测试用图档</p>

userzhl 发表于 2007-7-5 11:35:00

<p>我的运行环境是CAD2006,我想在(setq xx_dis (getdist "\n确定距离: "))时,点取第二点后就结束命令,但在点取第二点是却出现:</p><p>需要点或选项关键字。<br/>; 错误: 函数被取消</p><p>指定第二个点或 [退出(E)/放弃(U)] &lt;退出&gt;:</p>

Andyhon 发表于 2007-7-5 12:37:00

<p>隔行如隔山 :-)</p><p>说实在的,您这个程序,还是不甚了了</p><p>有些叙述参不透个中玄机,可加注用意说明么<br/>若加上执行前图面,与本欲达成的目标图面 .....</p><p>getdist ==&gt;单纯的 keyin/给定两点 皆可<br/>看不出为何不行!?</p><p></p>

userzhl 发表于 2007-7-5 19:26:00

<p>这个程序是以前下的,我改了一下,功能是:</p><p>阵列复制</p>

Andyhon 发表于 2007-7-5 21:36:00

<p>阵列是阵列(Array)<br/>复制是复制(Copy)</p><p>什么是阵列复制? 附个截图如何?</p><p></p>

userzhl 发表于 2007-7-6 08:25:00

就是按一定的方向和一定的距离,在指定范围内进行复制!

zml84 发表于 2007-7-7 20:04:00

1、1楼的问题出在:(command "copy" s "" "non" p1 "non" p2) 一句。
2、2楼说运行过关,是因为2楼使用的是ACAD2005或其一下更低版本。
3、问题的关键在于acad在版本升级过程中对copy命令做了改动。
即将多重复制作为了默认。
代码高亮显示参见:http://zml84.blog.sohu.com/54114843.html


;;关闭命令回显
(setvar "CMDECHO" 0)
;;;================================================
;;功能:在指定的方向上定长复制
;;日期:zml84 于 2007-07-07
(defun C:tt (/ s p1 p2 ang dist xx_dis n)
    (princ "\n选择要复制的物体:")
    (if (and (setq s (ssget))
      (setq p1 (getpoint "\n1.复制的基点:"))
      (setq p2 (getpoint p1 "\n2.复制的目标点:"))
      (progn
   (setq ang(angle p1 p2)
         dist (distance p1 p2)
   )
   (princ "\n>>>复制间距=")
   (princ dist)
   (setq xx_dis (getdist p1 "\n3.确定距离范围: "))
      )
)
(progn
   (setq n (fix (/ xx_dis DIST)))
   (princ "\n>>>复制范围=")
   (princ xx_dis)
   (princ "   复制次数=")
   (princ n)
   (repeat n
;;小提示:acad2006及其以后版本的copy命令已默认为多重模式。
;;为了上下版本兼容,在下面一句中使用了"m"选项。
(command "_.copy" s "" "m" "non" p1 "non" p2 "")
(setq p2 (polar p2 ang dist))
   )
)
    ) ;_结束 if
    (princ)
) ;_结束 defun
;;;================================================

页: [1]
查看完整版本: [求助]哪位高手请帮忙看看,出错了. 函数被取消