Attachment 'bre.lsp'
Download 1 (defun c:BRE (/ *error* blk f ss temp)
2 ;; Replace multiple instances of selected blocks (can be different) with selected block
3 ;; Size and Rotation will be taken from original block and original will be deleted
4 ;; Required subroutines: AT:GetSel
5 ;; Alan J. Thompson, 02.09.10
6 ;; Found at: http://www.cadtutor.net/forum/showthread.php?48458-Replace-Selected-Block-Or-Blocks-With-Another-Block
7 (vl-load-com)
8 (defun *error* (msg)
9 (and f *AcadDoc* (vla-endundomark *AcadDoc*))
10 (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
11 (princ (strcat "\nError: " msg))
12 )
13 )
14 (if
15 (and
16 (AT:GetSel
17 entsel
18 "\nSelect replacement block: "
19 (lambda (x / e)
20 (if
21 (and
22 (eq "INSERT" (cdr (assoc 0 (setq e (entget (car x))))))
23 (/= 4 (logand (cdr (assoc 70 (tblsearch "BLOCK" (cdr (assoc 2 e))))) 4))
24 (/= 4 (logand (cdr (assoc 70 (entget (tblobjname "LAYER" (cdr (assoc 8 e)))))) 4))
25 )
26 (setq blk (vlax-ename->vla-object (car x)))
27 )
28 )
29 )
30 (princ "\nSelect blocks to be repalced: ")
31 (setq ss (ssget "_:L" '((0 . "INSERT"))))
32 )
33 (progn
34 (setq f (not (vla-startundomark
35 (cond (*AcadDoc*)
36 ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
37 )
38 )
39 )
40 )
41 (vlax-for x (setq ss (vla-get-activeselectionset *AcadDoc*))
42 (setq temp (vla-copy blk))
43 (mapcar (function (lambda (p)
44 (vl-catch-all-apply
45 (function vlax-put-property)
46 (list temp p (vlax-get-property x p))
47 )
48 )
49 )
50 '(Insertionpoint Rotation XEffectiveScaleFactor YEffectiveScaleFactor
51 ZEffectiveScaleFactor
52 )
53 )
54 (vla-delete x)
55 )
56 (vla-delete ss)
57 (*error* nil)
58 )
59 )
60 (princ)
61 )
62 (defun AT:GetSel (meth msg fnc / ent good)
63 ;; meth - selection method (entsel, nentsel, nentselp)
64 ;; msg - message to display (nil for default)
65 ;; fnc - optional function to apply to selected object
66 ;; Ex: (AT:GetSel entsel "\nSelect arc: " (lambda (x) (eq (cdr (assoc 0 (entget (car x)))) "ARC")))
67 ;; Alan J. Thompson, 05.25.10
68 (setvar 'errno 0)
69 (while (not good)
70 (setq ent (meth (cond (msg)
71 ("\nSelect object: ")
72 )
73 )
74 )
75 (cond
76 ((vl-consp ent)
77 (setq good (cond ((or (not fnc) (fnc ent)) ent)
78 ((prompt "\nInvalid object!"))
79 )
80 )
81 )
82 ((eq (type ent) 'STR) (setq good ent))
83 ((setq good (eq 52 (getvar 'errno))) nil)
84 ((eq 7 (getvar 'errno)) (setq good (prompt "\nMissed, try again.")))
85 )
86 )
87 )
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.You are not allowed to attach a file to this page.