明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2072|回复: 10

看看偶的程序,我的第一个AL程序!大家重视啊!

[复制链接]
发表于 2004-12-9 17:44:00 | 显示全部楼层 |阅读模式
我想实现的功能是:1、画一条直线,无论怎么画都是水平方向的。 2、做一半径为5的圆。从距离直线始点50的位置开始,在此直线上向后排开来(圆心都在直线上),但不许超越所画直线的长度。 程序我是第一次接触AL做的,所以大家别笑啊!
(defun c:canal()
(setq base (getpoint"路线起点")) ;;获取起点坐标
(setq center (getpoint"路线终点")) ;;获取终点坐标
(setq end(list (car center) (cadr base))) ;;固定纵坐标
(command "line" base end "") ;;做直线
(setq len1 (car base))
(setq len2 (car end))
(setq lenth(-len2 len1))
(setq lenth1(list(+(car base) 50) (cadr base))
(command "circle"lenth1 5"")
(while (>=lenth 50)
(setq lenth2 (list(+(car lent1) 50) (cadr base))
( command "circle" lenth2 5"")
(PRINC)
(setq lenth (+ lenth 50))
)
 楼主| 发表于 2004-12-9 17:59:00 | 显示全部楼层
还有啊,就是在画直线的时候,为什么看不到终点跟随十字光标拖动的壮景!
发表于 2004-12-9 20:09:00 | 显示全部楼层
呵呵,好久没玩 LISP 了 (defun c:canal (/ base center end len1 len2 lenth i cir-center)
(setq base (getpoint "路线起点"))
;;获取起点坐标
(setq center (getpoint base "路线终点"))
;;获取终点坐标
(setq end (list (car center) (cadr base)))
;;固定纵坐标
(command "line" base end "")
;;做直线
(setq len1 (car base))
(setq len2 (car end))
(setq lenth (- len2 len1))
(setq i 0)
(while (> lenth 50)
(setq i (1+ i))
(setq lenth (- lenth 50))
(setq cir-center (list (+ (car base) (* 50 i)) (cadr base)))
(command "circle" cir-center 5)
)
(princ)
)
发表于 2004-12-9 20:14:00 | 显示全部楼层
我把你的程序修改了一下 (defun c:canal ()
(setq base (getpoint "路线起点")) ;;获取起点坐标
(setq center (getpoint base "路线终点")) ;;获取终点坐标
(setq end (list (car center) (cadr base))) ;;固定纵坐标
(command "line" base end "") ;;做直线
(setq lenth (distance base center))
(setq off (fix (+ (/ (- lenth 50) 50) 0.5)))
(setq base1 base)
(repeat off
(setq lenth1 (polar base1 0 50))
(command "circle" lenth1 5 "")
(setq base1 lenth1)
)
)
 楼主| 发表于 2004-12-9 22:54:00 | 显示全部楼层
好人啊,谁也别拦着我,我要哭谢两位!但是我在2002上运行过,不行啊,所有的圆都重合在两边了,按说程序没什么问题,到底是怎么回事啊!
发表于 2004-12-10 08:29:00 | 显示全部楼层
在程序的一开始加上一句


(setvar "osmode" 0)
 楼主| 发表于 2004-12-10 09:09:00 | 显示全部楼层
谢谢各位,大功告成了,但是我还是不明白(setvar "osmode" 0)的功能和用意,老师们帮忙讲解一二!
发表于 2004-12-10 09:25:00 | 显示全部楼层
(defun c:test()
(setq os (getvar "osmode")) ;保存现有的捕捉模式
(setvar "osmode" 0) ;关闭捕捉
;程序内容
(setvar "osmode" os) ;恢复捕捉模式
) ;osmode 是系统变量,可以到cad帮助里面查一下
发表于 2004-12-11 00:17:00 | 显示全部楼层
哪儿用?
发表于 2004-12-11 07:54:00 | 显示全部楼层
一楼用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-30 02:22 , Processed in 0.193487 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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