明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10615|回复: 29

[资源] [推荐]grread接受正交捕捉和输入

  [复制链接]
发表于 2009-8-30 17:51 | 显示全部楼层 |阅读模式
这个对你可能有用,在做动态时可能用得着,试试吧

本帖子中包含更多资源

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

x

评分

参与人数 1威望 +1 明经币 +2 金钱 +20 贡献 +5 激情 +5 收起 理由
mccad + 1 + 2 + 20 + 5 + 5 【精华】好程序

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2018-5-3 14:06 | 显示全部楼层
学习也真不错的
发表于 2009-8-30 23:00 | 显示全部楼层
这样更接近天正的功能了,好程序
发表于 2009-8-31 09:03 | 显示全部楼层

不错,好东西,比我写的精度更高,今天好好研究一翻译,不过不建议在GRREAD中使用模似捕捉,因为有时会出错,还是用GET类的函数来得到

发表于 2009-8-31 13:58 | 显示全部楼层

请说说你出错的时候是什么情况。

测试了一下程序,提3条

1、捕捉虚拟显示的框没有同步跟进,主要是(while z 的问题,建议条件加(while (and z 前后两次gr位移点距离)....) ,这样可以使更新计算量减少,显示加速(减轻停顿感)。

2. 提供更多捕捉虚拟,比如中点,垂直点等。

3。补充按esc时候的出错处理

发表于 2009-8-31 14:08 | 显示全部楼层

我也不记的啦,是好久的事啦,狂哥哥,反正就是最好不要用啦,我用了将近半年才决定不用它啦

发表于 2009-9-1 11:51 | 显示全部楼层
本帖最后由 作者 于 2009-9-1 13:08:55 编辑

捕捉框总是落后于光标实际位置,是因为捕捉框去捕捉你画的“橡皮线”了,采用 grvecs 可解决此问题.

发表于 2009-9-2 10:06 | 显示全部楼层
看来还有一定的BUG哦!
发表于 2009-9-4 11:40 | 显示全部楼层
本帖最后由 作者 于 2009-9-4 12:02:39 编辑

思路不错,但细节还可以改进。
1.正交打开时,对于角度的判断,楼主是这样操作的:

         (setq ang (atoi
         (angtos
         (angle p po))))
            (if(> ang 315)(setq ang (- 360 ang)))
            (cond
         ((and
         (< ang 45)
         (> ang -45))
           (setq pt (list
         (car po)
         (cadr p)))
          )
          ((and
         (< ang 135)
         (> ang 45))
           (setq pt (list
         (car p)
         (cadr po)))
          )
          ((and
         (< ang 225)
         (> ang 135))
           (setq pt (list
         (car po)
         (cadr p)))
          )
          ((and
         (< ang 315)
         (> ang 225))
           (setq pt (list
         (car p)
         (cadr po)))
          )
           )
可以改为:
(if (<(abs(- (car  P)(car  P0)))
        (abs(- (cadr  P)(cadr P0)))
    )
    (setq  PT   (list  (car  P) (cadr P0)))
    (setq  PT   (list  (car  P0)(cadr P )))
)

2.对于对象捕捉的显示,过于单一,用户无法直接理解捕捉类型。推荐如下:
(setq     *LST*
  '((1     "_end"
     ((-1      1)      (-1      -1))
     ((-1     -1)      (1      -1))
     ((1      -1)      (1      1))
     ((1     1)      (-1      1))
    )
    (2     "_mid"
     ((0     1.414)      (-1.225      -0.707))
     ((-1.225      -0.707)      (1.225      -0.707))
     ((1.225      -0.707)      (0      1.414))
    )
    (4     "_cen"
     ((0      1)      (-0.707      0.707))
     ((-0.707      0.707)      (-1      0))
     ((-1     0)      (-0.707      -0.707))
     ((-0.707     -0.707)     (0      -1))
     ((0      -1)      (0.707      -0.707))
     ((0.707      -0.707)      (1      0))
     ((1      0)      (0.707      0.707))
     ((0.707      0.707)     (0      1))
    )
    (8
     "_nod"
     ((0      1)      (-0.707      0.707))
     ((-0.707      0.707)      (-1      0))
     ((-1     0)      (-0.707      -0.707))
     ((-0.707      -0.707)      (0      -1))
     ((0     -1)      (0.707      -0.707))
     ((0.707     -0.707)      (1      0))
     ((1     0)      (0.707     0.707))
     ((0.707      0.707)      (0     1))
     ((-1      1)      (1      -1))
     ((-1      -1)      (1      1))
    )
    (16     "_qua"
     ((0      1.414)      (-1.414      0))
     ((-1.414      0)      (0      -1.414))
     ((0      -1.414)      (1.414      0))
     ((1.414      0)      (0      1.414))
    )
    (32     "_int"
     ((-1      1)      (1      -1))
     ((-1      -1)      (1      1))
     ((1      0.859)      (-0.859     -1))
     ((-1      0.859)     (0.859      -1))
     ((0.859     1)      (-1     -0.859))
     ((-0.859      1)      (1     -0.859))
    )
    (64     "_ins"
     ((-1      1)      (-1      -0.1))
     ((-1      -0.1)      (0     -0.1))
     ((0      -0.1)      (0     -1.0))
     ((0      -1.0)      (1      -1))
     ((1     -1)      (1      0.1))
     ((1      0.1)      (0     0.1))
     ((0     0.1)      (0      1.0))
     ((0      1.0)      (-1     1))
    )
    (128     "_per"
     ((-1      1)      (-1      -1))
     ((-1      -1)      (1      -1))
     ((0      -1)      (0      0))
     ((0      0)      (-1      0))
    )
    (256     "_tan"
     ((0      1)      (-0.707      0.707))
     ((-0.707      0.707)      (-1      0))
     ((-1      0)      (-0.707      -0.707))
     ((-0.707      -0.707)      (0      -1))
     ((0      -1)      (0.707      -0.707))
     ((0.707      -0.707)      (1      0))
     ((1      0)      (0.707      0.707))
     ((0.707      0.707)      (0      1))
     ((1      1)      (-1      1))
    )
    (512     "_nea"
     ((-1      1)      (1      -1))
     ((1      -1)      (-1      -1))
     ((-1      -1)      (1      1))
     ((1      1)      (-1      1))
    )
    (1024      "_qui")
    (2048     "_app"
     ((-1      1)      (-1      -1))
     ((-1      -1)      (1      -1))
     ((1      -1)      (1      1))
     ((1      1)      (-1      1))
     ((-1      1)      (1      -1))
     ((-1      -1)      (1      1))
    )
    (4096     "_ext"
     ((0.1      0)      (0.13      0))
     ((0.2      0)      (0.23      0))
     ((0.3      0)      (0.33      0))
    )
    (8192     "_par"
     ((0      1)      (-1      -1))
     ((1      1)      (0      -1))
    )
   )
)
;;;=================================================================*
;;;功能:在指定点  绘制  指定的靶标                                 *
;;;参数:PT -----要绘制的位置                                       *
;;;      I  -----捕捉模式单项值。例如:1 or 2 or 4 ...              *
(defun      DRAW-ATPOINT      (PT      I      /     SIZE      COLOR      MATRIX      LST)
    (foreach    REAL   '(-0.5      0      0.5)
      (setq     SIZE   (* (+   (read (getenv      "AutoSnapSize")) REAL)
                              (/   (getvar      "VIEWSIZE") (cadr      (getvar      "SCREENSIZE")))
                          )
                  COLOR (read      (getenv      "AutoSnapColor"))
      )
      (setq     MATRIX(list(list      SIZE      0.0      0.0      (car  PT))
                                 (list      0.0      SIZE      0.0     (cadr PT))
                                 (list      0.0      0.0      1.0      0.0)
                                 (list      0.0      0.0      0.0      1.0)
                           )
      )

      (and   (setq LST (cddr (assoc  I  *LST*)))
              (setq LST (mapcar  (function   (lambda      (X)
                                                     (cons      COLOR      X))
                                 )
                                       LST
                       )
              )
              (setq  LST (apply 'append LST))
              (grvecs   LST  MATRIX)
      )
    )
)

3.对于用户输入数据的处理,当用户按下退格键时,楼主是换行显示。
         (progn(setq str(substr str 1
         (1- stl)))(princ
         (strcat
         "\n" str)));删除一个字符并换行

可以使用"\r",以避免多余显示。




 楼主| 发表于 2009-9-4 19:01 | 显示全部楼层
谢谢各位的宝贵意见
发表于 2009-12-2 11:09 | 显示全部楼层
不错,好东西
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 01:04 , Processed in 0.462902 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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