;|
LBLK.LSP versione 1.1
Copyright © 2003 by
Michele Ingenuo (www.3eye.biz)
Claudio Piccini (www.cg-cad.com)
Inserisce una legenda con disegno, nome e
numero dei blocchi selezionati
(Non funziona con blocchi con attributi!)
|;
(defun c:lblk (/ SS EL A lb N INDEX
nlb Index2 nBlk nome
cBlk stringa lstr
P1 P2 P3
hTxt dTxt aTxt
)
(graphscr)
(setvar "cmdecho" 0)
; selezione dei blocchi
(setq SS (ssget (list (cons 0 "insert"))))
(setq EL (entget (SSNAME SS 0)))
; A = nome blocco
(setq A (cdr (assoc 2 EL)))
; lb lista dei nomi dei blocchi
(setq lb (list A))
; N = dimensione di SS - 1
(setq N (- (sslength SS) 1))
(setq INDEX 1)
(repeat N
(setq EL (entget (SSNAME SS INDEX)))
(setq A (cdr (assoc 2 EL)))
(if (/= (substr A 1 1) "*") ; ignora i blocchi anonimi: *cad
(progn
; E = test di controllo
(setq E 0)
(setq Index2 0)
; nlb = dimensione di lb
(setq nlb (length lb))
(repeat nlb
(setq nome (nth Index2 lb))
(if (= nome A) (setq E 1))
(setq Index2 (1+ Index2))
)
(if (= E 0)
(setq lb (append lb (list A)))
)
)
)
(setq INDEX (1+ INDEX))
)
;|
scorro la lista SS e con l'aiuto di lb
conto i blocchi con lo stesso nome
|;
(setq N (sslength SS))
; nlb = dimensione definitiva di lb
(setq nlb (length lb))
; inizializzo la lista delle stringhe
(setq lstr (list nil))
(setq Index2 0)
(setq nBlk 0)
(repeat nlb
(setq nome (nth Index2 lb))
(setq INDEX 0)
(setq nBlk 0)
(repeat N (setq EL (entget (SSNAME SS INDEX)))
(setq A (cdr (assoc 2 EL)))
(if (= nome A)
(setq nBlk (1+ nBlk))
)
(setq INDEX (1+ INDEX))
)
;|
converto il numero in stringa e creo
la stringa di testo per la legenda
|;
(setq cBlk (rtos nBlk 2 0))
(setq stringa (strcat cBlk " " nome ))
; aggiungo la stringa alla lista lstr
(setq lstr (append lstr (list stringa)))
(setq Index2 (1+ Index2))
)
; elimino nil dalla lista lstr
(setq lstr (cdr lstr))
;
; inserisco la legenda nel disegno
;
(setq P1 (getpoint "\nPunto di inserzione"))
(setq hTxt (getvar "TEXTSIZE")) ; TEXTSIZE = altezza del testo nel disegno corrente
(setq dTxt (getdist "\nDistanza del testo dal blocco: "))
(setq aTxt (getdist "\nAltezza interlinea testo: "))
(setq INDEX 0)
(repeat nlb
(setq stringa (nth INDEX lstr)) ; estraggo la stringa
(setq nome (nth INDEX lb)) ; estraggo il blocco
(command "_insert" nome P1 1 "" "")
(setq P2 (polar P1 (* pi 1.5) (/ hTxt 2))) ; punto d'inserimento della stringa
(setq P3 (polar P2 0 dTxt))
(command "_text" P3 hTxt 0 stringa)
(setq P1 (polar P1 (* pi 1.5) aTxt))
(setq INDEX (1+ INDEX))
)
(setvar "cmdecho" 1)
(princ)
)