• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

動的ブロックとxrefのカウント

  • Thread starter Thread starter arri
  • Start date Start date

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)
)
 
scusate scaricato il file l'ho lanciato se poi do' istruzione blkqnt, autocad mi dice programma sconosciuto
 
si gp, ma se il comando pretende di farglielo riconoscere con le minuscole!!!!!
 
...vi espongo un piccolo quesito...
ho caricato il lisp e funziona perfettamente, il mio problema è che quando faccio il conteggio dei blocchi dinamici, mi vengono calcolati anche i blocchi nascosti.
:mad: mi spiego meglio, il mio blocco contiene dei sottoblocchi che vado a spegnere con il parametro visibilità. mi piacerebbe che il lisp contasse solo quelli visibili e non anche quelli nascosti.
sapete per caso indirizzarmi o dirmi come risolvere questo problema?
vi ringrazio fin da ora, buona giornata a tutti. andr_ea
 
...con questo lisp riesco a contare benissimo tutti i blocchi dinamici all'inerno del dwg, ma se volessi selezionare solo una porzione di disegno e fare il conteggio esclusivamente sui blocchi selezionati, chè funzione devo aggiungere all'autolisp? fatto questo credo che il "dbcount" sia perfetto :)
grazie ancora in anticipo a tutti.
 
cerca il testo in nero ed incollagli davanti il testo in rosso, compreso il punto e virgola, potrai selezionare anche altri oggetti ma verranno filtrati solo i blocchi:

(prompt "\nselezionare oggetti")
(if (ssget (list '(0 . "insert") (cons 410 (getvar 'ctab))))

; (if (ssget "_x" (list '(0 . "insert") (cons 410 (getvar 'ctab))))


sperando che il buon lee non si arrabbi. :tongue:
 
ottimoooo, gentilissimo gp. l'ho provato ed è funzionante....ma sarebbe strepitoso se si potesse sceglie se l'intero foglio o la selezione ;) heheheheh son un rompiscatole lo so ;)
intanto grazie, poi se vi va di fare la doppia opzione, benvenga :) buona giornata
 
私はこのリスペスルーチンを試してみましたが、私は長さ60,70,80でドアを持っていた場合は、例えば、
様々な長さのどれくらいの長さをカウントできますか?
 

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top