 - (defun c:tt ()
- "tt(图块统计与排列)"
- (defun t1 (a / b)
- (while (setq b (cons (list (car a) (- (length a) (length (vl-remove (car a) a))))
- b
- )
- a (vl-remove (car a) a)
- )
- )
- (reverse b)
- )
- (defun p1p9 (obj / p1 p2)
- (vla-getboundingbox obj 'p1 'p2)
- (mapcar 'vlax-safearray->list (list p1 p2))
- )
- (defun mk-in (bn pt)
- (entmakex (list '(0 . "INSERT") (cons 2 bn) (cons 10 pt)))
- )
- (defun mk-text (pt str)
- (entmake (list '(0 . "TEXT")
- (cons 10 pt)
- (cons 1 str)
- '(40 . 20)
- '(62 . 10)
- (cons 7 (getvar "textstyle"))
- )
- )
- )
- (defun Mk-line (p1 p2)
- (entmake (list '(0 . "LINE") (cons 10 p1) (cons 11 p2)))
- )
- (setvar "cmdecho" 0)
- (if (and (setq ss (ssget '((0 . "INSERT"))))
- (setq pt (getpoint "\n请指定排列起点: "))
- )
- (progn
- (setq p00 pt
- os (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
- os (mapcar 'vlax-ename->vla-object os)
- os (mapcar 'vla-get-name os)
- lst (vl-sort (t1 os) '(lambda (a b) (< (car a) (car b))))
- pii (* pi 1.5)
- st 0
- )
- (foreach a lst
- (setq bn (car a)
- nn (cadr str)
- s1 (mk-in bn pt)
- ptn (p1p9 (vlax-ename->vla-object s1))
- p1 (car ptn)
- p9 (cadr ptn)
- dd (- (car p9) (car p1))
- )
- (command "Move" s1 "" "non" p1 "non" pt)
- (Mk-line pt (polar pt pii 150))
- (mk-text (polar pt pii 50) bn)
- (mk-text (polar pt pii 100) (strcat "块数量:" (itoa nn)))
- (setq pt (polar pt 0 (+ dd 500)))
- )
- (Mk-line p00 pt)
- )
- )
- (princ)
- )
|