明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 222|回复: 6

批量导出图纸中的块(批量wblock)

[复制链接]
发表于 前天 20:50 | 显示全部楼层 |阅读模式
原文件来自网络上,相信很多人都见过、用过。原代码如下:
  1. ; ----------------------------------------------------------------------
  2. ;          (Wblocks all local block definitions to target path)
  3. ;            Copyright (C) 2000 DotSoft, All Rights Reserved
  4. ;                   Website: http://www.dotsoft.com
  5. ; ----------------------------------------------------------------------
  6. ; DISCLAIMER:  DotSoft Disclaims any and all liability for any damages
  7. ; arising out of the use or operation, or inability to use the software.
  8. ; FURTHERMORE, User agrees to hold DotSoft harmless from such claims.
  9. ; DotSoft makes no warranty, either expressed or implied, as to the
  10. ; fitness of this product for a particular purpose.  All materials are
  11. ; to be considered 慳s-is? and use of this software should be
  12. ; considered as AT YOUR OWN RISK.
  13. ; ----------------------------------------------------------------------

  14. (defun c:wblockm ()
  15.   (setq cmdecho (getvar "CMDECHO"))
  16.   (setvar "CMDECHO" 0)
  17.   ;
  18.   (if (not dos_getdir)
  19.     (setq path (getstring "\nDS> Target Folder: " T))
  20.     (setq path (dos_getdir "Target Folder" (getvar "DWGPREFIX")))
  21.   )
  22.   (if (/= path nil)
  23.     (progn
  24.       (if (= (substr path (strlen path) 1) "\")
  25.         (setq path (substr path 1 (1- (strlen path))))
  26.       )
  27.       (princ "\nDS> Building List of Blocks ... ")
  28.       (setq lst nil)
  29.       (setq itm (tblnext "BLOCK" T))
  30.       (while (/= itm nil)
  31.         (setq nam (cdr (assoc 2 itm)))
  32.         (setq pass T)
  33.         (if (/= (cdr (assoc 1 itm)) nil)
  34.           (setq pass nil)
  35.           (progn
  36.             (setq ctr 1)
  37.             (repeat (strlen nam)
  38.               (setq chk (substr nam ctr 1))
  39.               (if (or (= chk "*")(= chk "|"))
  40.                 (setq pass nil)
  41.               )
  42.               (setq ctr (1+ ctr))
  43.             )
  44.           )
  45.         )
  46.         (if (= pass T)
  47.           (setq lst (cons nam lst))
  48.         )
  49.         (setq itm (tblnext "BLOCK"))
  50.       )
  51.       (setq lst (acad_strlsort lst))
  52.       (princ "Done.")
  53.       ;
  54.       (foreach blk lst
  55.         (setq fn (strcat path (chr 92) blk))
  56.         (if (findfile (strcat fn ".dwg"))
  57.           (command "_.WBLOCK" fn "_Y" blk)
  58.           (command "_.WBLOCK" fn blk)
  59.         )
  60.       )
  61.     )
  62.   )
  63.   ;
  64.   (setvar "CMDECHO" cmdecho)
  65.   (princ)
  66. )

不过原文件有缺点,就是没有加载doslib就无法选定目录,而要手输,麻烦得很。
还有就是原版是英文版。
小可抽空汉化,修改优化了一下,分享给大家。
1、目录设定在文件同目录下,【文件名_导出图块】文件夹;
2、增加数量提示;3、滤除标注箭头块。

老规矩,愿意打赏的可以直接下载LSP文件。


  1. ; ----------------------------------------------------------------------
  2. ;          (Wblocks all local block definitions to target path)
  3. ;            Copyright (C) 2000 DotSoft, All Rights Reserved
  4. ;                   Website: http://www.dotsoft.com
  5. ; ----------------------------------------------------------------------
  6. ; DISCLAIMER: DotSoft Disclaims any and all liability for any damages
  7. ; arising out of the use or operation, or inability to use the software.
  8. ; FURTHERMORE, User agrees to hold DotSoft harmless from such claims.
  9. ; DotSoft makes no warranty, either expressed or implied, as to the
  10. ; fitness of this product for a particular purpose. All materials are
  11. ; to be considered 'as-is', and use of this software should be
  12. ; considered as AT YOUR OWN RISK.
  13. ; ----------------------------------------------------------------------
  14. ;;;2024-12-17
  15. ;;;Modified by 煮茗

  16. (defun c:wblockm ()
  17.   (setq cmdecho (getvar "CMDECHO"))
  18.   (setvar "CMDECHO" 0)
  19. (setq lst nil)
  20.       (setq itm (tblnext "BLOCK" T))
  21.       (while (/= itm nil)
  22.         (setq nam (cdr (assoc 2 itm)))
  23.         (setq pass T)
  24.         (if (/= (cdr (assoc 1 itm)) nil)
  25.           (setq pass nil)
  26.           (progn
  27.             (setq ctr 1)
  28.             (repeat (strlen nam)
  29.               (setq chk (substr nam ctr 1))
  30.               (if (or (= chk "*")(= chk "|"))
  31.                 (setq pass nil)
  32.               )
  33.               (setq ctr (1+ ctr))
  34.             )
  35.           )
  36.         )
  37.         (if (= pass T)
  38.           (setq lst (cons nam lst))
  39.         )
  40.         (setq itm (tblnext "BLOCK"))
  41.       )
  42.       (setq lst (acad_strlsort lst));排序
  43.       (setq bnum (length lst))
  44.           (princ (strcat "\n本图共有" (vl-princ-to-string bnum) "个块图元。"))
  45.           (setq BVL (getstring "\n是否导出这些图块(y/n)?【注意:标注箭头的图块将不导出。】<N>"))
  46.           (if (or (= BVL "Y")(= BVL "y"))
  47.       (progn
  48.           (setq path0 (GetVar "DwgPrefix"))
  49.       (setq Dir0 (vl-string-subst "_导出图块" ".dwg" (GetVar "DwgName")))
  50.       (setq path (strcat path0 Dir0))
  51.         (if (not (VL-FILE-DIRECTORY-P path))
  52.           (vl-mkdir path)
  53.         )
  54.       (if (= (substr path (strlen path) 1) "\")
  55.         (setq path (substr path 1 (1- (strlen path))))
  56.       )
  57.           (princ "\n请稍等,正在导出图块... \n")
  58.           (setq i 0)
  59.           (foreach blk lst
  60.           (if (and (/= blk "_ArchTick")(/= blk "_BoxBlank")(/= blk "_BoxFilled")(/= blk "_Closed")(/= blk "_ClosedBlank")(/= blk "_DatumBlank")(/= blk "_DatumFilled")(/= blk "_Dot")(/= blk "_DotBlank")(/= blk "_DotSmall")(/= blk "_Integral")(/= blk "_Oblique")(/= blk "_Open")(/= blk "_Open30")(/= blk "_Open90")(/= blk "_Origin")(/= blk "_Origin2")(/= blk "_Small"))
  61.           (progn
  62.         (setq fn (strcat path (chr 92) blk))
  63.         (if (findfile (strcat fn ".dwg"))
  64.           (command "_.WBLOCK" fn "_Y" blk)
  65.           (command "_.WBLOCK" fn blk)
  66.         )
  67.           (setq i (+ i 1))
  68.           )
  69.           )
  70.           )         
  71.       (princ (strcat "\n操作完成。已导出" (vl-princ-to-string i) "个块图元。"))
  72.           (startapp "explorer" path)
  73.           )
  74.           )
  75.   (setvar "CMDECHO" cmdecho)
  76.   (princ)
  77. )


本帖子中包含更多资源

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

x

评分

参与人数 4明经币 +4 金钱 +10 收起 理由
zhoupeng220 + 1 很给力!
bssurvey + 1 赞一个!
moranyuyan + 1
tigcat + 1 + 10 很给力!

查看全部评分

回复

使用道具 举报

发表于 昨天 08:31 | 显示全部楼层
感谢大神分享
回复 支持 反对

使用道具 举报

发表于 昨天 08:34 | 显示全部楼层
感谢大神分享
回复 支持 反对

使用道具 举报

发表于 昨天 22:06 | 显示全部楼层
感谢大神分享
回复 支持 反对

使用道具 举报

发表于 昨天 22:18 | 显示全部楼层
感谢大佬从1970年穿越过来分享源码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-19 05:07 , Processed in 0.154509 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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