grread使用例子 lisp_修改了下grread捕捉子函数应该能用了

;;; grread捕捉子函数

;;; name为移动的图元名,pt为光标点

;;; 返回值:如果有捕捉点则返回捕捉点,无则返回光标点

(defun osnappt (name pt / color d h k lst nearpt nearpt2 osmo pt1 pt2 pt3 pt4 pt5 ptx pty x)

(if name (entdel name))

(redraw)

(if (< (getvar "osmode") 16384)

(progn

(setq color (vla-get-autosnapmarkercolor (vla-get-drafting (vla-get-preferences (vlax-get-acad-object))))

h (/ (getvar "viewsize") (cadr (getvar "screensize"))) d (getvar "pickbox")

lst (list (* d h) (* (- d 0.5) h) (* (+ d 0.5) h)) k (* 1.5 d h))

(if (setq nearpt (osnap pt "_END,_CEN,_NOD,_QUA,_INS,_TAN,_EXT"))(setq osmo 1))

(if (and(setq nearpt2 (osnap pt "_NEA"))(not (equal nearpt nearpt2 k)))

(setq osmo 2 nearpt nearpt2))

(if (and(setq nearpt2 (osnap pt "_MID"))(equal nearpt nearpt2 k))

(setq osmo 3 nearpt nearpt2))

(if (and(setq nearpt2 (osnap pt "_INT"))(equal nearpt nearpt2 k))

(setq osmo 4 nearpt nearpt2))))

(if name(entdel name))

(if nearpt

(progn

(setq ptx (car nearpt)pty (cadr nearpt))

(foreach x lst

(setq pt1 (list (- ptx x) (- pty x)) pt2 (list (+ ptx x) (- pty x))

pt3 (list (+ ptx x) (+ pty x)) pt4 (list (- ptx x) (+ pty x))

pt5 (list ptx (+ pty x)))

(cond

((= osmo 1)(grvecs (list color pt1 pt2 pt2 pt3 pt3 pt4 pt4 pt1)))

((= osmo 2)(grvecs (list color pt1 pt2 pt2 pt4 pt3 pt4 pt3 pt1)))

((= osmo 3) (grvecs (list color pt1 pt2 pt2 pt5 pt5 pt1)))

((= osmo 4) (grvecs (list color pt1 pt3 color pt2 pt4)))))

(setq pt nearpt)))

pt

)

;;; 示例:动态移动文字

(defun c:qq (/ code ent gr loop name pt)

(if (setq name (car (entsel "\n选择文本:")))

(progn

(setq ent (entget name) loop t)

(princ "\n指定点:")

(while loop

(setq gr (grread t 15 0) code (car gr) pt (cadr gr))

(cond

((= code 3)(redraw) (setq loop nil))  ; 鼠标左键

((= code 5)                  ; 鼠标移动

(setq pt (osnappt name pt))

(entmod (setq ent (subst(cons 10 pt)(assoc 10 ent)ent))))

((= code 2)                  ; 键盘输入

(princ "\n键盘输入=")(princ pt))

((member code '(11 25))      ; 鼠标右击

(redraw)  (setq loop nil))))))

(princ)

)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值