众山小 发表于 2013-4-2 13:08:45

求助:同名块插入取代问题


   不知道i大家有没有遇到这样的问题,给其他专业提供建筑最新图纸时,其他专业却反馈图纸并没有修改。最后的原因却是“同名图块”在作怪!原来其他专业图纸中存在与建筑新提图纸中的“同名图块”,这样新图块插入时被就原图块取代了,插入后自然看不出图纸变化。
   这样最后结果是,建筑图纸和设备图纸不同,有时就匆忙出图了。
   被这个问题纠结了好长一段时间。今天到网上一搜,不少网友和我存在同样的苦恼,但却并没有找到合适的解决方法。
以下是我转帖其他论坛网友的帖子,寻求解决方法!


两张不同时期做的图有同名的块把块从一张图拷贝到另一张时出现
“_pasteclip忽略块_XXX的重复定义。”然后就只能出现本图里自己的块
愿望:
难道就不能出来个提示:“要覆盖当前图形中同名块吗Y/N”
因为考的目的就是要替掉老版本的块(只要基点一致即可)。
如果选择不替代的话(选N)
顺便提示“新块NEW”然后直接给块再起个名字
==================================
据说可以用设计中心。可我试用了,不能用
据说可以用expert,可我所有的参数全试过了,还是不行
据说可以用-scalelistedit命令,可是我是CAD2004版,根本就不能认识这个命令
当然,先在删除原有的图块,清理后再插入要插入的图块,可以解决这个问题,可是太烦了

Gu_xl 发表于 2013-4-2 15:55:02

本帖最后由 Gu_xl 于 2013-4-2 16:01 编辑

利用ObjectDBX更新图块后再插入文件即可!代码如下:


;;选择文件插入,同时更新本图的图块 By Gu_xl 2013.04.02
(defun c:ins (/ DWGNAME      DBXDOC       ACVER
                     DBXMODELSPACE             BLOCKS
                     DOC          DBXBLOCKNAMES
                     OBJS
                     )
(setq DwgName (GETFILED "选择引入图块的DWG文件" "" "dwg" 4))
(if (and
      DwgName
      (not
          (equal
            (strcase DwgName)
            (strcase (strcat (getvar "dwgprefix") (getvar "dwgname")))
            )
          )
      )
    (progn
      (setq
      DBXDOC (vla-GetInterfaceObject
               (vlax-get-acad-object)
               (if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
                   "ObjectDBX.AxDbDocument"
                   (strcat "ObjectDBX.AxDbDocument." (itoa acVer))
                   )
               )
      )
      (vla-open DBXDOC DWGNAME)
      (setq DBXModelSpace (vla-get-ModelSpace DBXDOC))
      (setq blocks (vla-get-blocks
                     (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
                     )
            )
      (vlax-for blk (vla-get-blocks DBXDOC)
      (if (not (or (eq :vlax-true (vla-get-isXRef blk))
                     (eq :vlax-true (vla-get-isLayout blk))
                     (= "*U" (substr (vla-get-name blk) 1 2))
                     (= "*D" (substr (vla-get-name blk) 1 2))
                     (= "*T" (substr (vla-get-name blk) 1 2))
                     )
               )
          (setq dbxblocknames (cons (vla-get-name blk) dbxblocknames))
          )
      )
      (setq dbxblocknames
             (vl-remove-if-not
               '(lambda (x) (TBLSEARCH "BLOCK" x))
               dbxblocknames
               )
            )
      (if dbxblocknames
      (progn
          (foreach block dbxblocknames
            (vlax-for obj (vla-item blocks block)
            (vla-delete obj)
            )
            (setq objs nil)
            (vlax-invoke
            dbxDoc
            'CopyObjects
            (vlax-for a
                (vla-item (vla-get-blocks DBXDOC) block)
                (setq objs (cons a objs))
                )
            (vla-item blocks block)
            )
            )
          (vla-regen doc :vlax-true)
          (prompt (strcat "\n更新了" (itoa (length dbxblocknames)) "个图块!"))
          )
      (prompt "\n没有可更新的图块!")
      )
      (vlax-release-object DBXDOC)
      (command "insert" DwgName)
      (while (= 1 (logand (getvar 'cmdactive) 1))
      (command pause)
      )
      )
    )
(princ)
)

cad小新 发表于 2019-5-14 11:25:58

Gu_xl 发表于 2013-4-2 15:55
利用ObjectDBX更新图块后再插入文件即可!代码如下:



G版 大人。我使用中 用2010做图用lisp快速保存到A.dxf   然后我用2008 lisp插入A.dxf第一次插入时没有问题,当我再次用2010 更该保存A.dxf 后在插入到2008中,插入的还是第一次的a.dxf 没有更新后面更改过的 这个应该怎么写。。谢谢大人指教!

宁静港湾 发表于 2021-8-1 09:53:33

Gu_xl 发表于 2013-4-2 15:55
利用ObjectDBX更新图块后再插入文件即可!代码如下:



朋友,您好,我试了下复制源码,存成LSP格式,加载后,复制新块到旧块文档中,还是被旧块取代了,帮看下怎么没效果

众山小 发表于 2013-4-2 13:39:21

我目前用的cad2006,图块复制时,如有重名图块,“_pasteclip忽略块_XXX的重复定义“这句话也没有显示。

众山小 发表于 2013-4-2 17:28:23

谢谢G版出手!请问我将编码复制后,保存为lsp文件,编码变为乱码了。直接拷到cad里也无法使用。谢谢懂的朋友教我一下。

namezg 发表于 2013-4-2 22:04:31

定制一个复制命令,复制的过程中,获得复制对象中的所有块名的列表,将其保存在注册表中,定制一个粘贴
命令,在粘贴前从注册表中取出块名列表,如果当前文件中的块定义有与块名列表中的块名重名的,则以当前时间重命名,然后粘贴。

当然如果能从粘贴板中获得块名列表,就可以不用定制复制命令了。可是本人目前还做不到,不知有没有哪位高手会。

smartstar 发表于 2013-4-3 11:44:53

有和楼主同样的经历!支持一下。

NetBee 发表于 2013-4-3 13:32:22

这个问题还是很严重的,有时会带来较大的经济损失。
能不能直接加入反映器。在正常的复制,插入,参照过程中提示呢

关注中

众山小 发表于 2013-4-8 08:32:32

谢谢G版!我试了下程序,插入后没有反应,好像块没有插入到图中,我用的是cad2006,不知是否与版本有关!

众山小 发表于 2013-4-8 08:53:26

G版,刚才又试了一下,程序很不错!谢谢!但是有几方面能否在优化下:
1、程序能否增加个询问的步骤,“提示有几处同名块,是否替代”,有“取代,不取代”选项
2、程序能否增加另外一个询问的步骤,“是否圈出同名块区域”,有“圈出,不圈出”选项。(因为有时候图块太多,取代不一定准确,这样可以明确取代是否准确,尤其是相关专业图纸不明确时“
3、目前程序中,只取代了一个块,可程序反馈取代了5个块,不知道为什么?(替换插入时我已经pu过,且图面简单,不存在多的图块)
谢谢G版帮助,辛苦了!

众山小 发表于 2013-4-8 10:07:41

众山小 发表于 2013-4-8 08:53 static/image/common/back.gif
G版,刚才又试了一下,程序很不错!谢谢!但是有几方面能否在优化下:
1、程序能否增加个询问的步骤,“提 ...

谢谢G版,明白了!
页: [1] 2 3 4 5 6 7
查看完整版本: 求助:同名块插入取代问题