找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 545|回复: 1

[研讨] ATTDef和ATTRib的区别。

[复制链接]

已领礼包: 12个

财富等级: 恭喜发财

发表于 2018-10-19 03:41:39 | 显示全部楼层 |阅读模式

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

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

×
初学者今天准备写个小程序,批量改块属性。
思路很简单,选择一个块,遍历块定义,获取块属性,之后分类显示在dcl窗口上,修改后用entmod更新。
但是第一步就出问题了。
块本身是个图签,有3个属性定义,遍历块之前做过类似的东西,很轻松就实现了,获取到了3个ATTDef对象,只是发现其显示的只是默认值,而不是块本身显示的值。
本身因为初学,所以不想用坛子里面的API,认为一步步自己实现有利于深入学习。翻坛子里面别人的帖子里面的代码,发现需要获取的不是ATTDef,而是ATTDef
但是翻遍了帮助文件也没能找到获取ATTRib的方法,本来准备放弃借用API,发现API里面也是要先获取到ATTRib对象才能获得其对应的值。此路不通只好继续翻别人的帖子。
最后找到了 http://bbs.xdcad.net/forum.php?m ... mp;highlight=attrib 这个帖子,一个有缺陷的lip和一个用Vlisp改进的代码一个用Alisp改进的代码,Vlisp完全看不懂,因为不能用监视器直接看到对象的信息,而且Vlisp的函数以及对象的方法又不知道去哪里找,好几个函数找到不介绍。而后面那个lisp的改进版又用了一个DXF函数【(dxf 66 en)】,看起来像是自定义函数,大概能猜到是通过图元名获取对应的组码,只是完全找到到66的定义是什么,只好也放弃。
幸好楼主提供的源码能复现,只好用调试模式一步一步的跑。用调试模式的单步调试能复现,但是把代码用控制台一行一行的走却死活复现不成。突然发现,虽然子函数 DIMLIST中依旧用的是变量E,而且没有定义为局部变量,而且子函数运行完后,变量E的定义为nil。但是跳出子函数后,主函数中的变量E定义回到了调用子函数之前的状态。至今没弄明白怎么回事。
发现这点之后就简单多了,直接做了个单层块,忽略掉子函数,发现只是获取到块的图元名后直接用entnext命令就能得到ATTRib对象的图元名。之后回到我最开始的那个复杂的动态块,成功解决。

我认为ATTDef和ATTDef的区别如下:

直接在块内遍历得到的是attdef对象,也就是块属性定义,而不是块属性
例如,我插入一个块名为β的块,新增的块对象的图元名为A,块名为β,将其复制或者再插入一个同样的块,新增的块对象的图元名为A,块名依然为β.
即块定义名称与块图元名是1对多的关系。通过块名操作的是块定义,而不是块对象。而块属性每个(同名)块对象不同,所以是依附在块对象(图元名)上而非块定义(块名)上。因此autocad通过两种对象来区分。因此遍历块定义内的对象无异于缘木求鱼。

对于有多个属性的块,只需要多次使用entnext即可依次获取多个块属性。

顺便问两件事:
1.为什么在之前的程序里,子函数对变量的修改能返回到主函数,而帖子里面的不能?
2.我用的图框是通过查询参数调整图幅的动态块,插入调整图幅后,块名变成了*UXX这样的动态块,因为我本来是想通过块名过滤来实现多选的。怎么才能获取本身的块名呢?之前用秋枫老师的批量打印功能,是可以获取正常的图名的,是通过什么方式获取的呢?


谢谢



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

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-10-19 10:42:42 | 显示全部楼层
BLOCK和ATTDEF 都是定义,认为是模板也行,本身不显示,他们的显示是通过引用的INSERT和ATTRIB来实例化。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 20:24 , Processed in 0.275472 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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