求助高手解读程序
在下是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(>a -1)(< 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> ) 附:其中的参数含义:
;hccds用于标注粗糙度
;C为粗糙度符号选择
;d为粗糙度符号旋转角度选择:1代表0度,2代表90度,3代表180度,4代表270度,5代表angle所表示的角度
;pt1为插入粗糙度符号基准点的坐标
;st为粗糙度文字
;angle为旋转角度,当d取1,2,3,4时,angle为 "",即为空值 (setq a1(angtos (+ a pi) 0 0)
这句加个括号
(setq a1(angtos (+ a pi) 0 0))
angle是不能作为参数的,你可以使用ang或别的字母代替 谢谢你替我找出了这两个错误,太感谢了.我还想请教一个问题,我刚才该改过之后(除了第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(>a -1)(< 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> ) 这个程序有太多错误了(主要是有些变量没有赋值就直接使用,还有一个书写错误),无法使用,
函数的调用不是在命令行输入函数,而是这样(注意包括括号):
(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 (> a -1) (< 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>) 您的改动比较成功,不过现在还有一点就是:粗糙度文字的问题,
1。粗糙度文字不能随着插入的土块的旋转而旋转,
2。文字位置。文字无法在粗糙度符号的之线上方,而在其中的一条斜线的上,与此斜线交在一起 还有pt2的作用没有体现出来 这样你又何必用这个程序,让别人直接给你写一个不就可以了吗 在命令行输入:(hccds)
试试! 5楼已给过用法,楼上的这样不正确,还有很多参数未给出
页:
[1]
2