[源码]动态粗糙度核心函数注释
本帖最后由 cabinsummer 于 2016-12-24 15:10 编辑核心函数是grread、osnap、entmod三个函数。在grread状态下,不能采用捕捉设置,所以必须用osnap函数解决。如果图形的插入点周边有块的其它图元,则直接osnap会发生图形跳动,解决办法就是先删除插入的块,取得osnap捕捉点后再恢复被删除的块。最后根据捕捉点与grread读取点的关系计算角度,更新图块数据。
(setq ename (entlast)) ;;;插入图块的图元名
(setq entdb (entget ename)) ;;;获得图元的数据
(prompt "选择插入点")
(setq tag T) ;;;设定跳出while循环的标志
(while tag
(setq code (grread T 8)) ;;;读取输入
(setq mod (car code)) ;;;取得输入模式
(cond
((or (= mod 5)(= mod 3))
(if (= mod 3)(setq tag nil)) ;;;如果鼠标左键点击,则设定while循环结束
(setq snappt (cadr code)) ;;;取得鼠标当前坐标
(entdel ename) ;;;删除插入的图块
(setq nearpt (osnap snappt "nea")) ;;;取得最近的捕捉点
(entdel ename) ;;;恢复刚才删除的图块
(if nearpt ;;;判断捕捉点
(progn ;;;如果有捕捉点,执行下面的程序
;;;
(entmod entdb) ;;;更新图元数据
)
(progn ;;;如果没有捕捉点,执行下面的程序
;;;
(entmod entdb) ;;;更新图元数据
)
)
)
((= mod 2) ;;;处理键盘
;;;
)
(T ;;;处理其它情况
;;;
)
)
)
不带动态的粗糙度源码请到下面链接的帖子中下载
http://bbs.mjtd.com/thread-89324-1-1.html
cabinsummer 发表于 2011-12-7 07:06
动态不止能干这个,这还是简单的了。
一旦重新设定坐标原点,这个粗糙度就跑位了,还需大师改改。 谢谢老大,最近刚学到这个地方,网上找不到任何资料,只有这边的资料整理的最好,谢谢分享 顶一个顶一个顶一个顶一个顶一个 LZ都写了一部分,不如干脆来个完善的 Jack_PC 发表于 2011-11-27 22:00 static/image/common/back.gif
LZ都写了一部分,不如干脆来个完善的
我给出了不带动态的源码链接,如果你要有兴趣学习,可以自己组合。网上动态的粗糙度很多,可是没有给出源码的。我看到不少人希望源码,所以才放出核心部分并解释。如果你连这一点都不肯做,可见你并不想学习,还是下载那些收费的加密动态粗糙度吧。 cabinsummer 发表于 2011-11-27 22:14 static/image/common/back.gif
我给出了不带动态的源码链接,如果你要有兴趣学习,可以自己组合。网上动态的粗糙度很多,可是没有给出源 ...
不是不肯做,而是不会做 根据lz的解释和网上的代码,再搜集一些grread的用法,写一个这样的代码确实没多少难度! Jack_PC 发表于 2011-11-27 23:13 static/image/common/back.gif
不是不肯做,而是不会做
如果你仅仅是一个使用者,为什么还要源码呢?源码是给学习者用的 本帖最后由 Jack_PC 于 2011-11-28 19:43 编辑
正是不会才希望有源代码可以学习,看来自己还得加油向各位学习了,不知什么时候自己才可以写出这种程序 好高学问,还不知道能利用在哪里呢 动态不止能干这个,这还是简单的了。
太好了,现在不懂,我会学的。刚开始学习中。。。