明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2455|回复: 12

求助高手解读程序

  [复制链接]
发表于 2004-9-17 07:51:00 | 显示全部楼层 |阅读模式
在下是VLisp的小字辈。下面是我在一本书上件到的一个标注粗糙度的程序,我看不懂。有哪位仁兄能够帮助小弟解读这个程序的总体思路流程?先谢谢了! 并且在加载此程序的事后提示:; 错误: 输入的列表有缺陷 (defun hccds(f d pt1 st angle)
(setvar "cmdecho" 0)
(initget 4)
(setq a 0)
(if (= d 2 ) (setq a ( / pi 2)))
(if (= d 3 ) (setq a pi))
(if (= d 4 ) (setq a (* pi 1.5)))
(if (= d 5 ) (setq a angle))
(if (setq pt(osnap ptq "nea"))(setq pt1 pt))
(setq pt2(osnap pt1 "end"))
(if (= d 0)(setq a(angle pt1 pt2)))
(if (= a 0)(setq a1 0)(setq a1(angtos a 0 0)))
(command "insert" f pt1 sca "" a1)
(if (and(>a -1)(< a 2))
(setq cc( polar pt1 (+ a(/ pi 2))(* 5.4 sca)))
(progn ( setq cc (polar pt1(+ a(/ pi 2))(* 7.8 sca)))
(setq a1(angtos (+ a pi) 0 0)
)
)
(command "text""c" cc (* 2 sca ) a1 st)
)
 楼主| 发表于 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为 "",即为空值
发表于 2004-9-17 08:36:00 | 显示全部楼层
(setq a1(angtos (+ a pi) 0 0)


这句加个括号


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


angle是不能作为参数的,你可以使用ang或别的字母代替
 楼主| 发表于 2004-9-17 09:22:00 | 显示全部楼层
谢谢你替我找出了这两个错误,太感谢了.我还想请教一个问题,我刚才该改过之后(除了第11行的angle没改),已经可以加载了.但是,当我加载后,在CAD下面的命令行里面输入hccds时,提示没有hccds函数,可是明明加载了,请再详细一点教给我应该怎么具体的去做吧。另外,我对程序的辩证思路还不了解,这个程序到底怎么实现标注粗糙度的? 附:按您的要求修改过的程序 (defun hccds(f d pt1 st ang)
(setvar "cmdecho" 0)
(initget 4)
(setq a 0)
(if (= d 2 ) (setq a ( / pi 2)))
(if (= d 3 ) (setq a pi))
(if (= d 4 ) (setq a (* pi 1.5)))
(if (= d 5 ) (setq a ang))
(if (setq pt(osnap ptq "nea"))(setq pt1 pt))
(setq pt2(osnap pt1 "end"))
(if (= d 0)(setq a(angle pt1 pt2)))
(if (= a 0)(setq a1 0)(setq a1(angtos a 0 0)))
(command "insert" f pt1 sca "" a1)
(if (and(>a -1)(< a 2))
(setq cc( polar pt1 (+ a(/ pi 2))(* 5.4 sca)))
(progn ( setq cc (polar pt1(+ a(/ pi 2))(* 7.8 sca)))
(setq a1(angtos (+ a pi) 0 0))
)
)
(command "text""c" cc (* 2 sca ) a1 st)
)
发表于 2004-9-17 09:47:00 | 显示全部楼层
这个程序有太多错误了(主要是有些变量没有赋值就直接使用,还有一个书写错误),无法使用, 函数的调用不是在命令行输入函数,而是这样(注意包括括号): (hccds "A" 1 (GETPOINT) "3.2" "") 我把程序改了一下,勉强能用,但不知道是否是要的结果 (defun hccds (f d pt1 st ang)
(setvar "cmdecho" 0)
(setq sca 1)
(initget 4)
(setq a 0)
(if (= d 2)
(setq a (/ pi 2))
)
(if (= d 3)
(setq a pi)
)
(if (= d 4)
(setq a (* pi 1.5))
)
(if (= d 5)
(setq a ang)
)
(if (setq pt (osnap pt1 "nea"))
(setq pt1 pt)
)
(setq pt2 (osnap pt1 "end"))
(if (= d 0)
(setq a (angle pt1 pt2))
)
(if (= a 0)
(setq a1 0)
(setq a1 (angtos a 0 0))
)
(command "insert" f pt1 sca "" a1)
(if (and (> a -1) (< a 2))
(setq cc (polar pt1 (+ a (/ pi 2)) (* 5.4 sca)))
(progn (setq cc (polar pt1 (+ a (/ pi 2)) (* 7.8 sca)))
(setq a1 (angtos (+ a pi) 0 0))
)
)
(command "text" "c" cc (* 2 sca) a1 st)
)
 楼主| 发表于 2004-9-17 10:58:00 | 显示全部楼层
您的改动比较成功,不过现在还有一点就是:粗糙度文字的问题,


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


2。文字位置。文字无法在粗糙度符号的之线上方,而在其中的一条斜线的上,与此斜线交在一起
 楼主| 发表于 2004-9-17 11:01:00 | 显示全部楼层
还有pt2的作用没有体现出来
发表于 2004-9-17 12:16:00 | 显示全部楼层
这样你又何必用这个程序,让别人直接给你写一个不就可以了吗
发表于 2004-9-18 21:15:00 | 显示全部楼层
在命令行输入:(hccds)


试试!
发表于 2004-9-19 11:16:00 | 显示全部楼层
5楼已给过用法,楼上的这样不正确,还有很多参数未给出
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 15:43 , Processed in 0.201181 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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