找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1682|回复: 20

[其他]:讨论关于GRREAD函数

[复制链接]
发表于 2004-6-19 10:59:59 | 显示全部楼层 |阅读模式

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

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

×
GRREAD函数可以用来模拟一些动态的变化过程,其弥补了CAD本身的互动性差的特点,但GRREAD模拟本身却不能精确地去模拟互动的变化,说来比较绕口,举个例子吧,假如用GRREAD模拟一个动态的变化,结束的时候想捕捉到一个精确的点结束,个人造诣太浅,可能理解不够深刻,不过GRREAD要是实现其互动和精确的结合可能用处才更大,希望各位高手发表下自己的建议,共同探讨一下GRREAD,使其发挥出更大的功能
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-23 08:08:15 | 显示全部楼层
我有个感觉,GETPOINT等GET类函数应该就是利用GRREAD编写出来的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

发表于 2004-6-19 14:31:16 | 显示全部楼层
精确与否,要看你的程序的用途,确实需要精确的地方,可用OSNAP来处理。
论坛中,我发过不少用到GRREAD的例子。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-19 15:22:42 | 显示全部楼层
从一个简单的例子说起吧
[php]

(defun zm (et x /) (cdr (assoc x (entget et))))
(defun pzm (nwzm y obj /)
  (entmod(subst(cons y nwzm)(assoc y (entget obj))
         (entget obj)))
)
(defun c:css (/ ent p)
(setq ent(car(entsel)))   
(while (setq p (grread T))
  (pzm(distance(zm ent 10)(last p))40 ent)
  )
  )
[/php]
能在动态的过程中,保持鼠标处于捕捉的状态么?请指教
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-19 16:35:41 | 显示全部楼层
最初由 snsj 发布
[B]从一个简单的例子说起吧
[php]

(defun zm (et x /) (cdr (assoc x (entget et))))
(defun pzm (nwzm y obj /)
  (entmod(subst(cons y nwzm)(assoc y (entget obj))
         (entget obj)))
)
(defun... [/B]

应该是对圆或弧的操作吧?修改了一下,不知是不是你的原意。

  1.   [FONT=courier new]
  2. (defun zm (et x /) (cdr (assoc x (entget et))))
  3. (defun pzm (nwzm y obj /)
  4.   (entmod (subst (cons y nwzm)
  5.                  (assoc y (entget obj))
  6.                  (entget obj)
  7.           )
  8.   )
  9. )
  10. (defun c:css (/ ent p ent_lst osmode)
  11.   (setq osmode "mid,end,nea")
  12.   (setq ent (car (entsel "\n选择圆或弧:")))
  13.   (setq ent_lst (entget ent))
  14.   (while (= 5 (car (setq p (grread T 4 0))))
  15.     (setq p (cadr p))
  16.     (if        (osnap p osmode)
  17.       (setq p (osnap p osmode));;;可以用GRDRAW来标记捕捉到的点
  18.     )
  19.     (pzm (distance (zm ent 10) p) 40 ent)
  20.   )
  21.   (if (= 3 (car p));;;点击鼠标
  22.     (progn
  23.       (setq p (cadr p))
  24.       (if (osnap p osmode)
  25.         (setq p (osnap p osmode))
  26.       )
  27.       (pzm (distance (zm ent 10) p) 40 ent)
  28.     )
  29.     (entmod ent_lst);;;其他操作时还原实体
  30.   )
  31.   (princ)
  32. )
  33.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-19 17:16:05 | 显示全部楼层
我说的是标准的CAD捕捉效果,看不到很难判断是否捕捉到了想要的点,像GETPOINT那样的,想要的是图中这样的标准捕捉,不知道能否做到?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-19 22:35:25 | 显示全部楼层
如果仅仅是对circle,arc,用scale不好么?完全可以达到你要的效果

(vl-cmdf "_.scale" (setq e (car (setq el(entsel "\n选择圆or圆弧:")))) "" (setq pt (cdr(assoc 10(entget e)))) "r"
         pt (osnap(cadr el)"nea") pt pause)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-19 22:39:54 | 显示全部楼层
不是要解决这个问题,是由此引发一系列的问题,实现这个意义很大,这个例子是表明难点所在
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-20 01:05:00 | 显示全部楼层
捕捉,如果不在程序中自动完成(这时没有显示),那么就只能在命令或函数中交互完成。
恐怕grread单独用难当大任,除非在grread里面用getpoint一类的(这时候实体没有动态显示变化),或则用scale(这时候两个都可,显示+捕捉),但如果这样,grread就显得多余了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-6-20 23:36:59 | 显示全部楼层
我最近一直在研究,我以前叫晓东用arx写一个的.不知道他写好没.
现在我退着用vba写,网上找到一个,很合我意:):)

用winapi写的,在vba下实现了grread的功能,不过还是比grread好。因为本身它其实是getpoint,
不过鼠标移动的过程可以模仿出来.

能用到lisp里还有一段路要走.

就是有个问题,怎么判断鼠标已经到了"极轴"设好的位置.
因为设了"正交"很好控制,但极轴就麻烦了(靠近了,但怎么算靠近了?)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-21 09:00:38 | 显示全部楼层
我最近用grread函数也碰到这样的问题,
看样子这个问题解决不了了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-21 14:50:39 | 显示全部楼层
最初由 snsj 发布
[B]我说的是标准的CAD捕捉效果,看不到很难判断是否捕捉到了想要的点,像GETPOINT那样的,想要的是图中这样的标准捕捉,不知道能否做到? [/B]

肯定能够做到,但是可能意义不大。我一向主张量体裁衣,要根据GRREAD的优势来设计程序,它办不到的事就不要勉强了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-21 16:30:25 | 显示全部楼层
我也遇到过类似的问题。我要用lisp实现的功能相当于mirror,但是比mirror效果更好。比方说我在图纸上选择一条直线为对称线,我在对称线一边用line画线,光标所在处会在对称线另一边对称体现出来,相当于人的左右手,同时做对称的两个东西一样。我曾经用grread函数确定对称线两边的点,但是它没办法用键盘输入坐标,也没办法捕捉点,并且没办法实现回车即退出功能,如果用getpoint加mirror没有动态效果。不只是画线,对圆,弧,多义线等也同样如此。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-21 22:51:52 | 显示全部楼层
VLISP和VBA本身都对动态的东西缺少支持。2006年Longhorn发布后AutoCAD自然会有相应版本,估计新面目的VLISP和VBA也会运行在.NET Framework上,很多问题迎刃而解。为代码寿命计,忍耐两年,不要过多依赖于绕弯子的办法和Win API。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-22 23:12:20 | 显示全部楼层
最初由 憨山 发布
[B]我最近用grread函数也碰到这样的问题,
看样子这个问题解决不了了! [/B]

硬要写也不是不可以,把那些不同捕捉的显示用grvecs 模拟显示:》》》
grread取点pt,按pickset定义在模拟范围内搜索实体,如果有(这步可省略),(setq pt2 (osnap pt "捕捉选项")), 如果有pt2在pt2模拟显示. 如果按确定(根据自定义的grread确认方式),返回pt2
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 00:23 , Processed in 0.432061 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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