替换选定的块组...
我正在寻找一种用另一种类型的块替换选定的块组的方法......我有一个时间表,其中包含许多不同类型的块。我真的很想能够手动选择一些块并让它们被另一种类型替换。不是在整个绘图中,只是我选择的那些。
我在CAD中能找到的只是Express菜单命令
用另一个块替换块
。这不适合,因为它在整个绘图中用另一种类型替换了一种类型。
有什么大师能给我指明正确的方向吗?
感谢一位非常感激的新手。
**** Hidden Message ***** 有几个问题..
这些块是否有属性
。对于被替换的块实例,..
插入点是否相同
比例是否相同
旋转将是相同的
该层将是相同的
替换块名称的选择是否有逻辑依据。
一些粗糙的东西玩..
(DEFUN c:test(/dbx block name
DWGBASENAME ELIST
INDEX SSET
)
(提示" \ n选择要替换的块:")
(SETQ sset (SSGET '((0。" INSERT "))
dbx Block name(get filed
"选择替换块"
(GETVAR " DWGPREFIX))
" DWG "
)
(IF)
(NOT
(TBL search " Block)
(SETQ
dwgbaseName(VL文件名基
dbx Block name
)
)
)
(PROGN(COMMAND " _ INSERT " dbx Block name)
(程序) 伟大的回应!那是什么,整整10分钟? 很酷的口齿伶俐。
如果您可以选择图形中已经存在的块来替换第一个块,这将是一个改进。 谢谢凯瑞,这太棒了。我已经让工作简单多了。
不错! 我把这个放在一起,将一个选定的源块复制到另一个选定的块上。不是最快的例程,但它有效。
;;Function to copy blocks from one point to another
(defun c:Replaceblocks
(/ ent1 ent2 obj1 obj2 pt1
pt2 x ss indexkeyw rot
r2d copyobj
)
(while
(= ent1 nil)
(setq ent1 (car (entsel "\n Select block to copy: ")))
(if (= ent1 nil)
(alert "\n You missed, try again...")
)
)
(while
(= ent2 nil)
(setq ent2 (car (entsel "\n Select block you want to swap: ")))
(if (= ent2 nil)
(alert "\n You missed, try again...")
)
)
(setq obj1 (vlax-ename->vla-object ent1)
pt1(trans (vlax-get obj1 'insertionpoint) 0 1)
)
(setq obj2 (vlax-ename->vla-object ent2)
x (vlax-get-property obj2 'Name)
)
(if
(and
(= (vla-get-ObjectName Obj1) "AcDbBlockReference")
(not (vlax-property-available-p Obj1 'Path))
)
(progn
(if (not *default*)
(setq *default* "Select")
)
(initget 0 "Select All")
(setq keyw
(cond
((getkword
(strcat "\nEnter selection option (Select / All): >: "
)
)
)
(*default*)
)
)
(setq *default* keyw)
(cond
((= Keyw "Select") (setq SS (ssget (list (cons '2 x)))))
((= Keyw "All") (setq SS (ssget "X" (list (cons '2 x)))))
)
(setq
index -1
)
(while (vla-object obj)
pt2 (trans (vlax-get obj2 'insertionpoint) 0 1)
rot (vlax-get obj2 'Rotation)
copyobj (vlax-invoke obj1 'Copy)
)
(vla-put-rotation copyobj rot)
(vlax-invoke copyobj 'Move pt1 pt2)
)
)
)
(princ)
(command "_erase" ss "")
(princ)
(princ (strcat "\nBlocks swapped - " (itoa index)))
)
我有这张十年前的照片...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:REPLs (/ ENT1 BL1 bl2 OLD ODNM)
(command "undo" "begin")
(prompt "\nSelect Replacement Block: ")
(setq bl2 (cdr (assoc 2 (entget (car (entsel))))))
(prompt "Select blocks to replace: ")
(setq ENT1 (ssget))
(setq N (sslength ENT1))
(setq I 0)
(repeat N
(setq BL1 (entget (ssname ENT1 I)))
(setq NWNM (cons 2 bl2))
(setq OLD (assoc 2 BL1))
(setq ODNM (cdr OLD))
(entmod (subst NWNM OLD BL1))
(setq I (1+ I))
)
(command "undo" "end")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
页:
[1]