Jump to content

MultipleBlocks on Multiple Points of Different Layers


Recommended Posts

Posted

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

Posted

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])

Posted

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

Posted

Thanks lee mac for this excellent piece of work,

 

Thanks david but I have not tried your code,

 

Appericiate both the efforts,

 

Regards

  • 9 months later...
Posted

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.

Posted

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 ]

Posted

Thanks Lee,

 

for the immediate response. The block sp is not dynamic.

 

Thankyou once again.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...