Jump to content

Recommended Posts

Posted

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?

Posted

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

Posted

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]

Posted

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

Posted
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

Posted

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

  • 2 weeks later...
Posted

When using the LISP form Lee it ask to Select 3D Solids. I don't think this is right. What am I doing wrong?

  • 6 years later...
Posted

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

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