求助:同名块插入取代问题
不知道i大家有没有遇到这样的问题,给其他专业提供建筑最新图纸时,其他专业却反馈图纸并没有修改。最后的原因却是“同名图块”在作怪!原来其他专业图纸中存在与建筑新提图纸中的“同名图块”,这样新图块插入时被就原图块取代了,插入后自然看不出图纸变化。
这样最后结果是,建筑图纸和设备图纸不同,有时就匆忙出图了。
被这个问题纠结了好长一段时间。今天到网上一搜,不少网友和我存在同样的苦恼,但却并没有找到合适的解决方法。
以下是我转帖其他论坛网友的帖子,寻求解决方法!
两张不同时期做的图有同名的块把块从一张图拷贝到另一张时出现
“_pasteclip忽略块_XXX的重复定义。”然后就只能出现本图里自己的块
愿望:
难道就不能出来个提示:“要覆盖当前图形中同名块吗Y/N”
因为考的目的就是要替掉老版本的块(只要基点一致即可)。
如果选择不替代的话(选N)
顺便提示“新块NEW”然后直接给块再起个名字
==================================
据说可以用设计中心。可我试用了,不能用
据说可以用expert,可我所有的参数全试过了,还是不行
据说可以用-scalelistedit命令,可是我是CAD2004版,根本就不能认识这个命令
当然,先在删除原有的图块,清理后再插入要插入的图块,可以解决这个问题,可是太烦了
本帖最后由 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)
)
Gu_xl 发表于 2013-4-2 15:55
利用ObjectDBX更新图块后再插入文件即可!代码如下:
G版 大人。我使用中 用2010做图用lisp快速保存到A.dxf 然后我用2008 lisp插入A.dxf第一次插入时没有问题,当我再次用2010 更该保存A.dxf 后在插入到2008中,插入的还是第一次的a.dxf 没有更新后面更改过的 这个应该怎么写。。谢谢大人指教! Gu_xl 发表于 2013-4-2 15:55
利用ObjectDBX更新图块后再插入文件即可!代码如下:
朋友,您好,我试了下复制源码,存成LSP格式,加载后,复制新块到旧块文档中,还是被旧块取代了,帮看下怎么没效果 我目前用的cad2006,图块复制时,如有重名图块,“_pasteclip忽略块_XXX的重复定义“这句话也没有显示。 谢谢G版出手!请问我将编码复制后,保存为lsp文件,编码变为乱码了。直接拷到cad里也无法使用。谢谢懂的朋友教我一下。 定制一个复制命令,复制的过程中,获得复制对象中的所有块名的列表,将其保存在注册表中,定制一个粘贴
命令,在粘贴前从注册表中取出块名列表,如果当前文件中的块定义有与块名列表中的块名重名的,则以当前时间重命名,然后粘贴。
当然如果能从粘贴板中获得块名列表,就可以不用定制复制命令了。可是本人目前还做不到,不知有没有哪位高手会。 有和楼主同样的经历!支持一下。 这个问题还是很严重的,有时会带来较大的经济损失。
能不能直接加入反映器。在正常的复制,插入,参照过程中提示呢
关注中 谢谢G版!我试了下程序,插入后没有反应,好像块没有插入到图中,我用的是cad2006,不知是否与版本有关! G版,刚才又试了一下,程序很不错!谢谢!但是有几方面能否在优化下:
1、程序能否增加个询问的步骤,“提示有几处同名块,是否替代”,有“取代,不取代”选项
2、程序能否增加另外一个询问的步骤,“是否圈出同名块区域”,有“圈出,不圈出”选项。(因为有时候图块太多,取代不一定准确,这样可以明确取代是否准确,尤其是相关专业图纸不明确时“
3、目前程序中,只取代了一个块,可程序反馈取代了5个块,不知道为什么?(替换插入时我已经pu过,且图面简单,不存在多的图块)
谢谢G版帮助,辛苦了! 众山小 发表于 2013-4-8 08:53 static/image/common/back.gif
G版,刚才又试了一下,程序很不错!谢谢!但是有几方面能否在优化下:
1、程序能否增加个询问的步骤,“提 ...
谢谢G版,明白了!