;| 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) )