wensongwu 发表于 2004-9-17 07:51:00

求助高手解读程序

在下是VLisp的小字辈。下面是我在一本书上件到的一个标注粗糙度的程序,我看不懂。有哪位仁兄能够帮助小弟解读这个程序的总体思路流程?先谢谢了!


并且在加载此程序的事后提示:; 错误: 输入的列表有缺陷


(defun hccds(f d pt1 st angle)<BR>       (setvar "cmdecho" 0)<BR>       (initget 4)<BR>       (setq a 0)<BR>       (if (= d 2 ) (setq a ( / pi 2)))<BR>       (if (= d 3 ) (setq a pi))<BR>       (if (= d 4 ) (setq a (* pi 1.5)))<BR>       (if (= d 5 ) (setq a angle))<BR>       (if (setq pt(osnap ptq "nea"))(setq pt1 pt))<BR>       (setq pt2(osnap pt1 "end"))<BR>       (if (= d 0)(setq a(angle pt1 pt2)))<BR>       (if (= a 0)(setq a1 0)(setq a1(angtos a 0 0)))<BR>       (command "insert" f pt1 sca "" a1)<BR>       (if (and(&gt;a -1)(&lt; a 2))<BR>                       (setq cc( polar pt1 (+ a(/ pi 2))(* 5.4 sca)))<BR>                       (progn ( setq cc (polar pt1(+ a(/ pi 2))(* 7.8 sca)))<BR>                                       (setq a1(angtos (+ a pi) 0 0)<BR>               )<BR>               )<BR>                       (command "text""c" cc (* 2 sca ) a1 st)<BR>                       )

wensongwu 发表于 2004-9-17 08:35:00

附:其中的参数含义:


;hccds用于标注粗糙度


;C为粗糙度符号选择


;d为粗糙度符号旋转角度选择:1代表0度,2代表90度,3代表180度,4代表270度,5代表angle所表示的角度


;pt1为插入粗糙度符号基准点的坐标


;st为粗糙度文字


;angle为旋转角度,当d取1,2,3,4时,angle为 "",即为空值

meflying 发表于 2004-9-17 08:36:00

(setq a1(angtos (+ a pi) 0 0)


这句加个括号


(setq a1(angtos (+ a pi) 0 0))


angle是不能作为参数的,你可以使用ang或别的字母代替

wensongwu 发表于 2004-9-17 09:22:00

谢谢你替我找出了这两个错误,太感谢了.我还想请教一个问题,我刚才该改过之后(除了第11行的angle没改),已经可以加载了.但是,当我加载后,在CAD下面的命令行里面输入hccds时,提示没有hccds函数,可是明明加载了,请再详细一点教给我应该怎么具体的去做吧。另外,我对程序的辩证思路还不了解,这个程序到底怎么实现标注粗糙度的?


附:按您的要求修改过的程序


(defun hccds(f d pt1 st ang)<BR>       (setvar "cmdecho" 0)<BR>       (initget 4)<BR>       (setq a 0)<BR>       (if (= d 2 ) (setq a ( / pi 2)))<BR>       (if (= d 3 ) (setq a pi))<BR>       (if (= d 4 ) (setq a (* pi 1.5)))<BR>       (if (= d 5 ) (setq a ang))<BR>       (if (setq pt(osnap ptq "nea"))(setq pt1 pt))<BR>       (setq pt2(osnap pt1 "end"))<BR>       (if (= d 0)(setq a(angle pt1 pt2)))<BR>       (if (= a 0)(setq a1 0)(setq a1(angtos a 0 0)))<BR>       (command "insert" f pt1 sca "" a1)<BR>       (if (and(&gt;a -1)(&lt; a 2))<BR>                       (setq cc( polar pt1 (+ a(/ pi 2))(* 5.4 sca)))<BR>                       (progn ( setq cc (polar pt1(+ a(/ pi 2))(* 7.8 sca)))<BR>                                       (setq a1(angtos (+ a pi) 0 0))<BR>               )<BR>               )<BR>                       (command "text""c" cc (* 2 sca ) a1 st)<BR>                       )

meflying 发表于 2004-9-17 09:47:00

这个程序有太多错误了(主要是有些变量没有赋值就直接使用,还有一个书写错误),无法使用,


函数的调用不是在命令行输入函数,而是这样(注意包括括号):


(hccds "A" 1 (GETPOINT)        "3.2" "")


我把程序改了一下,勉强能用,但不知道是否是要的结果


(defun hccds (f d pt1 st ang)<BR>       (setvar "cmdecho" 0)<BR>       (setq sca 1)<BR>       (initget 4)<BR>       (setq a 0)<BR>       (if (= d 2)<BR>                       (setq a (/ pi 2))<BR>       )<BR>       (if (= d 3)<BR>                       (setq a pi)<BR>       )<BR>       (if (= d 4)<BR>                       (setq a (* pi 1.5))<BR>       )<BR>       (if (= d 5)<BR>                       (setq a ang)<BR>       )<BR>       (if (setq pt (osnap pt1 "nea"))<BR>                       (setq pt1 pt)<BR>       )<BR>       (setq pt2 (osnap pt1 "end"))<BR>       (if (= d 0)<BR>                       (setq a (angle pt1 pt2))<BR>       )<BR>       (if (= a 0)<BR>                       (setq a1 0)<BR>                       (setq a1 (angtos a 0 0))<BR>       )<BR>       (command "insert" f pt1 sca "" a1)<BR>       (if (and (&gt; a -1) (&lt; a 2))<BR>                       (setq cc (polar pt1 (+ a (/ pi 2)) (* 5.4 sca)))<BR>                       (progn (setq cc (polar pt1 (+ a (/ pi 2)) (* 7.8 sca)))<BR>                       (setq a1 (angtos (+ a pi) 0 0))<BR>                       )<BR>       )<BR>       (command "text" "c" cc (* 2 sca) a1 st)<BR>)

wensongwu 发表于 2004-9-17 10:58:00

您的改动比较成功,不过现在还有一点就是:粗糙度文字的问题,


1。粗糙度文字不能随着插入的土块的旋转而旋转,


2。文字位置。文字无法在粗糙度符号的之线上方,而在其中的一条斜线的上,与此斜线交在一起

wensongwu 发表于 2004-9-17 11:01:00

还有pt2的作用没有体现出来

meflying 发表于 2004-9-17 12:16:00

这样你又何必用这个程序,让别人直接给你写一个不就可以了吗

torcky 发表于 2004-9-18 21:15:00

在命令行输入:(hccds)


试试!

meflying 发表于 2004-9-19 11:16:00

5楼已给过用法,楼上的这样不正确,还有很多参数未给出
页: [1] 2
查看完整版本: 求助高手解读程序