找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 8709|回复: 77

[每日一码] 使用a/vlisp的图块重命名

  [复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-10-1 07:25:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
tblobjname "block" 获取到的是类是 AcDbBlockBegin ,这个是不能用重命名的,对块定义重新 entmod ,需要获取到 AcDbSymbolTableRecord,下面的代码就是获取块定义,然后使用 entmod 重命名, 理论上应该支持匿名块互转(未测试)
游客,如果您要查看本帖隐藏内容请回复
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-10-1 07:38:27 | 显示全部楼层
只用过RENAME..学习了..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-10-1 07:44:14 | 显示全部楼层
匿名块互转..ok...已测试...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-10-1 07:54:22 | 显示全部楼层
本帖最后由 q3_2006 于 2016-10-1 08:02 编辑

太神奇了大师...我这个图...两个块同名了
QQ截图20161001080239.png

Drawing1.rar

6.24 KB, 下载次数: 3, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-10-1 07:58:38 来自手机 | 显示全部楼层
aduit核查会自动处理的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-10-1 08:25:07 | 显示全部楼层
这两个也同名 ...
aa.png

Drawing2.rar

5.92 KB, 下载次数: 3, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2016-10-1 09:06:30 | 显示全部楼层
这两个也同名 ...?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5588个

财富等级: 富甲天下

发表于 2016-10-1 09:24:51 | 显示全部楼层
回复,向大侠学习程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-1 10:03:59 | 显示全部楼层

匿名块新名字用 *U 试试。

不知道能不能改动态块的名字。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8733个

财富等级: 富甲天下

发表于 2016-10-1 10:32:55 | 显示全部楼层
回复,学习程序!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-1 10:59:26 | 显示全部楼层
本帖最后由 newer 于 2016-10-1 11:00 编辑

其实,没必要通过VLAX-FOR得到块的对象的,其实通过tblobjname的ENTGET数据的组码 330 ,就能直接得到块定义对象的实体名

命令: (setq o (tblobjname "block" "dd"))
<图元名: -250ae8>

命令: (entget o)
((-1 . <图元名: -250ae8>) (0 . "BLOCK") (330 . <图元名: -250af0>) (5 . "1DB") (100 .
"AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockBegin") (70 . 0) (10 0.0 0.0
0.0) (-2 . <图元名: -250ad8>) (2 . "dd") (1 . ""))

命令: (cdr (assoc 330 (entget o)))
<图元名: -250af0>




下面是测试代码

  1. (defun blk:rename (oldname newname)
  2.   (setq o (tblobjname "block" oldname))
  3.   (setq  ed   (entget o)
  4.   eblk (cdr (assoc 330 ed))
  5.   ed   (entget eblk)
  6.   ed   (subst (cons 2 newname) (cons 2 oldname) ed)
  7.   )
  8.   (entmod ed)
  9. )

  1. (defun c:tt ()
  2.   (if (and (setq e (ssget ":E:S" '((0 . "INSERT"))))
  3.      (setq e  (ssname e 0)
  4.      ed (entget e)
  5.      )
  6.      (progn
  7.        (prompt (strcat "\n选择的块名是:" (setq oldname(cdr (assoc 2 ed)))))
  8.        (/= "" (setq newname (getstring "\n输入新块名:")))
  9.        (not (tblsearch "block" newname))
  10.      )
  11.       )
  12.     (progn
  13.        (blk:rename oldname newname)
  14.     )
  15.     (prompt "\n改名没成功,输入块名已经存在或者无效的输入。")
  16.   )
  17.   (princ)
  18. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-10-1 11:57:05 | 显示全部楼层

(vla-get-effectivename(vlax-ename->vla-object e))知道真实名称就能改...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-10-1 15:13:34 来自手机 | 显示全部楼层
newer 发表于 2016-10-1 10:59

一直没有注意这个330,只要有了AcDbBlockTableRecord能entget的组码就应该都可以entmod
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-1 18:29:33 | 显示全部楼层

组码330,应该是本实体的owner

命令: (setq a (tblobjname "block" "a"))
<图元名: -250bf0>

命令: (entget a)
((-1 . <图元名: -250bf0>) (0 . "BLOCK") (330 . <图元名: -250bf8>) (5 . "1BA") (100 .
"AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockBegin") (70 . 0) (10 0.0 0.0
0.0) (-2 . <图元名: -250be0>) (2 . "a") (1 . ""))

命令: (setq b (xdrx_object_owner a))
<图元名: -250bf8>



命令: (setq id (xdrx_getpropertyvalue b "objectid"))
-2427896

命令: (vla-get-ownerid (vlax-ename->vla-object a))
-2427896



只是不知道VLAX知道了这个ID后,有哪个VLA函数能得到对应的VLA对象? 查函数库没找到。



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-10-1 19:25:09 来自手机 | 显示全部楼层
vla 有get objectid方法,也有id->hamdle
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-10 20:05 , Processed in 0.323637 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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