JoeC Posted August 21, 2009 Posted August 21, 2009 I have a large quantity of the same block that I need an accurate count of. Some of them are "lone" blocks and some of them are nested in another block. The BCOUNT command will not count the nested blocks. QSELECT worked the first time, but now it will not count the nested blocks either!?!. (Is there a setting for this?) What would you all recommend as the quickest / easiest way to achieve this? Thanks! Quote
rkent Posted August 21, 2009 Posted August 21, 2009 I have a large quantity of the same block that I need an accurate count of. Some of them are "lone" blocks and some of them are nested in another block. The BCOUNT command will not count the nested blocks. QSELECT worked the first time, but now it will not count the nested blocks either!?!. (Is there a setting for this?) What would you all recommend as the quickest / easiest way to achieve this? Thanks! Maybe try this one? Not my own. BlCount.lsp Quote
Lee Mac Posted August 21, 2009 Posted August 21, 2009 Try this: [i][color=#990099];; Block Counter by Lee McDonnell (Lee Mac) ~ 22.08.2009[/color][/i] [i][color=#990099];; Copyright © August 2009[/color][/i] [i][color=#990099];; Will Count all instances of a block, including nested.[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] BlkCount [b][color=RED]([/color][/b]Blk [b][color=BLUE]/[/color][/b] i j ss *blk[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=#009900]0[/color][/b] Blk [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] Blk[b][color=RED])[/color][/b] j [b][color=#009900]-1[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] GetNest [b][color=RED]([/color][/b]Obj Nme[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Name[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b] Nme[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] i[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-for[/color][/b] Sub Obj [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"AcDbBlockReference"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ObjectName[/color][/b] Sub[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]GetNest [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b] *blk [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Name[/color][/b] Sub[b][color=RED])[/color][/b][b][color=RED])[/color][/b] Nme[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"INSERT"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ent [b][color=RED]([/color][/b][b][color=BLUE]ssname[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] j [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] j[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]GetNest [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *blk [b][color=RED]([/color][/b][b][color=BLUE]vla-get-blocks[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]2[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Blk[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] i[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] str[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] str [b][color=RED]([/color][/b][b][color=BLUE]getstring[/color][/b] [b][color=BLUE]t[/color][/b] [b][color=#ff00ff]"\nSpecify Block Name: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#ff00ff]"\nInstances: "[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b] [b][color=RED]([/color][/b]BlkCount str[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Quote
JoeC Posted August 24, 2009 Author Posted August 24, 2009 Thanks for the responses: Rkent...the lisp worked o.k., but it did not count the nested blocks. Lee...I figured out that the "test" counts a specified block (and it did work well), but "blkcount" was not recognized as a command. What does it do? Did I do something wrong? Thanks for the help & regards, Quote
Lee Mac Posted August 24, 2009 Posted August 24, 2009 Joe... BlkCount is a sub-function, meaning that it is a function to be called with arguments and is a sort of "helper function" to the main routine. The syntax call for this program is indeed test. I have updated this routine somewhat: [i][color=#990099];; Block Counter by Lee McDonnell (Lee Mac) ~ 22.08.2009[/color][/i] [i][color=#990099];; Copyright © August 2009[/color][/i] [i][color=#990099];; Will Count all instances of a block, including nested.[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] BlkCount [b][color=RED]([/color][/b]Blk [b][color=BLUE]/[/color][/b] i j ss *blk[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=#009900]0[/color][/b] Blk [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] Blk[b][color=RED])[/color][/b] j [b][color=#009900]-1[/color][/b] *blk [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Blocks[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] GetNest [b][color=RED]([/color][/b]Obj Nme[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Name[/color][/b] Obj[b][color=RED])[/color][/b][b][color=RED])[/color][/b] Nme[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] i[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-for[/color][/b] Sub Obj [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"AcDbBlockReference"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ObjectName[/color][/b] Sub[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]GetNest [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b] *blk [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Name[/color][/b] Sub[b][color=RED])[/color][/b][b][color=RED])[/color][/b] Nme[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]ssget[/color][/b] [b][color=#ff00ff]"_X"[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] . [b][color=#ff00ff]"INSERT"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ent [b][color=RED]([/color][/b][b][color=BLUE]ssname[/color][/b] ss [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] j [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] j[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]GetNest [b][color=RED]([/color][/b][b][color=BLUE]vla-item[/color][/b] *blk [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]2[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Blk[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] i[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] str lst tdef[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] str [b][color=RED]([/color][/b][b][color=BLUE]getstring[/color][/b] [b][color=BLUE]t[/color][/b] [b][color=#ff00ff]"\nSpecify Block Name <All> : "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]""[/color][/b] str[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] tdef [b][color=RED]([/color][/b][b][color=BLUE]tblnext[/color][/b] [b][color=#ff00ff]"BLOCK"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]null[/color][/b] tdef[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lst [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]2[/color][/b] tdef[b][color=RED])[/color][/b][b][color=RED])[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]snvalid[/color][/b] str[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]tblsearch[/color][/b] [b][color=#ff00ff]"BLOCK"[/color][/b] str[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lst [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] str[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n** Block not Found **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] mstr [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] [b][color=#009900]5[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]max[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]strlen[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=RED]([/color][/b]Pad [b][color=#ff00ff]"\n Block"[/color][/b] [b][color=#009900]32[/color][/b] mstr[b][color=RED])[/color][/b] [b][color=#ff00ff]"| Count"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=RED]([/color][/b]Pad [b][color=#ff00ff]"\n "[/color][/b] [b][color=#009900]45[/color][/b] mstr[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]Pad [b][color=#ff00ff]"|"[/color][/b] [b][color=#009900]45[/color][/b] [b][color=#009900]10[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] x lst [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=RED]([/color][/b]Blkcount x[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=RED]([/color][/b]Pad [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#ff00ff]"\n "[/color][/b] x[b][color=RED])[/color][/b] [b][color=#009900]46[/color][/b] mstr[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]Pad [b][color=#ff00ff]"|"[/color][/b] [b][color=#009900]46[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=#009900]10[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strlen[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b] i[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b] i[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] Pad [b][color=RED]([/color][/b]Str Chc Len[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strlen[/color][/b] Str[b][color=RED])[/color][/b] Len[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Str [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] Str [b][color=RED]([/color][/b][b][color=BLUE]chr[/color][/b] Chc[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Str[b][color=RED])[/color][/b] Quote
alanjt Posted August 24, 2009 Posted August 24, 2009 Thanks for the responses: Rkent...the lisp worked o.k., but it did not count the nested blocks. Lee...I figured out that the "test" counts a specified block (and it did work well), but "blkcount" was not recognized as a command. What does it do? Did I do something wrong? Thanks for the help & regards, blcount is a subroutine. if you type (blkcount "DETAIL") it will count every occurance of a block named "DETAIL". Quote
Lee Mac Posted August 24, 2009 Posted August 24, 2009 Joe, Take a read of this article - it will explain about sub-functions: http://www.afralisp.net/lispa/lisp5.htm Quote
JoeC Posted August 24, 2009 Author Posted August 24, 2009 Thanks for the lisp, Lee. It is EXACTLY what I needed. Quote
Lee Mac Posted August 24, 2009 Posted August 24, 2009 Thanks for the lisp, Lee. It is EXACTLY what I needed. You're very welcome Joe, happy to be of assistance. Lee Quote
alanjt Posted August 24, 2009 Posted August 24, 2009 You're very welcome Joe, happy to be of assistance. Lee nice work btw lee. Quote
stevsmith Posted August 24, 2009 Posted August 24, 2009 Have you ever tried dataextraction? I used it today for the 1st time in months. Saved me ages counting all those fin plates. Quote
Lee Mac Posted August 24, 2009 Posted August 24, 2009 nice work btw lee. Thanks mate I don't use recursion that often - takes me a while to think it through.. Have you ever tried dataextraction?I used it today for the 1st time in months. Saved me ages counting all those fin plates. Not sure if that counts Nested Blocks though? Quote
stevsmith Posted August 25, 2009 Posted August 25, 2009 Not sure if that counts Nested Blocks though? yes it does, because I used to use it for handrail brackets components and screw fittings. it used to give me qtys for brackets, screws, glass disks etc. Quote
JoeC Posted August 25, 2009 Author Posted August 25, 2009 I've used data extraction quite a lot, but for some reason, it hasn't worked in my current layout. Other times it has worked fine. My real problem with it, is that it takes a few minutes extra to go through the steps to complete. The lisp that Lee gave me is almost instant on the specific block in question. Quote
f700es Posted August 25, 2009 Posted August 25, 2009 I vote for this as well. I use it all the time. yes it does, because I used to use it for handrail brackets components and screw fittings. it used to give me qtys for brackets, screws, glass disks etc. Quote
stevsmith Posted August 25, 2009 Posted August 25, 2009 I'm all for the LISP Well there's a surprise. Quote
Fire Alarm Posted August 26, 2009 Posted August 26, 2009 I condensed my symbol blocks to save time in my designs. The problem is I cannot use bcount because it doesn't recognize parameters. I experimented with dataextraction which works pretty good, but it takes alittle time to change and delete what I don't need. Is it possible to create a lisp to count parameters, if the parameter names are listed in the routine? Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.