- 积分
 - 14470
 
- 明经币
 -  个
 
- 注册时间
 - 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) 
) 
 
 
 
 
  
没有最好,只有更好! 
有条件要上,没条件也上! 
别人能做到的,我们一定能做到,别人做不到的,我们也要做到! 
嗨...口干了. |   
 
 
 
 |