找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 717|回复: 0

[讨论]:关于grread正交

[复制链接]
发表于 2007-1-17 11:37:44 | 显示全部楼层 |阅读模式

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

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

×
好像grread函数不支持捕捉和正交操作吧,如果函数本身不支持那只有自己想办法替代这个功能了,捕捉好象在论坛上已经有高手想办法实现了,不过正交好像还没有人尝试过,有没有高手给个思路,我自己的想法是这样的:
获取基准点,通过grread函数获取鼠标动态坐标点,鼠标移动一定范围就计算一次鼠标坐标点相对于基点x.y的增量,判断x.y方向增量的大小,如果x>y鼠标就往x轴方向移动,反之往y轴方向移动,鼠标坐标在x轴或者y轴方向上的投影很容易计算出来
还有一个想法,如果正交的点轨迹可以确定那其他角度的轨迹也没有问题了,那模拟追踪效果估计也可以
以上只是个人想法,有时间的时候尝试一下,不知道大家对点轨迹的追踪有什么见解,我特别想听听eachy斑竹的做法,eachy斑竹对cad的研究很深入

呵呵,晚上写了个测试函数,好像可以,出差打瞌睡还是有好处的- -
(defun c:tt(/ lent)
(setq bpt(getpoint "\n基准点:"))
(setq loop t)
     (while loop      
      (setq gd (grread T 4 0))
        (cond ((= 5(car gd))
          (progn
            (redraw)
            (setq my_viewsize (getvar "viewsize"))
            (setq vpoint(cadr gd))
            (setq di (distance bpt vpoint))
            (if (> (/ di my_viewsize) 0.01)
              (progn
                (setq ydelta(abs(-(cadr vpoint)(cadr bpt))))
                (setq xdelta(abs(-(car vpoint)(car bpt))))
                (if (< xdelta ydelta)
                  (progn
                    (if lent
                      (progn
                        (entdel lent)
                        (setq lpt(list (car bpt)(cadr vpoint)))
                        (vl-cmdf "line" bpt lpt "")
                        (setq lent(entlast))
                      )
                      (progn
                        (setq lpt(list (car bpt)(cadr vpoint)))
                        (vl-cmdf "line" bpt lpt "")
                        (setq lent(entlast))
                      )
                    )
                  )
                  (progn
                       (if lent
                      (progn
                        (entdel lent)
                        (setq lpt(list (car vpoint)(cadr bpt)))
                        (vl-cmdf "line" bpt lpt "")
                        (setq lent(entlast))
                      )
                      (progn
                        (setq lpt(list (car vpoint)(cadr bpt)))
                        (vl-cmdf "line" bpt lpt "")
                        (setq lent(entlast))
                      )
                    )
                  )
                )                
              );progn
            );if
          ))
          ((= 3(car gd))
;;;            (progn
;;;              (setq vpoint(cadr gd))
              (setq loop nil)
;;;            )
            (t exit)
          )
        );cond
     );while
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-17 20:33 , Processed in 0.326627 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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