symoin Posted January 15, 2012 Posted January 15, 2012 Hai Experts, if we have a drawing that has points more than 1 layers (say 10 layers or 20 layers and 50 points on each layer), and we need to place a block on each points on one layer and like wise for all. If we know that blocks have the same name as the layer. ex. layer =Tree & Block = tree, layer=Palm & Block = palm, Layer=pole & Block = pole, layer=dustbin & block = dustbin and so on. is there any lisp by which we can place the different blocks on different layers all in one single selection of window. Regards Quote
Lee Mac Posted January 15, 2012 Posted January 15, 2012 Give this a shot: ([color=BLUE]defun[/color] c:test ( [color=BLUE]/[/color] acdoc acsel acspc blk lay lst ) ([color=BLUE]setq[/color] acdoc ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])) acspc ([color=BLUE]vlax-get-property[/color] acdoc ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'CVPORT)) 'paperspace 'modelspace)) ) ([color=BLUE]cond[/color] ( ([color=BLUE]=[/color] 4 ([color=BLUE]logand[/color] 4 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 70 ([color=BLUE]tblsearch[/color] [color=MAROON]"LAYER"[/color] ([color=BLUE]getvar[/color] 'CLAYER)))))) ([color=BLUE]princ[/color] [color=MAROON]"\nCurrent Layer Locked."[/color]) ) ( ([color=BLUE]ssget[/color] '((0 . [color=MAROON]"POINT"[/color]))) ([color=BLUE]vlax-for[/color] obj ([color=BLUE]setq[/color] acsel ([color=BLUE]vla-get-activeselectionset[/color] acdoc)) ([color=BLUE]if[/color] ([color=BLUE]or[/color] ([color=BLUE]and[/color] ([color=BLUE]member[/color] ([color=BLUE]setq[/color] lay ([color=BLUE]vla-get-layer[/color] obj)) lst) ([color=BLUE]setq[/color] blk lay) ) ([color=BLUE]and[/color] ([color=BLUE]tblsearch[/color] [color=MAROON]"BLOCK"[/color] lay) ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] lay lst) blk lay ) ) ([color=BLUE]setq[/color] blk ([color=BLUE]findfile[/color] ([color=BLUE]strcat[/color] lay [color=MAROON]".dwg"[/color]))) ) ([color=BLUE]vla-put-layer[/color] ([color=BLUE]vla-insertblock[/color] acspc ([color=BLUE]vla-get-coordinates[/color] obj) blk 1.0 1.0 1.0 0.0) lay) ) ) ([color=BLUE]vla-delete[/color] acsel) ) ) ([color=BLUE]princ[/color]) ) ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color]) Quote
David Bethel Posted January 16, 2012 Posted January 16, 2012 Totally untested: [b][color=BLACK]([/color][/b]defun c:test [b][color=FUCHSIA]([/color][/b]/ dl td ln bn ss en ed i[b][color=FUCHSIA])[/color][/b] [color=#8b4513];;;DEFINE THE DELIMITER[/color] [b][color=FUCHSIA]([/color][/b]setq dl [color=#2f4f4f]" & "[/color][b][color=FUCHSIA])[/color][/b] [color=#8b4513];;;SETP THROUGH THE LAYER TABLE[/color] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq td [b][color=MAROON]([/color][/b]tblnext [color=#2f4f4f]"LAYER"[/color] [b][color=GREEN]([/color][/b]not td[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]setq ln [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 2 td[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]wcmatch ln [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"*"[/color] dl [color=#2f4f4f]"*"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq i 1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]/= [b][color=BLUE]([/color][/b]substr ln i [b][color=RED]([/color][/b]strlen dl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq i [b][color=BLUE]([/color][/b]1+ i[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq bn [b][color=GREEN]([/color][/b]substr ln 1 [b][color=BLUE]([/color][/b]1- i[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]or [b][color=GREEN]([/color][/b]findfile [b][color=BLUE]([/color][/b]strcat bn [color=#2f4f4f]".dwg"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] bn[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq ss [b][color=GREEN]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cons 0 [color=#2f4f4f]"POINT"[/color][b][color=RED])[/color][/b][b][color=RED]([/color][/b]cons 8 ln[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 2 bn[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 8 ln[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]setq en [b][color=BLUE]([/color][/b]ssname ss 0[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq ed [b][color=BLUE]([/color][/b]entget en[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] bn[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]progn [b][color=RED]([/color][/b]command [color=#2f4f4f]"_.INSERT"[/color] bn[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]command[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]entmake [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cons 2 bn[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 8 ed[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 10 ed[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]ssdel en ss[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] -David Quote
symoin Posted January 17, 2012 Author Posted January 17, 2012 Thanks lee mac for this excellent piece of work, Thanks david but I have not tried your code, Appericiate both the efforts, Regards Quote
symoin Posted October 28, 2012 Author Posted October 28, 2012 Hai lee, need you help again, now the drawing has block called sp instead of point. In this case I tried changing the code (ssget '((0 . "POINT"))) to (ssget '((0 . "insert"))) Select objects: ; error: ActiveX Server returned the error: unknown name: Coordinates and (ssget '((0 . "block"))) it shows the messege Command: TEST Select objects: Specify opposite corner: 0 found Select objects: *Cancel* ; error: Function cancelled Your help is highly appericiated. Quote
Lee Mac Posted October 28, 2012 Posted October 28, 2012 Block References do not have the Coordinates Property, but rather use the InsertionPoint property to store the coordinates of their point of insertion, hence the code becomes: ([color=BLUE]defun[/color] c:test ( [color=BLUE]/[/color] acdoc acsel acspc blk lay lst ) ([color=BLUE]setq[/color] acdoc ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color])) acspc ([color=BLUE]vlax-get-property[/color] acdoc ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'CVPORT)) 'paperspace 'modelspace)) ) ([color=BLUE]cond[/color] ( ([color=BLUE]=[/color] 4 ([color=BLUE]logand[/color] 4 ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 70 ([color=BLUE]tblsearch[/color] [color=MAROON]"LAYER"[/color] ([color=BLUE]getvar[/color] 'CLAYER)))))) ([color=BLUE]princ[/color] [color=MAROON]"\nCurrent Layer Locked."[/color]) ) ( ([color=BLUE]ssget[/color] '([highlight](0 . [color=MAROON]"INSERT"[/color]) (2 . [color=MAROON]"SP"[/color])[/highlight])) ([color=BLUE]vlax-for[/color] obj ([color=BLUE]setq[/color] acsel ([color=BLUE]vla-get-activeselectionset[/color] acdoc)) ([color=BLUE]if[/color] ([color=BLUE]or[/color] ([color=BLUE]and[/color] ([color=BLUE]member[/color] ([color=BLUE]setq[/color] lay ([color=BLUE]vla-get-layer[/color] obj)) lst) ([color=BLUE]setq[/color] blk lay) ) ([color=BLUE]and[/color] ([color=BLUE]tblsearch[/color] [color=MAROON]"BLOCK"[/color] lay) ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] lay lst) blk lay ) ) ([color=BLUE]setq[/color] blk ([color=BLUE]findfile[/color] ([color=BLUE]strcat[/color] lay [color=MAROON]".dwg"[/color]))) ) ([color=BLUE]vla-put-layer[/color] ([color=BLUE]vla-insertblock[/color] acspc [highlight]([color=BLUE]vla-get-insertionpoint[/color] obj)[/highlight] blk 1.0 1.0 1.0 0.0) lay) ) ) ([color=BLUE]vla-delete[/color] acsel) ) ) ([color=BLUE]princ[/color]) ) ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color]) [ Untested, assumes block 'SP' is not dynamic ] Quote
symoin Posted October 28, 2012 Author Posted October 28, 2012 Thanks Lee, for the immediate response. The block sp is not dynamic. Thankyou once again. 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.