明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2992|回复: 11

[已解答] 谁写过块参照重命名成另一个块的程序

  [复制链接]
发表于 2015-3-7 22:48 | 显示全部楼层 |阅读模式
比如块A,在图中已经有两个块参照X、Y,我现在想通过一个命令,新建一个内含图元跟块A一样的新块B,Y变成B的参照。保持图块A和参照X不变。不知道说清楚了没有。
目前我都是变通的方法,把参照Y拷贝到一张新图中,在新图中把图块A重命名为B,再拷贝回原图纸中,这样比较繁琐。
发表于 2023-9-19 14:16 | 显示全部楼层
Gu_xl大师好!我加载了您的插件后出现:
命令: tt
閫夋嫨鍥惧潡:
鏂板揩鍚嶇О:
文字为乱码,请问是什么原因?谢谢
发表于 2015-3-8 10:56 | 显示全部楼层
  1. (defun c:tt()
  2.   (if (and
  3.         (setq e (car(entsel "\n选择图块:")))
  4.         (setq el (entget e))
  5.         (= "INSERT" (cdr (assoc 0 el)))
  6.         (setq newname (getstring "\n输入块名:"))
  7.         (/= "" newname)
  8.         )
  9.     (progn
  10.       (setq cp (cdr (assoc 10 el))
  11.             xscl (cdr (assoc 41 el))
  12.             yscl (cdr (assoc 42 el))
  13.             zscl (cdr (assoc 43 el))
  14.             rot (cdr (assoc 50 el))
  15.             )
  16.       (setq el (subst (cons 41 1.0) (assoc 41 el) el)
  17.             el (subst (cons 42 1.0) (assoc 42 el)el)
  18.             el (subst (cons 43 1.0) (assoc 43 el)el)
  19.             el (subst (cons 50 0) (assoc 50 el)el)
  20.             )
  21.       (entmod el)
  22.       
  23.       (command "explode" e)
  24.       (setq ss (ssget "p"))
  25.       (command "block" newname "non"(trans cp 0 1) ss "")
  26.       (command "insert" newname "non"(trans cp 0 1) xscl yscl (angtos rot))
  27.       )
  28.     )
  29.   (princ)
  30.   
  31.   )
发表于 2015-3-8 12:34 | 显示全部楼层
感谢 G版 分享程序,学习了!
发表于 2015-3-8 17:29 | 显示全部楼层
G版有没有不用command的方法!
 楼主| 发表于 2015-3-8 19:06 | 显示全部楼层
谢谢G版,总算解决了
发表于 2015-3-8 19:53 | 显示全部楼层
本帖最后由 Gu_xl 于 2015-3-11 16:58 编辑
Q1241274614 发表于 2015-3-8 17:29
G版有没有不用command的方法!

VLA方法:
  1. (defun c:tt (/ E EL OBJ NAME BLOCKS DOC BLKDEFSRC OBJS BLKDEF orign)  (if (and (setq e (car (entsel "\n选择图块:")))
  2.            (setq el (entget e))
  3.            (= "INSERT" (cdr (assoc 0 el)))
  4.            (setq obj (vlax-ename->vla-object e))
  5.            (setq name (getstring "\n新快名称:"))
  6.            (/= "" name)
  7.       )
  8.     (progn (setq blocks           (vla-get-blocks
  9.                              (setq
  10.                                doc (vla-get-ActiveDocument (vlax-get-acad-object))
  11.                              )
  12.                            )
  13.                  blkdefSrc (vla-item blocks (cdr (assoc 2 el)))
  14.                  orign (vla-get-Origin blkdefSrc)
  15.            )
  16.            (vlax-for o blkdefSrc (setq objs (cons o objs)))
  17.            (if (VL-CATCH-ALL-ERROR-P
  18.                  (setq
  19.                    blkdef (VL-CATCH-ALL-APPLY 'vla-item (list blocks name))
  20.                  )
  21.                )
  22.              (setq blkdef (vla-add blocks orign name))
  23.              (vlax-for o blkdef (vla-delete o))
  24.            )
  25.            (vla-CopyObjects
  26.              doc
  27.              (vlax-safearray-fill
  28.                (vlax-make-safearray
  29.                  vlax-vbObject
  30.                  (cons 0 (1- (length objs)))
  31.                )
  32.                objs
  33.              )
  34.              blkdef
  35.            )
  36.            (vla-InsertBlock
  37.              (vla-get-ModelSpace doc)
  38.              (vla-get-InsertionPoint obj)
  39.              name
  40.              (vla-get-XScaleFactor obj)
  41.              (vla-get-YScaleFactor obj)
  42.              (vla-get-ZScaleFactor obj)
  43.              (vla-get-Rotation obj)
  44.            )
  45.            (vla-delete obj)
  46.     )
  47.   )
  48.   (princ)
  49. )
发表于 2015-3-8 22:36 | 显示全部楼层
Gu_xl 发表于 2015-3-8 19:53
VLA方法:


谢谢,我也经常需要这样做,现在有这个程序方便多了
发表于 2015-3-11 11:26 | 显示全部楼层
Gu_xl 发表于 2015-3-8 19:53
VLA方法:

这样做块可能会跑动,能不能先把块A整体做成块S,再炸开块S里面的块A
发表于 2015-3-11 14:45 | 显示全部楼层
菜卷鱼 发表于 2015-3-11 11:26
这样做块可能会跑动,能不能先把块A整体做成块S,再炸开块S里面的块A

你确信块可能会跑?
先把代码研究明白后再来下结论吧!
发表于 2015-3-11 15:41 | 显示全部楼层
Gu_xl 发表于 2015-3-8 19:53
VLA方法:

见附件,不能直接上传DWG,改后缀

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-29 00:42 , Processed in 0.333841 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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