- 积分
- 27114
- 明经币
- 个
- 注册时间
- 2003-8-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2014-6-30 12:55:21
|
显示全部楼层
;;; ==================
;;; 移动程序 by:langjs
;;; ==================
(defun c:tt ( / code d data ent ent1 entc enttx gr i inf loop lst n nent pt pt1 pt2 pt3 ptlst r ss ss1 x)
(defun *error* (inf)
(setq inf (strcase inf t))
(cond
((wcmatch inf "*break*,*cancel*,*exit*,*取消*,*中断*")
(princ "\n用户按了<Esc>强制退出\n")))
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(princ))
(defun reent (ent ptlst / i nent x)
(setq i -1 nent '())
(foreach x ent
(setq nent (append nent
(list (if (and (= (car x) 10) (/= (nth (setq i (1+ i)) ptlst ) nil ))
(cons 10 (nth i ptlst)) x ))))))
(defun emod (ent i n)
(subst (cons i n) (assoc i ent) ent ))
(setvar "cmdecho" 0)
(setq ent (car (entsel "\n选择圆:")))
(if (= (cdr (assoc 0 (setq ent (entget ent)))) "CIRCLE")
(progn
(setq pt (cdr (assoc 10 ent)) r (cdr (assoc 40 ent))lst '() i 0 )
(repeat 359 (setq lst (cons (* (/ i 180.0) pi) lst) i (1+ i)))
(setq lst (mapcar '(lambda (i) (polar pt i (+ r 1))) lst))))
(setq entc ent)
(setq ss (ssget "F" (list (polar pt 0.0 r) (polar pt pi r)) '((0 . "TEXT"))))
(setq enttx (entget (ssname ss 0)))
(setq ss (ssget "CP" lst '((0 . "TEXT,CIRCLE,LWPOLYLINE")))lst '())
(repeat (setq i (sslength ss))
(setq ent (entget (ssname ss (setq i (1- i)))))
(if (= (cdr (assoc 0 ent)) "LWPOLYLINE")
(progn
(if (< (distance pt (setq pt1 (cdr (assoc 10 ent)))) (distance pt (setq pt2 (cdr (assoc 10 (reverse ent))))))
(setq pt1 pt2))
(setq d (angle pt pt1) pt2 (polar pt d r) pt3 (polar pt d (* 0.5 (+ (distance pt pt1) (distance pt pt2)))))
(if (or (< d (* 0.5 pi)) (> d (* 1.5 pi)))
(setq pt3 (polar pt3 (- d (* 0.5 pi)) 200.0))
(setq pt3 (polar pt3 (+ d (* 0.5 pi)) 200.0)) )
(if (setq ss1 (ssget "F" (list (polar pt3 d 300) (polar pt3 (+ pi d) 300)) '((0 . "TEXT"))))
(setq ent1 (entget (ssname ss1 0))lst (cons (list pt1 ent ent1) lst))))))
(princ "\n指定位置:")
(setq loop t)
(while loop
(progn
(setq gr (grread t 15 0) code (car gr) data (cadr gr))
(cond((= code 3) (setq loop nil))
((= code 5)
(setq pt data)
(foreach i lst
(setq pt1 (car i) ent (cadr i) ent1 (caddr i) d (angle pt pt1) pt2 (polar pt d r)
ent (reent ent (list pt1 pt2)))
(entmod ent)
(setq pt3 (polar pt d (* 0.5 (+ (distance pt pt1) (distance pt pt2)))))
(if (or (< d (* 0.5 pi)) (> d (* 1.5 pi)) )
(setq pt3 (polar pt3 (- d (* 0.5 pi)) 100.0))
(setq pt3 (polar pt3 (+ d (* 0.5 pi)) 100.0) d (+ d pi)))
(setq ent1 (emod ent1 10 pt3) ent1 (emod ent1 11 pt3) ent1 (emod ent1 50 d)
entc (emod entc 10 pt) enttx (emod enttx 10 pt) enttx (emod enttx 11 pt))
(entmod ent1) (entmod entc) (entmod enttx)))
((or(= code 11) (= code 25))
(setq loop nil))
(t)
) t ))
(princ)
)
|
评分
-
查看全部评分
|