Trova e segnala i blocchi sul disegno

Questo script cerca e segnala le entità di tipo blocco.

Il comando creato funziona da riga di comando: bfind

(defun bc:err (str)
    (if (/= str "Funzione cancellata")
        (princ (strcat "\nErrore:  " str))
        (setq *error* olderr)
    )
    (princ)
)
 
(DEFUN getblkname (/ )
    (SETQ blk (GETSTRING "\nNome del blocco: "))
    (if (not (tblsearch "BLOCK" blk))
        (progn
            (prompt (strcat "\nIl blocco " (strcase blk)" non è definito in questo disegno.  "))
            (setq blk nil)
        )
    )
    (prin1)
)
 
(defun count_blk (/ )
    (setq sset (ssget "X" (List (cons 2 blk))))
    (if sset
        (setq num (sslength sset))
    )
)
 
(defun c:bfind (/ ol os)
    (setq os (getvar "osmode"))
    (setvar "osmode" 0)
    (getblkname)
    (count_blk)
    (setq ol (getvar "clayer"))
    (command "_.layer" "t" "const" "m" "const" "c" "c" "" "")
    (command "_.zoom" "w" (getvar "limmin")(getvar "limmax"))
    (setq blocks (ssget "p"))
    (if (null blocks)(prompt "Non ci sono blocchi inseriti!  "))
    (setq indexer 0)
    (setq num (sslength blocks))
    (repeat num
        (setq elist (entget (ssname blocks indexer)))
        (setq indexer (+ 1 indexer))
        (setq entype (assoc 0 elist))
        (if (= "INSERT" (cdr entype))
            (progn
                (setq p1 (cdr (assoc 10 elist)))
                (setq p2 (getvar "viewctr"))
                (command "_line" p1 p2 "")
            )
        )
    )
    (command "_.layer" "s" ol "")
    (setvar "osmode" os)
    (princ)
)
 
Compago