找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 707|回复: 5

[求助] [求助]:大侠高手们帮我看看这个程序

[复制链接]
发表于 2006-5-9 22:42:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我是一个学习AUTOLISP的新手,有一个程序(关于反应器的),说能根据直线的变化来调整两个圆的直径使之和永远等于直线的长度。
可是我试了一下觉得不对,只有一个圆会动。
大家帮我看看!!
先谢过了!!
附件里的是LISP程序。

(VL-Load-Com)
(defun c:special-l( )
(setq pt1 (GetPoint " \ n 直线起点:")
   pt2 (GetPoint pt1 " \ n 直线末点:")
)
;;绘制直线及圆并获取圆的实体名
(Command "line" pt1 pt2 "")
(setq len (Entlast))
(Command "circle" pt2 (/ (Distance pt1 pt2) 2))
(setq chl ( Cdr (Assoc 5 (EntGet (Entlast)))))
(Command "circle" pt1 ( / (Distance pt1 pt2) 2))
(setq chl
(list chl
    (Cdr (Assoc 5 (EntGet (EntLast))))
    ));;                      将两圆的实体名组成一个表
(setq rlt (Cons;;    将直线的图元名转换成VLA图表对象表
      (VLAX-EName->VLA-Object len)'( ))
)
(setq vrl
      (VLR-Pers(VLR-Object-Reactor rlt chl'((:vlr-modified . Line-Circle))))
)
(PrinC)
)
(defun Line-Circle (notifier-object reactor-object parameter-list)
;;获取两个圆的图元句柄
(setq cen1 (HandEnt (Car (VLR-Data reactor-object)))
   cen2 (HandEnt (Cadr (VLR-Data reactor-object)))
)
;;获取直线的两个端点坐标
(setq len (VLAX-VLA-Object->EName notifier-Object)
   lel (EntGet len)
      pt1 (Cdr (Assoc 10 lel))  
      pt2 (Cdr (Assoc 11 lel))
)
;;修改末端点处圆的圆心坐标及半径
(setq cel1 (EntGet cen1)
          cell (Subst (Vl-List* 10 pt2) (Assoc 10 cel1) cel1)
          cell (Subst (Vl-List* 40(/( Distance pt1 pt2) 2))
              (Assoc 40 cel1) cel1)
)
(EntMod cel1)         ;;使修改生效
  ;;修改起始端点处圆的圆心坐标及半径
(setq cel2 (EntGet cen2)
      cel2(Subst(VL-List* 10 pt1) (Assoc 10 cel2) cel2)
      cel2 (Subst (VL-List* 40(/( Distance pt1 pt2) 2))
      (Assoc 40 cel2) cel2)
)
     (EntMod cel2);;使修改生效
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-5-10 08:04:54 | 显示全部楼层
[php]

(VL-Load-Com)
(defun c:special-l ()
  (setq        pt1 (GetPoint " \ n 直线起点:")
        pt2 (GetPoint pt1 " \ n 直线末点:")
  )
  ;;绘制直线及圆并获取圆的实体名
  (Command "line" pt1 pt2 "")
  (setq len (Entlast))
  (Command "circle" pt2 (/ (Distance pt1 pt2) 2))
  (setq chl (Cdr (Assoc 5 (EntGet (Entlast)))))
  (Command "circle" pt1 (/ (Distance pt1 pt2) 2))
  (setq        chl
         (list chl
               (Cdr (Assoc 5 (EntGet (EntLast))))
         )
  )
  ;; 将两圆的实体名组成一个表
  (setq        rlt (Cons ;; 将直线的图元名转换成VLA图表对象表
                  (VLAX-EName->VLA-Object len)
                  '()
            )
  )
  (setq        vrl
         (VLR-Pers (VLR-Object-Reactor
                     rlt
                     chl
                     '((:vlr-modified . Line-Circle))
                   )
         )
  )
  (PrinC)
)



(defun Line-Circle (notifier-object reactor-object parameter-list)
  ;;获取两个圆的图元句柄
  (setq        cen1 (HandEnt (Car (VLR-Data reactor-object)))
        cen2 (HandEnt (Cadr (VLR-Data reactor-object)))
  )
  ;;获取直线的两个端点坐标
  (setq        len (VLAX-VLA-Object->EName notifier-Object)
        lel (EntGet len)
        pt1 (Cdr (Assoc 10 lel))
        pt2 (Cdr (Assoc 11 lel))
  )
  ;;修改末端点处圆的圆心坐标及半径
  (setq        cel1 (EntGet cen1)
        cel1 (Subst (Vl-List* 10 pt2) (Assoc 10 cel1) cel1);_这句变量cel1笔误
        cel1 (Subst (Vl-List* 40 (/ (Distance pt1 pt2) 2));_这句变量cel1笔误
                    (Assoc 40 cel1)
                    cel1
             )
  )
  (EntMod cel1)
  ;;使修改生效
  ;;修改起始端点处圆的圆心坐标及半径
  (setq        cel2 (EntGet cen2)
        cel2 (Subst (VL-List* 10 pt1) (Assoc 10 cel2) cel2)
        cel2 (Subst (VL-List* 40 (/ (Distance pt1 pt2) 2))
                    (Assoc 40 cel2)
                    cel2
             )
  )
  (EntMod cel2)
  ;;使修改生效
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-10 11:25:08 | 显示全部楼层

有什么区别吗?

有什么区别吗?
您用红色标出的区域仅仅是格式的问题?
我看了半天……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-10 13:18:22 | 显示全部楼层
那你有没有试过呢,试过有问题再问,当中我不是注明了cel1笔误。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-10 14:12:21 | 显示全部楼层
向人请教还要收爱心币 穷疯了?!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-10 14:55:58 | 显示全部楼层

回复

cel1笔误??
我用过了,没有问题。
我想问的是:我哪里错了?
另外cel1笔误没有在楼主的帖子里找到。
还有,我没有收爱心币,只是一个LISP的文件。


谢谢,问题解决CEL1笔误!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 08:26 , Processed in 0.329543 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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