找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1133|回复: 1

[讨论]:关于“GROUP”的讨论。

[复制链接]

已领礼包: 3337个

财富等级: 富可敌国

发表于 2002-3-12 05:14:33 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-3-12 09:47:48 | 显示全部楼层

Re: [讨论]:关于“GROUP”的讨论。

最初由 ww822 发布
[B]引:如何用LSP获得图中存在的特定的“GROUP”? [/B]


组GROUP的定义是存放在命名对象词典的组词典中,获得组词典,就可以得到数据库中定义的组,下面是试验:

使用XDRX_API函数xdrx_object_get获得命名对象词典对象:
(setq a (xdrx_object_get "dictionary"))
<图元名: 40032cd0>

获得对象的数据,其中(3 . "ACAD_GROUP")为组,它下一个表是改对象名字。[/COLOR]
命令: (setq b (entget a))
((-1 . <图元名: 40032cd0>) (0 . "DICTIONARY") (330 . <图元名: 0>) (5 . "1A")
(100 . "AcDbDictionary") (280 . 0) (281 . 1) (3 . "ACAD_GROUP") (350 . <图元名:
40032cc0>) (3 . "ACAD_LAYOUT") (350 . <图元名: 40032d70>) (3 .
"ACAD_MLINESTYLE") (350 . <图元名: 40032cc8>) (3 . "ACAD_PLOTSETTINGS") (350 .
<图元名: 40032d78>) (3 . "ACAD_PLOTSTYLENAME") (350 . <图元名: 40032d60>) (3 .
"AcDbVariableDictionary") (350 . <图元名: 40032f38>))

使用MEMBER函数得到以组对象开始的子表:[/COLOR]
命令: (SETQ C (MEMBER '(3 . "ACAD_GROUP") B))
((3 . "ACAD_GROUP") (350 . <图元名: 40032cc0>) (3 . "ACAD_LAYOUT") (350 .
<图元名: 40032d70>) (3 . "ACAD_MLINESTYLE") (350 . <图元名: 40032cc8>) (3 .
"ACAD_PLOTSETTINGS") (350 . <图元名: 40032d78>) (3 . "ACAD_PLOTSTYLENAME") (350
. <图元名: 40032d60>) (3 . "AcDbVariableDictionary") (350 . <图元名: 40032f38>))

CADR获得组对象[/COLOR]
命令: (SETQ D (CADR C))
(350 . <图元名: 40032cc0>)

CDR得到组对象名
命令: (SETQ E (CDR D))
<图元名: 40032cc0>

获得组对象的数据:
命令: (SETQ F (ENTGET E))
((-1 . <图元名: 40032cc0>) (0 . "DICTIONARY") (5 . "18") (102 .
"{ACAD_REACTORS") (330 . <图元名: 40032cd0>) (102 . "}") (330 . <图元名:
40032cd0>) (100 . "AcDbDictionary") (280 . 0) (281 . 1) (3 . "FIRST") (350 .
<图元名: 40032fa8>) (3 . "SECOND") (350 . <图元名: 40032fb0>))

上面的表中组码3的表为当前数据库定义的组,可以看到有两个组,名字分别是FIRST,SECOND,可以
在进一步得到这两个组的对象,在ENTGET就可以得到组里面的实体名字。

拿first为例子:

得到第一个组

命令: (setq g (assoc 3 f))
(3 . "FIRST")

得到组子表
命令: (setq h (member g f))
((3 . "FIRST") (350 . <图元名: 40032fa8>) (3 . "SECOND") (350 . <图元名:
40032fb0>))

得到第一个FIRST组的对象

命令: (setq i (cdadr h))
<图元名: 40032fa8>

获得组对象的数据,其中组码340的就是组里面的实体
命令: (setq j (entget i))
((-1 . <图元名: 40032fa8>) (0 . "GROUP") (5 . "B5") (102 . "{ACAD_REACTORS")
(330 . <图元名: 40032cc0>) (102 . "}") (330 . <图元名: 40032cc0>) (100 .
"AcDbGroup") (300 . "") (70 . 0) (71 . 1) (340 . <图元名: 40032fa0>) (340 .
<图元名: 40032f90>))

[F]使用XDRX_API可以很方便的进行上面这些操作,见下面[/F]

直接得到组对象

(setq a (xdrx_object_get "group"))
命令: (setq a (xdrx_object_get "group"))
<图元名: 40032cc0>

使用对象叠代器,做个循环就得到组词典下面的所有组对象,由子表组成,每个子表的CAR是组名,CADR是组对象,ENTGET这个CADR,就可以得到组内的实体
命令: (while (setq b (xdrx_object_next))(setq gg (cons b gg)))
(("SECOND" <图元名: 40032fb0>) ("FIRST" <图元名: 40032fa8>))

xdrx_object_get和xdrx_object_next组合,不仅适用组词典,对所有容器对象都可以,也就是说,可以用他们得到命名对象词典下面的所有东西,得到块表容器下的所有东西,得到。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-5 03:04 , Processed in 0.424018 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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