- 积分
- 13932
- 明经币
- 个
- 注册时间
- 2002-10-21
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
楼主 |
发表于 2002-11-11 10:47:00
|
显示全部楼层
帮我啊!使用(grread)实时拖动画圆程序,特棒!遗憾的是不能使用命令行输入半径
本帖最后由 作者 于 2002-11-11 10:47:12 编辑
使用(grread)实时拖动画圆的程序已做成,特棒!遗憾的是不能使用命令行输入半径,仅能使用鼠标点取,对象捕捉也不能用,有什么办法可以解决吗?请各位高人出谋划策.
另外,程序中不少LISP函数我是第一次使用,用法是否合理妥当还请各位大虾批评指正.
再另外,惊悉alin大人的电脑不能使用中文,不得不使用english,你的帖子我费了九牛二虎力还是一知半解,不知我是否真正领悟您了的教诲.
最后补充一句,为了更好的说明问题,还是以一个"简单"的画圆程序吧(说心里话即使这样这程序还是很难写),它也应当也必能适用于绘制其他自定义的图形.
;;;使用实时拖动绘制一个圆的程序如下:
(defun c:CIRC (/ centre motion pt radius ename1 ename2 circle line boolean code)
(defun *error* (msg)
(if (and (/= msg "Function cancelled")(/= msg "函数被取消"))
(princ (strcat "天方夜谭!" msg "\n"))
(if motion(progn(entdel ename1)(entdel ename2)))
)
(princ)
)
;;***主程序***
(setq centre (getpoint "\n圆心: "))
(if (/= centre nil)
(progn
(princ "\n半径: ")
(setq motion(grread t 15 0))
(setq pt (car(cdr motion)))
(setq radius(distance centre pt))
(entmakex (list '(0 . "CIRCLE")(cons 10 centre)(cons 40 radius)));;初始圆
(setq ename1 (entlast))
(setq circle (entget ename1))
(entmakex (list '(0 . "line")(cons 10 centre)(cons 11 pt))) ;;初始引线
(setq ename2 (entlast))
(setq line (entget ename2))
(setq boolean T)
(while boolean
(setq motion(grread t 15 0)) ;;动态绘图
(setq code(car motion))
(if (or(= code 3)(= code 5))
(progn
(setq pt (car(cdr motion)))
(setq radius(distance centre pt))
(setq circle (subst (cons '40 radius)(assoc 40 circle)circle))
(setq line (subst (cons '11 pt)(assoc 11 line)line))
(entmod circle) ;;动态显示圆
(entmod line) ;;动态显示引线
)
(entdel ename1)
)
(if (/= code 5)(setq boolean nil)) ;;选定点为真则退出
)
(entdel ename2) ;;;删除引线
)
)
(princ)
)
没有最好,只有更好!
有条件要上,没条件也上!
别人能做到的,我们一定能做到,别人做不到的,我们也要做到!
嗨...口干了. |
|