明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 542|回复: 4

[源码] 从外部dwg中复制块定义到当前图纸中

[复制链接]
发表于 2024-9-1 19:53:58 | 显示全部楼层 |阅读模式
  1. (defun $COPY-BLK-FROM-DWG$
  2.        (dwg B-NS lst / blkdbx blocks catch COPY fzjg n odbx)
  3.           ;将外部dwg里面的块定义挖到当前图纸里面来,复制外部dwg里面的块定义
  4.           ;DWG 图纸路径
  5.           ;b-ns 如果指定了块名就复制,如果没有传入任何块名就将外部dwg里面的所有块定义都挖过来
  6.           ;lst 预留参数
  7.   (DEFUN COPY (odbx blkdbx)
  8.     (vl-catch-all-apply
  9.       'vla-copyobjects
  10.       (LIST
  11.   odbx
  12.   (vl-catch-all-apply
  13.     'vlax-safearray-fill
  14.     (LIST
  15.       (vlax-make-safearray
  16.         vlax-vbObject
  17.         '(0 . 0)
  18.       )
  19.       (list blkdbx)
  20.     )
  21.   )
  22.   (vla-get-blocks
  23.     (vla-get-activedocument
  24.       (vlax-get-acad-object)
  25.     )
  26.   )
  27.       )
  28.     )
  29.   )
  30.   (if (AND B-NS (= (TYPE B-NS) 'str))
  31.     (setq B-NS (list B-NS))
  32.   )
  33.   (if (AND DWG (findfile dwg))
  34.     (progn
  35.       (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
  36.   (setq odbx (vlax-create-object "ObjectDBX.AxDbDocument"))
  37.   (setq odbx (vlax-create-object
  38.          (strcat "ObjectDBX.AxDbDocument."
  39.            (substr (getvar "ACADVER") 1 2)
  40.          )
  41.        )
  42.   )
  43.       )
  44.       (vl-catch-all-apply 'vla-open (LIST odbx dwg))
  45.       (COND
  46.   ((AND B-NS)
  47.    (setq
  48.      fzjg  (MAPCAR
  49.       (FUNCTION
  50.         (LAMBDA (B-N / catch blkdbx)
  51.           (if (setq
  52.           catch
  53.            (vl-catch-all-error-p
  54.              (vl-catch-all-apply
  55.          (function
  56.            (lambda ()
  57.              (set 'blkdbx
  58.             (vla-item (vla-get-blocks odbx)
  59.                 B-N
  60.             )
  61.              )
  62.            )
  63.          )
  64.              )
  65.            )
  66.         )
  67.       ()
  68.       (COPY odbx blkdbx)
  69.           )
  70.           (if
  71.       (and B-N
  72.            (null catch)
  73.            (vla-item
  74.              (vla-get-blocks
  75.          (vla-get-activedocument
  76.            (vlax-get-acad-object)
  77.          )
  78.              )
  79.              B-N
  80.            )
  81.       )
  82.        (list (CONS "块名" b-n) (cons "复制" "成功"))
  83.        (list (CONS "块名" b-n) (cons "复制" "失败"))
  84.           )
  85.         )
  86.       )
  87.       B-NS
  88.     )
  89.    )
  90.   )
  91.   (T
  92.    (SETQ BLOCKS (vla-get-blocks odbx))
  93.    (VLAX-FOR ITEM  BLOCKS
  94.      (SETQ N (vla-get-objectname item))
  95.      (setq n (vl-catch-all-apply
  96.          'vla-get-effectivename
  97.          (list item)
  98.        )
  99.      )
  100.      (if (vl-catch-all-error-p n)
  101.        (setq n (vl-catch-all-apply 'vla-get-name (list item)))
  102.      )
  103.      (if
  104.        (and
  105.          n
  106.          (wcmatch  n
  107.       "[,`*Model_Space,`*Paper_Space,`*Paper_Space0,]"
  108.          )
  109.        )
  110.         ()
  111.         (progn
  112.     (COPY odbx
  113.           (vl-catch-all-apply
  114.       'vla-item
  115.       (LIST (vla-get-blocks odbx) N)
  116.           )
  117.     )
  118.     (if (and n
  119.        (setq catch (vl-catch-all-apply
  120.                'vla-item
  121.                (list
  122.            (vla-get-blocks
  123.              (vla-get-activedocument
  124.                (vlax-get-acad-object)
  125.              )
  126.            )
  127.            n
  128.                )
  129.              )
  130.        )
  131.        (NOT (vl-catch-all-error-p catch))
  132.         )
  133.       (set
  134.         'fzjg
  135.         (cons (list (CONS "块名" n) (cons "复制" "成功"))
  136.         fzjg
  137.         )
  138.       )
  139.       (set
  140.         'fzjg
  141.         (cons (list (CONS "块名" n) (cons "复制" "失败"))
  142.         fzjg
  143.         )
  144.       )
  145.     )
  146.         )
  147.      )
  148.    )
  149.   )
  150.       )
  151.       (vl-catch-all-apply 'vlax-release-object (LIST odbx))
  152.     )
  153.   )
  154.   fzjg
  155. )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-9-1 20:59:37 | 显示全部楼层
应该是好代码。就是不知道调用格式是什么?
($COPY-BLK-FROM-DWG$ "c:\\log\\demo.dwg" "$titleblk$00000194" 12)不成功
 楼主| 发表于 2024-9-1 21:12:50 | 显示全部楼层
wharan 发表于 2024-9-1 20:59
应该是好代码。就是不知道调用格式是什么?
($COPY-BLK-FROM-DWG$ "c:\\log\\demo.dwg" "$titleblk$000001 ...

在原图纸中使用 vla-get-effectivename 查询一下
发表于 2024-9-2 09:32:50 | 显示全部楼层
http://bbs.mjtd.com/forum.php?mo ... mp;extra=#pid993285

你好 可以帮忙看看这个问题吗
发表于 2024-9-3 14:06:35 | 显示全部楼层
杜总威武,收藏走起,一直找不到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 08:50 , Processed in 0.191666 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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