注册 登录
明经CAD社区 返回首页

Gu_xl的个人空间 http://www.mjtd.com/?161460 [收藏] [复制] [分享] [RSS]

日志

插入文件并更新已有图块定义

热度 4已有 2589 次阅读2013-4-2 15:58 |个人分类:回答问题|系统分类:开发

问题来源:
解决方案代码:
;;选择文件插入,同时更新本图的图块 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)
  )

路过

雷人
3

握手

鲜花

鸡蛋

刚表态过的朋友 (3 人)

发表评论 评论 (2 个评论)

回复 自贡黄明儒 2013-4-3 13:04
关键的地方加点注释就更完美了!
回复 ygp820601 2013-4-19 14:20
插入文件时,只是更新了块,插入的文件中其他内容丢失了。
只能用一次,第二次就不能用了。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-5 04:28 , Processed in 0.093489 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部