|
发表于 2003-5-12 12:35:00
|
显示全部楼层
;;直接选取 点 & 文字
;;目的是把文字的值赋给点的Z坐标。
(defun C:TTT (/ SSPT ENT ENT1 TXT)
(defun DO_IT (DXF NO)
(cdr (assoc DXF (entget (ssname SSPT NO))))
)
(while (null SSPT)
(prompt "\nSelect \"OINT\" & \"TEXT\"")
(setq SSPT (ssget '((0 . "INSERT,TEXT"))))
(if (or (/= (sslength SSPT) 2)
(or (and (= "TEXT" (DO_IT 0 0))
(= "TEXT" (DO_IT 0 1))
)
(and (= "INSERT" (DO_IT 0 1))
(= "INSERT" (DO_IT 0 0))
)
)
)
(setq SSPT NIL)
)
)
(if (= "TEXT" (DO_IT 0 0))
(setq TXT (entget (ssname SSPT 0))
ENT (entget (ssname SSPT 1))
)
(setq TXT (entget (ssname SSPT 1))
ENT (entget (ssname SSPT 0))
)
)
(setq TXT (cdr (assoc 1 TXT)))
(setq ENT1 (cdr (assoc 10 ENT)))
(setq ENT1 (list (car ENT1) (cadr ENT1) (atoi TXT)))
(entmod (setq ENT (subst (cons 10 ENT1)
(assoc 10 ENT)
ENT
)
)
)
(princ)
)
;;原要求,但文字拖到与点重合不切实际
(defun C:TT (/ SSPT N ENT TMP ENT1 TXT TXT1)
(defun AX:GETBOUNDINGBOX (ENT / LL UR)
(vla-getboundingbox (vlax-ename->vla-object ENT) 'LL 'UR)
(mapcar 'vlax-safearray->list (list LL UR))
)
(setq SSPT (ssget "x" '((0 . "INSERT") (2 . "8320"))))
(setq N 0)
(repeat (sslength SSPT)
(setq ENT (ssname SSPT N))
(setq TMP (AX:GETBOUNDINGBOX ENT))
(setq ENT (entget ENT))
(if (setq TXT (ssget "C"
(car TMP)
(cadr TMP)
'((0 . "TEXT"))
)
)
(progn
(setq TXT1 (cdr (assoc 1 (entget (ssname TXT 0)))))
(setq ENT1 (cdr (assoc 10 ENT)))
(setq ENT1 (list (car ENT1) (cadr ENT1) (atoi TXT1)))
(entmod (setq ENT (subst (cons 10 ENT1)
(assoc 10 ENT)
ENT
)
)
)
)
)
(setq N (1+ N))
)
(princ)
) |
|