arri
Guest
a differenza del bcount degli express, il lisp allegato conta anche i blocchi dinamici e gli xref
;;; cadalyst 05/07 tip 2210: blkqnt.lsp block quantify (c) 2007 brock narum
;written by brock narum 6-7-05; updated 2-1-07; blkqnt routine will:
; (1) list all blocks, dynamic blocks and xrefs defined in current dwg.
; (2) give quantity for each block and dynamic block definition.
; (3) indicates if xref is not loaded.
(defun
c:blkqnt (/ olderr echo doc refn refs dblkn dblks blkn
blks qnt1 qnt2 lst1 lst2 lst3 dblk1 qntd blk1
qntb
)
(vl-load-com)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(princ "\nplease wait for list... \n") ; searches for blks/dynamic blks
(vlax-for
lays (vla-get-layouts doc)
(vlax-for
blk (vla-get-block lays)
(if (and (= (vla-get-objectname blk) "acdbblockreference")
(vlax-property-available-p blk 'isdynamicblock)
)
(if (= (vlax-get-property blk 'isdynamicblock) :vlax-true)
(setq dblkn (vla-get-effectivename blk)
dblks (cons dblkn dblks)
)
(setq blkn (vla-get-name blk)
blks (cons blkn blks)
)
)
)
)
) ; searches for xrefs
(vlax-for
itm (vla-get-blocks doc)
(if (= (vla-get-isxref itm) :vlax-true)
(if (vl-catch-all-error-p
(vl-catch-all-apply 'vla-get-xrefdatabase (list itm))
)
(setq refn (strcat (vla-get-name itm) " - *not loaded* ")
refs (cons refn refs)
)
(setq refn (vla-get-name itm)
refs (cons refn refs)
)
)
)
)
(if (and (= refs nil) (= blks nil) (= dblks nil))
(princ "\nno blocks in dwg...")
(progn ; sorts blks dyn blks and xrefs if found
(if blks
(setq blks (acad_strlsort blks))
)
(if dblks
(setq dblks (acad_strlsort dblks))
)
(if refs
(setq refs (acad_strlsort refs))
)
(setq qnt1 (length blks)
qnt2 (length dblks)
lst1 "====== block(s) ========"
lst2 "======= xref(s) ========="
lst3 "=== dynamic block(s) ===="
) ; creates list of xrefs
(foreach itm refs (setq lst2 (strcat lst2 "\n" itm)))
; cycles thru to get qnt of dyn blks
(while (> qnt2 0)
(setq dblk1 (car dblks)
dblks (vl-remove dblk1 dblks)
qntd (- qnt2 (length dblks))
qnt2 (length dblks)
lst3 (strcat lst3 "\n" dblk1 " = (" (rtos qntd 2 0) ") ")
)
) ; cycles thru to get qnt of blks
(while (> qnt1 0)
(setq blk1 (car blks)
blks (vl-remove blk1 blks)
qntb (- qnt1 (length blks))
qnt1 (length blks)
lst1 (strcat lst1 "\n" blk1 " = (" (rtos qntb 2 0) ") ")
)
)
(princ (strcat lst1 "\n" lst3 "\n" lst2))
(textscr)
)
)
(vlax-release-object doc)
(princ)
)
;;; cadalyst 05/07 tip 2210: blkqnt.lsp block quantify (c) 2007 brock narum
;written by brock narum 6-7-05; updated 2-1-07; blkqnt routine will:
; (1) list all blocks, dynamic blocks and xrefs defined in current dwg.
; (2) give quantity for each block and dynamic block definition.
; (3) indicates if xref is not loaded.
(defun
c:blkqnt (/ olderr echo doc refn refs dblkn dblks blkn
blks qnt1 qnt2 lst1 lst2 lst3 dblk1 qntd blk1
qntb
)
(vl-load-com)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(princ "\nplease wait for list... \n") ; searches for blks/dynamic blks
(vlax-for
lays (vla-get-layouts doc)
(vlax-for
blk (vla-get-block lays)
(if (and (= (vla-get-objectname blk) "acdbblockreference")
(vlax-property-available-p blk 'isdynamicblock)
)
(if (= (vlax-get-property blk 'isdynamicblock) :vlax-true)
(setq dblkn (vla-get-effectivename blk)
dblks (cons dblkn dblks)
)
(setq blkn (vla-get-name blk)
blks (cons blkn blks)
)
)
)
)
) ; searches for xrefs
(vlax-for
itm (vla-get-blocks doc)
(if (= (vla-get-isxref itm) :vlax-true)
(if (vl-catch-all-error-p
(vl-catch-all-apply 'vla-get-xrefdatabase (list itm))
)
(setq refn (strcat (vla-get-name itm) " - *not loaded* ")
refs (cons refn refs)
)
(setq refn (vla-get-name itm)
refs (cons refn refs)
)
)
)
)
(if (and (= refs nil) (= blks nil) (= dblks nil))
(princ "\nno blocks in dwg...")
(progn ; sorts blks dyn blks and xrefs if found
(if blks
(setq blks (acad_strlsort blks))
)
(if dblks
(setq dblks (acad_strlsort dblks))
)
(if refs
(setq refs (acad_strlsort refs))
)
(setq qnt1 (length blks)
qnt2 (length dblks)
lst1 "====== block(s) ========"
lst2 "======= xref(s) ========="
lst3 "=== dynamic block(s) ===="
) ; creates list of xrefs
(foreach itm refs (setq lst2 (strcat lst2 "\n" itm)))
; cycles thru to get qnt of dyn blks
(while (> qnt2 0)
(setq dblk1 (car dblks)
dblks (vl-remove dblk1 dblks)
qntd (- qnt2 (length dblks))
qnt2 (length dblks)
lst3 (strcat lst3 "\n" dblk1 " = (" (rtos qntd 2 0) ") ")
)
) ; cycles thru to get qnt of blks
(while (> qnt1 0)
(setq blk1 (car blks)
blks (vl-remove blk1 blks)
qntb (- qnt1 (length blks))
qnt1 (length blks)
lst1 (strcat lst1 "\n" blk1 " = (" (rtos qntb 2 0) ") ")
)
)
(princ (strcat lst1 "\n" lst3 "\n" lst2))
(textscr)
)
)
(vlax-release-object doc)
(princ)
)