sezbw 发表于 2006-7-18 03:36:42

替换选定的块组...

我正在寻找一种用另一种类型的块替换选定的块组的方法......
我有一个时间表,其中包含许多不同类型的块。我真的很想能够手动选择一些块并让它们被另一种类型替换。不是在整个绘图中,只是我选择的那些。
我在CAD中能找到的只是Express菜单命令
用另一个块替换块
。这不适合,因为它在整个绘图中用另一种类型替换了一种类型。
有什么大师能给我指明正确的方向吗?
感谢一位非常感激的新手。
**** Hidden Message *****

Kerry 发表于 2006-7-18 05:01:44

有几个问题..
这些块是否有属性
。对于被替换的块实例,..
插入点是否相同
比例是否相同
旋转将是相同的
该层将是相同的
替换块名称的选择是否有逻辑依据。

Kerry 发表于 2006-7-18 05:11:17

一些粗糙的东西玩..



(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)
(程序)

Arizona 发表于 2006-7-18 06:16:48

伟大的回应!那是什么,整整10分钟?

hudster 发表于 2006-7-18 07:14:52

很酷的口齿伶俐。
如果您可以选择图形中已经存在的块来替换第一个块,这将是一个改进。

sezbw 发表于 2006-7-20 02:31:52

谢谢凯瑞,这太棒了。我已经让工作简单多了。
不错!

ronjonp 发表于 2006-7-21 12:05:12

我把这个放在一起,将一个选定的源块复制到另一个选定的块上。不是最快的例程,但它有效。
;;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)))
)

CADaver 发表于 2006-7-21 12:33:21

我有这张十年前的照片...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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]
查看完整版本: 替换选定的块组...