 - (DEFUN C:TT (/ PT ZC ERR LOOP GR CODE PC L1 R PTT ANG P1 P2 P3 P4 EC E1
- E2)
- (SETQ Pt (GETPOINT "\n插入中心点"))
- (if (not pt)
- (vl-exit-with-value 0)
- )
- (setq zc (getreal "\n输入周长"))
- (FOREACH X (LIST "CENTER2" )
- (setq
- err (vl-catch-all-apply
- 'vla-Load
- (list (vla-get-Linetypes
- (vla-get-ActiveDocument (vlax-get-acad-object))
- )
- X
- "acad.lin"
- )
- )
- )
- (if (vl-catch-all-error-p err)
- (if (= (vl-catch-all-error-message err)
- "Automation Error. Duplicate record name"
- )
- (alert (strcat "A line type named '" X "' already exists."))
- )
- )
- )
- (setq loop t)
- (WHILE LOOP
- (setq gr (grread t 15 0)
- code (car gr)
- Pc (cadr gr)
- )
- (cond
- ((= code 5) ; 鼠标移动
- (redraw)
- (FOREACH X (LIST EC E1 E2)
- (if X
- (entdel X)
- )
- )
- (setq l1 (distance pt pc)
- r (/ (- zc l1 l1) 2 pi)
- )
- (IF (> R 4)
- (PROGN
- (SETQ ptt pc
- ANG (ANGLE PT PTT)
- p1 (polar pt (+ ANG (* 0.5 pi)) r)
- p2 (polar pt (+ ANG (* 1.5 pi)) r)
- p3 (polar ptt (+ ANG (* 1.5 pi)) r)
- p4 (polar ptt (+ ANG (* 0.5 pi)) r)
- ec (entmakex (LIST
- '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- '(90 . 5)
- '(70 . 1)
-
- (CONS 10 P1)
- '(42 . 0.0)
- (CONS 10 P4)
- '(42 . -1.0)
- (CONS 10 P3)
- '(42 . 0.0)
- (CONS 10 P2)
- '(42 . -1.0)
- )
- )
- )
- (VLA-OFFSET (vlax-ename->vla-object EC) 2)
- (SETQ E1 (ENTLAST))
- (VLA-OFFSET (vlax-ename->vla-object EC) -2)
- (SETQ E2 (ENTLAST))
- (VLA-PUT-COLOR(vlax-ename->vla-object EC)1)
- (VLA-PUT-Linetype(vlax-ename->vla-object EC)"CENTER2")
- )
- )
- )
- ((= code 3) ; 鼠标左键
- (redraw)
- (setq loop nil)
- )
- ((= code 2) ; 鼠标左键
- (redraw)
- (setq loop nil)
- )
- )
- )
- )
其实,没啥用,lisp函数grread的缺陷,没办法支持捕捉,只能看着好玩。想要精准捕捉,还是要net或者c++
|