明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 643|回复: 7

[提问] 有用本图的图块替换其他文件中同名块的插件吗?

[复制链接]
发表于 2023-8-4 10:44:45 | 显示全部楼层 |阅读模式
1明经币
如题,我的想法是先把本图的某些带关键字的图块写到临时文件夹,再插入到其他文件。更新块定义。但是不知如何操作

 楼主| 发表于 2023-8-4 11:18:28 | 显示全部楼层
让newbing帮忙写了一段代码,将本图中的以'GPS'开头的块分别写到新文件中,新文件的文件名同块名,路径同本图一致。 代码运行时提示文件名无效,有大侠帮忙看下问题在哪儿吗?
代码如下:
  1. (defun c:test1 (/ ss blkname blkpath)
  2.   (setq ss (ssget "_X" '((0 . "INSERT")(2 . "GPS*"))))
  3.   (repeat (setq i (sslength ss))
  4.     (setq blkname (cdr (assoc 2 (entget (ssname ss (setq i (1- i)))))))
  5.     (setq blkpath (strcat (getvar 'dwgprefix) blkname ".dwg"))
  6.     (command "_.-wblock" ss blkpath "" "0")
  7.   )
  8. )
回复

使用道具 举报

发表于 2023-8-6 17:48:39 | 显示全部楼层
设计中心这个功能好使。你这个代码的需求我写不上。设计中心 ctrl+2
回复

使用道具 举报

 楼主| 发表于 2023-8-7 10:12:10 | 显示全部楼层
嘒彼小星 发表于 2023-8-6 17:48
设计中心这个功能好使。你这个代码的需求我写不上。设计中心 ctrl+2

需要替换的图块比较多
回复

使用道具 举报

 楼主| 发表于 2023-8-11 15:59:43 | 显示全部楼层
本帖最后由 轻尘 于 2023-8-15 11:31 编辑

用chatgpt写了两段代码,基本能实现在不同文件中批量替换同名块了。
1. 把本文件中的块名带“gps”的块保存到temp文件夹
  1. (vl-load-com)

  2. ;; 定义一个函数,用于将指定名称的块保存到新文件
  3. (defun wblock-gps-block (blkName / blkpath)
  4.   ;; 执行 WBLOCK 命令
  5.   (setq blkpath (strcat (getvar 'dwgprefix) "TEMP\" blkName ".dwg"))
  6.   (command "_wblock" blkpath "Y" blkName)
  7.   ;; 输出提示信息
  8.   (princ (strcat "已将块保存到文件:" blkpath "\n"))
  9. )

  10. ;; 定义一个函数,用于获取所有包含'gps'的块的名称
  11. (defun get-gps-block-names (/ selSet ent obj blkName dynamicBlkName i blockNames)
  12.   ;; 获取所有插入的块
  13.   (setq selSet (ssget "_X" '((0 . "INSERT")(2 . "`*U*,*gps-*"))))
  14.   ;; 初始化块名称列表
  15.   (setq blockNames '())
  16.   ;; 遍历所有插入的块
  17.   (if selSet
  18.     (progn
  19.       (setq i 0)
  20.       (repeat (sslength selSet)
  21.         ;; 获取当前块的实体和对象
  22.         (setq ent (ssname selSet i))
  23.         (setq obj (vlax-ename->vla-object ent))
  24.         ;; 判断当前块是否为动态块
  25.         (if (= (vla-get-IsDynamicBlock obj) :vlax-true)
  26.           ;; 获取当前动态块的有效名称
  27.           (setq blkName (vla-get-EffectiveName obj))
  28.           ;; 获取当前静态块的定义名称
  29.           (setq blkName (cdr (assoc 2 (entget ent))))
  30.         )
  31.         ;; 将当前块名称添加到列表中(如果不存在)
  32.         (if (not (member blkName blockNames))
  33.           (setq blockNames (cons blkName blockNames))
  34.         )
  35.         ;; 更新循环计数器
  36.         (setq i (1+ i))
  37.       )
  38.     )
  39.   )
  40.   ;; 返回块名称列表
  41.   blockNames
  42. )

  43. ;; 定义一个函数,用于将所有包含'gps'的块保存到新文件
  44. (defun c:wblock-gps-blocks (/ blockNames)
  45.   ;; 输出一个空行
  46.   (princ "\n")
  47.   ;; 获取所有包含'gps'的块的名称
  48.   (setq blockNames (get-gps-block-names))
  49.   ;; 判断是否存在包含'gps'的块
  50.   (if blockNames
  51.     ;; 遍历所有包含'gps'的块的名称
  52.     (foreach blkName blockNames
  53.       ;; 将当前块保存到新文件
  54.       (wblock-gps-block blkName)
  55.     )
  56.     ;; 输出提示信息
  57.     (princ "未找到包含'gps'的块。\n")
  58.   )
  59.   ;; 输出一个空行
  60.   (princ "\n")
  61. )

  62. ;; 调用函数,将所有包含'gps'的块保存到新文件
  63. (c:wblock-gps-blocks)

2. 将temp中的同名文件插入本图以替换块定义
  1. (defun c:replace-wblock (/ ss blkname blkpath1 blkpath2)
  2. 注意:需要操作的多个文件需要在同一文件夹.
  3.   (setq current-folder (strcat (getvar 'dwgprefix) "TEMP\")) ; 获取当前文件所在文件夹路径
  4.   (setq files (vl-directory-files current-folder "*.dwg" 1)) ; 获取temp子文件夹中的所有dwg文件名,并返回一个列表
  5.   (if files
  6.     (foreach file files ; 遍历每个文件名
  7.       (setq blkname (substr file 1 (- (strlen file) 4))) ; 假设块名在文件名中,去除扩展名
  8.       (setq blkpath1 (strcat (getvar 'dwgprefix) "TEMP\" blkname ".dwg"))
  9.       (setq blkpath2 (strcat blkname "=" blkpath1)) ; 拼接插入选项
  10.       (command "-insert" blkpath2 "Y" nil)
  11.     )
  12.   )
  13. )
  14. (c:replace-wblock)
回复

使用道具 举报

 楼主| 发表于 2023-8-11 16:01:56 | 显示全部楼层
大神们还有优化的空间吗?
回复

使用道具 举报

发表于 2023-8-11 16:46:38 | 显示全部楼层
想复杂了,直接把其他图插进来再WBLOCK出去覆盖就行了,同名图块会用本图的定义。
回复

使用道具 举报

 楼主| 发表于 2023-8-14 09:31:38 | 显示全部楼层
kozmosovia 发表于 2023-8-11 16:46
想复杂了,直接把其他图插进来再WBLOCK出去覆盖就行了,同名图块会用本图的定义。

好方法
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 02:44 , Processed in 0.260483 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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