本帖最后由 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
|