找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5573|回复: 12

[研讨] 同名块插入后被取代的问题

[复制链接]
发表于 2013-4-23 12:49:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

评分

参与人数 1D豆 +5 收起 理由
XDSoft + 5 出题引导交流奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2013-4-23 12:54:18 | 显示全部楼层
这是明经G版的源码,很不错!但是还是没有完全达到我所希望的目的,因为只看得懂简单程序,所以希望大家帮忙!谢谢!

[pcode=lisp,true];;选择文件插入,同时更新本图的图块 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)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-23 12:55:46 | 显示全部楼层
这个程序有几方面能否在优化下:
1、程序能否增加个询问的步骤,“提示有几处同名块,是否替代”,有“取代,不取代”选项
2、程序能否增加另外一个询问的步骤,“是否圈出同名块区域”,有“圈出,不圈出”选项。(因为有时候图块太多,取代不一定准确,这样可以明确取代是否准确,尤其是相关专业图纸不明确时“
3、目前程序中,只取代了一个块,可程序反馈取代了5个块,不知道为什么?(替换插入时我已经pu过,且图面简单,不存在多的图块)

点评

针对第3条,请提供样图供测试!  发表于 2013-4-23 15:34
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-4-23 13:30:04 | 显示全部楼层

1、如果图中很多的重名块,难道你还要一个一个的确认?
2、还不如另外写个工具,选择两个区域,查找一个区域中和另外区域同名的块,这样更通用。
3、程序没看,有空看看程序在回复。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-4-23 13:31:14 | 显示全部楼层
其实,最关键的还是各专业有统一的图块命名规则,不要去影响到别人。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-23 14:18:20 | 显示全部楼层
赞同!但是有时自己采用“在位编辑”修改了图块,然后传给设备专业,设备专业重新插入后,旧图块取代了新图块。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-4-23 14:24:54 | 显示全部楼层
本帖最后由 newer 于 2013-4-23 14:27 编辑
众山小 发表于 2013-4-23 14:18
赞同!但是有时自己采用“在位编辑”修改了图块,然后传给设备专业,设备专业重新插入后,旧图块取代了新图 ...


这种情况,自己更新下图块就可以了。这句话不能说旧图块取代了新的,人家本来好好的在那里,是新的进来打搅人家了,而是应该说新的没有取代旧的。

既然你也有同样的问题,不妨说说你的要求,看看能不能有高手帮忙实现了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-4-23 14:35:39 | 显示全部楼层
{:soso_e141:}没遇到过,在一个图档里面好像不准同名块的生成
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 343个

财富等级: 日进斗金

发表于 2013-4-23 19:19:14 | 显示全部楼层
我也经常遇到这样的情况

点评

你的头像,钢架跳出墙体多少啊?目测有500多,结构计算过没  发表于 2013-4-23 19:59
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 345个

财富等级: 日进斗金

发表于 2013-4-24 11:54:43 | 显示全部楼层
遇到动态块会出问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 815个

财富等级: 财运亨通

发表于 2013-4-24 13:18:56 | 显示全部楼层
用设计中心可以解决,但要一个一个图块去点击。
我也希望可以有批量替换的方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 345个

财富等级: 日进斗金

发表于 2013-4-24 14:34:26 | 显示全部楼层
批量替换的话,ET里面就有现成的功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 345个

财富等级: 日进斗金

发表于 2013-4-24 14:36:14 | 显示全部楼层

选择个别图块进行替换的话,可以用下面的.

本帖最后由 userzhl 于 2013-4-24 14:37 编辑

选择个别图块进行替换的话,可以用下面的:
(setq ss (ssget (list (cons 0 "INSERT"))))
  (if ss
    (progn
      (setq i 0)
      (repeat (sslength ss)
(setq ents (entget (ssname ss i)))
(setq ents (subst (cons 2 BlkName) (assoc 2 ents) ents))
(entmod ents)
(setq i (1+ i))
      )
    )
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-21 21:01 , Processed in 0.506935 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表