Lisp »Tips 'n Tricks »Lblk.lsp
Un lisp che inserisce una legenda con (disegno) nome e numero dei blocchi selezionati.
Dato un disegno con molti blocchi...
LBLK.LPS V1.2
- Inserito il gestore degli errori
- Selezione blocchi: tutti o solo di un layer.
LBLK.LPS V1.1
- Esclude i blocchi anonimi di Autocad (*cad)
- Legge dalla variabile d'ambiente TEXTSIZE l'altezza dei testi nel disegno corrente.
- Chiede la distanza del testo dal blocco e l'altezza dell'interlinea testo (utile nel caso di blocchi con dimensione uguale o simile).
Per il problema della differenza di scala tra i blocchi è possibile usare il lisp LECH che mi scala i blocchi selezionati localmente.
;|
LBLK.LSP versione 1.0
Copyright © 2003 by Michele Ingenuo, Claudio Piccini
Inserisce una legenda con il nome ed il
numero dei blocchi selezionati
|;
(defun c:lblk (/ SS EL A lb N INDEX
nlb Index2 nBlk nome
cBlk stringa lstr P1
)
(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)
; cicla N volte
(repeat N
(setq EL (entget (SSNAME SS INDEX)))
(setq A (cdr (assoc 2 EL)))
; 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:
NOME_BLOCCO n.X
|;
(setq cBlk (rtos nBlk 2 0))
(setq stringa (strcat nome " n." cBlk))
; aggiungo la stringa alla lista lstr
(setq lstr (append lstr (list stringa)))
(setq Index2 (1+ Index2))
)
;|
inserisco la legenda
nel disegno
|;
(setq INDEX 0)
(setq P1 (getpoint "\nPunto di inserzione"))
; elimino nil dalla lista lstr
(setq lstr (cdr lstr))
(repeat nlb
(setq stringa (nth INDEX lstr))
; altezza testo = 0.3
(command "_TEXT" P1 0.3 0 stringa)
; interlinea = 0.6
(setq P1 (polar P1 (* 1.5 PI) 0.6))
(setq INDEX (1+ INDEX))
)
(setvar "cmdecho" 1 )
(princ)
)
|
Lisp »Tips 'n Tricks
|