lucas_3333 发表于 2014-8-13 17:32:58

分享带捕捉的grread示例


;cursor osnap
;hanhphuc #12
;13/08/14
;argument:
;_pt = points , Y,X,Z   
;_os = osnap std command 'STR
;_sz = size of pickbox , 'REAL
;_rb = rubber band, t / nil
(defun hp:cursnap (_pt _os _sz rb / c a b l i _tp var pbox snap) ; "_end,_mid""_nea"
(setqvar(mapcar 'getvar '("pickbox" "cursorsize"))
pbox '((_pt sz c / ls n)
         (setq
    ls
    (foreach
   m
   '((0.25 0.75 1.25 1.75 0.25) (0.75 1.25 1.75 0.25 0.75))
   (setq
      n
      (cons
       (mapcar
      ''((x) (polar _pt (* pi x) (* sz (/ (getvar "viewsize") (cadr (getvar "screensize"))))))
      m
      ) ;_ end of mapcar
       n
       ) ;_ end of cons
      ) ;_ end of setq
   ) ;_ end of foreach
    ) ;_ end of setq
         (mapcar
    ''((a b) (grdraw (list (car a) (cadr a)) (list (car b) (cadr b)) c 0))
    (car ls)
    (cadr ls)
    ) ;_ end of mapcar
         ) ;_ end of defun
snap '((_pt)
         (grvecs
    (apply
   'append
   (mapcar
      ''((x)
         (list 2 _pt (polar _pt (* pi x) (car (getvar "screensize"))))
;;;            (*(cadr var) 5. (/ (getvar "viewsize") (cadr (getvar "screensize")))))) <------- not perfect yet
         )
      '(0.0 0.5 1.0 1.5)
      ) ;_ end of mapcar
   ) ;_ end of apply
    ) ;_ end of grvecs
         (pbox _pt (* _sz 1.25) 2)
         (mapcar 'setvar '("pickbox" "cursorsize") '(0 1)); <---- to restore
         )
_tp_pt
i    5
a    '(not (setq ip (osnap _tp _os)))
b    '(osnap _tp _os) ;"_end,_int"
c    a
) ;_ end of setq
(while (= 5 (car (setq l (grread nil 15 0))))
    (eval c)
    (setq i   (car l)
    _tp (cadr l)
    ) ;_ end of setq
    (redraw)
    (if_pt
      (progn (if ip
         (progn (snap ip)
          (if rb
      (grdraw _pt ip 8 1)
      ) ;_ end of grdraw <----------- rubber band
          ) ;_ end of progn
         (progn
   
(pbox _tp _sz 7) ;<----------optional: normal box
   
          (if rb
      (grdraw _pt _tp 8 1)
      ) ;_ end of grdraw <----------- rubber band
          (mapcar 'setvar '("pickbox" "cursorsize") var)
          ) ;_ end of progn
         ) ;_ end of if
       ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of while
(if ip
    (setq c b)
    (setq c a)
    ) ;_ end of if
(mapcar 'setvar '("pickbox" "cursorsize") var)
(redraw)
(setq *ret* (apply 'append (vl-remove nil (list ip _tp))))
) ;_ end of defun

(defun c:test1 (/ o )
(setvar "osmode" 0); <------ off the osmode to test
(hp:cursnap (getvar "viewctr") "_end" 10. nil)
(princ *ret*)
(princ)
)

(defun c:test2 (/ o )
(setvar "osmode" 0)
(hp:cursnap (getvar "viewctr") "_near" 10. t)
(princ *ret*)
(princ)
)

LPACMQ 发表于 2014-8-14 01:19:32

赞一个

LIULISHENG 发表于 2020-2-17 11:37:30

学习一下哦
页: [1]
查看完整版本: 分享带捕捉的grread示例