Jump to content

Replacing Blocks


SAM_R

Recommended Posts

I'm working on the elctrical system of a school where we are replacing all the lights. Now the problem is the drawing has the Arch. 2X4 light block in it and I need to replace it with our company 2X4 block, but some of the lights are at 90 degrees and some are some are at 180. When I use blockreplace it puts my block in at 90 on all the old blocks. Is there a way to have them come in turned the right way?

Link to comment
Share on other sites

Modification of an old LISP I wrote a while back:

 

;; Block Replacer by Lee McDonnell

(defun c:brep (/ blk brep ss doc spc i j)
 (vl-load-com)
 (if (and (setq blk (getstring T "\nSpecify Block to be Inserted: "))
      (snvalid blk)
      (or (tblsearch "BLOCK" blk) (findfile (strcat blk ".dwg")))
      (setq brep (car (entsel "\nSelect Block to Replace: "))))
   (progn
     (if (setq ss (ssget "X" (list (cons 0 "INSERT")
       (cons 2 (cdr (assoc 2 (entget brep))))
         (if (getvar "CTAB")(cons 410 (getvar "CTAB"))
           (cons 67 (- 1 (getvar "TILEMODE")))))))
   (progn
     (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
       spc (if (zerop (vla-get-activespace doc))
             (if (= (vla-get-mspace doc) :vlax-true)
           (vla-get-modelspace doc)
           (vla-get-paperspace doc))
             (vla-get-modelspace doc)) i 0 j 0)
     (vla-EndUndoMark doc)
     (vla-StartUndoMark doc)
     (foreach ent (mapcar 'vlax-ename->vla-object
                  (mapcar 'cadr (ssnamex ss)))
       (vla-insertblock spc
         (vla-get-InsertionPoint ent) blk
           (vla-get-xscalefactor ent)
         (vla-get-yscalefactor ent)
               (vla-get-zscalefactor ent)
             (vla-get-rotation ent))
       (if (vl-catch-all-error-p
         (vl-catch-all-apply
           'vla-delete (list ent)))
         (setq i (1+ i)) (setq j (1+ j))))
     (princ (strcat "\n" (itoa j) " Blocks Replaced"
       (if (zerop i) "." (strcat (itoa i) " were on a Locked Layer!"))))
     (vla-EndUndoMark doc))
   (princ "\n<!> No Blocks Found <!>")))
   (princ "\n<!> Replacement Block not Found <!>"))
 (princ))

Link to comment
Share on other sites

Actually this is probably better (credit to David Bethel for block definition code):

 

[b][color=BLACK]([/color][/b]defun c:brep [b][color=FUCHSIA]([/color][/b]/ bdef blk brep ss doc spc i j[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]vl-load-com[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq bdef [b][color=NAVY]([/color][/b]getvar [color=#2f4f4f]"INSNAME"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not blk[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq blk [b][color=MAROON]([/color][/b]getstring t [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"\nSpecify Block to be Inserted <"[/color] bdef [color=#2f4f4f]">: "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]cond [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]eq [color=#2f4f4f]""[/color] blk[b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]setq blk bdef[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]snvalid blk[b][color=BLUE])[/color][/b]
                    [b][color=BLUE]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] blk[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]snvalid blk[b][color=BLUE])[/color][/b]
                    [b][color=BLUE]([/color][/b]findfile [b][color=RED]([/color][/b]strcat blk [color=#2f4f4f]".dwg"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]command [color=#2f4f4f]"_.insert"[/color] blk[b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]command[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
     [b][color=MAROON]         ([/color][/b]T [b][color=GREEN]([/color][/b]setq blk nil bdef [color=#2f4f4f]""[/color][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]if [b][color=NAVY]([/color][/b]setq brep [b][color=MAROON]([/color][/b]car [b][color=GREEN]([/color][/b]entsel [color=#2f4f4f]"\nSelect Block to be Replaced: "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
   [b][color=NAVY]([/color][/b]progn
     [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]setq ss [b][color=BLUE]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=PURPLE])[/color][/b]
       [b][color=PURPLE]([/color][/b]cons 2 [b][color=TEAL]([/color][/b]cdr [b][color=OLIVE]([/color][/b]assoc 2 [b][color=GRAY]([/color][/b]entget brep[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
         [b][color=PURPLE]([/color][/b]if [b][color=TEAL]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=TEAL])[/color][/b][b][color=TEAL]([/color][/b]cons 410 [b][color=OLIVE]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
           [b][color=TEAL]([/color][/b]cons 67 [b][color=OLIVE]([/color][/b]- 1 [b][color=GRAY]([/color][/b]getvar [color=#2f4f4f]"TILEMODE"[/color][b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
   [b][color=GREEN]([/color][/b]progn
     [b][color=BLUE]([/color][/b]setq doc [b][color=RED]([/color][/b]vla-get-ActiveDocument [b][color=PURPLE]([/color][/b]vlax-get-Acad-Object[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
       spc [b][color=RED]([/color][/b]if [b][color=PURPLE]([/color][/b]zerop [b][color=TEAL]([/color][/b]vla-get-activespace doc[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
             [b][color=PURPLE]([/color][/b]if [b][color=TEAL]([/color][/b]= [b][color=OLIVE]([/color][/b]vla-get-mspace doc[b][color=OLIVE])[/color][/b] :vlax-true[b][color=TEAL])[/color][/b]
           [b][color=TEAL]([/color][/b]vla-get-modelspace doc[b][color=TEAL])[/color][/b]
           [b][color=TEAL]([/color][/b]vla-get-paperspace doc[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
             [b][color=PURPLE]([/color][/b]vla-get-modelspace doc[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] i 0 j 0[b][color=BLUE])[/color][/b]
     [b][color=BLUE]([/color][/b]vla-EndUndoMark doc[b][color=BLUE])[/color][/b]
     [b][color=BLUE]([/color][/b]vla-StartUndoMark doc[b][color=BLUE])[/color][/b]
     [b][color=BLUE]([/color][/b]foreach ent [b][color=RED]([/color][/b]mapcar 'vlax-ename->vla-object
                  [b][color=PURPLE]([/color][/b]mapcar 'cadr [b][color=TEAL]([/color][/b]ssnamex ss[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b]vla-insertblock spc
         [b][color=PURPLE]([/color][/b]vla-get-InsertionPoint ent[b][color=PURPLE])[/color][/b] blk
           [b][color=PURPLE]([/color][/b]vla-get-xscalefactor ent[b][color=PURPLE])[/color][/b]
         [b][color=PURPLE]([/color][/b]vla-get-yscalefactor ent[b][color=PURPLE])[/color][/b]
               [b][color=PURPLE]([/color][/b]vla-get-zscalefactor ent[b][color=PURPLE])[/color][/b]
             [b][color=PURPLE]([/color][/b]vla-get-rotation ent[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b]if [b][color=PURPLE]([/color][/b]vl-catch-all-error-p
         [b][color=TEAL]([/color][/b]vl-catch-all-apply
           'vla-delete [b][color=OLIVE]([/color][/b]list ent[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
         [b][color=PURPLE]([/color][/b]setq i [b][color=TEAL]([/color][/b]1+ i[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]setq j [b][color=TEAL]([/color][/b]1+ j[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
     [b][color=BLUE]([/color][/b]princ [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"\n"[/color] [b][color=PURPLE]([/color][/b]itoa j[b][color=PURPLE])[/color][/b] [color=#2f4f4f]" Blocks Replaced"[/color]
       [b][color=PURPLE]([/color][/b]if [b][color=TEAL]([/color][/b]zerop i[b][color=TEAL])[/color][/b] [color=#2f4f4f]"."[/color] [b][color=TEAL]([/color][/b]strcat [b][color=OLIVE]([/color][/b]itoa i[b][color=OLIVE])[/color][/b] [color=#2f4f4f]" were on a Locked Layer!"[/color][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
     [b][color=BLUE]([/color][/b]vla-EndUndoMark doc[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
   [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\n<!> No Blocks Found <!>"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
   [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\n<!> Replacement Block not Valid <!>"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

Link to comment
Share on other sites

That didn't work they are still coming in the wrong way. Any other suggestions.

 

Hmmm... it must be something to do with your block - the LISP is very simple - just retrieves the insertion, scale and rotation of all the blocks (a sample of which the user selects), and replaces them with a block with the same properties.

 

See video :)

Block Replace.zip

Link to comment
Share on other sites

You can (entmod) DXF group 2 in an INSERT definition for an easy update:

[b][color=BLACK]([/color][/b]defun c:ins2ins [b][color=FUCHSIA]([/color][/b]/ lb bn ss i en ed[b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;;GET NEW BLOCK INFO[/color]
 [b][color=FUCHSIA]([/color][/b]setq lb [b][color=NAVY]([/color][/b]getvar [color=#2f4f4f]"INSNAME"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not bn[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq bn [b][color=MAROON]([/color][/b]getstring [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"\nBLOCK To Insert <"[/color] lb [color=#2f4f4f]">:   "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]cond [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]= bn [color=#2f4f4f]""[/color][b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]setq bn lb[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]snvalid bn[b][color=BLUE])[/color][/b]
                    [b][color=BLUE]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] bn[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
              [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]snvalid bn[b][color=BLUE])[/color][/b]
                    [b][color=BLUE]([/color][/b]findfile [b][color=RED]([/color][/b]strcat bn [color=#2f4f4f]".DWG"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]command [color=#2f4f4f]"_.INSERT"[/color] bn[b][color=GREEN])[/color][/b]
               [b][color=GREEN]([/color][/b]command[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
              [b][color=MAROON]([/color][/b]T [b][color=GREEN]([/color][/b]setq bn nil lb [color=#2f4f4f]""[/color][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]while [b][color=NAVY]([/color][/b]not ss[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nSelect INSERTs To Update..."[/color][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b]
                              [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=RED])[/color][/b]
                                  [b][color=RED]([/color][/b]cons 410 [b][color=PURPLE]([/color][/b]getvar [color=#2f4f4f]"CTAB"[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
                                  [b][color=RED]([/color][/b]cons 67 [b][color=PURPLE]([/color][/b]- 1 [b][color=TEAL]([/color][/b]getvar [color=#2f4f4f]"TILEMODE"[/color][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][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]setq i [b][color=NAVY]([/color][/b]sslength ss[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]minusp [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=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss i[b][color=MAROON])[/color][/b]
              ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]entmod [b][color=MAROON]([/color][/b]subst [b][color=GREEN]([/color][/b]cons 2 bn[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]assoc 2 ed[b][color=GREEN])[/color][/b] ed[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

Link to comment
Share on other sites

  • 2 weeks later...
  • 6 years later...

Sam....

Just change the name of Lee's program to Blrep.lsp (and ind replace all brep to blrep)

it then works !!!

Lee....

is there a way to choose just the few blocks to replace ... and not all in the drawing ???

Link to comment
Share on other sites

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...