找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 558|回复: 9

[求助]:已知一个实体,能查到它是属于那个组或不属于任何租吗?

[复制链接]
发表于 2005-3-19 10:02:21 | 显示全部楼层 |阅读模式

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

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

×
如题,其实我是在程序中已知一个实体ID,然后想得到这个实体所属的那个组中的所有实体。想了好久也没找到办法,期待答案!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-3-21 15:48:42 | 显示全部楼层
有可能不行,因为文档里面说,一个AcDbEntity 可以属于一个组或者 多个组。
1对多关系。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-21 17:06:24 | 显示全部楼层

xcvxz

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

使用道具 举报

 楼主| 发表于 2005-3-21 18:39:14 | 显示全部楼层
没仔细看文档,谢谢提醒!但是不知道Autocad中的选择组是怎么实现的,因为它只需要选一个实体就能把整个组都选中!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-21 20:16:49 | 显示全部楼层
好象是通过反应器 (reactor) 机制实现的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-22 13:30:42 | 显示全部楼层
难怪,因为看文档说实体和组之间不存在从属关系,就搞不清楚了,现在有一点眉目了,不知ishou实现过这个功能没有?还请赐教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-23 23:01:03 | 显示全部楼层

Re: [求助]:已知一个实体,能查到它是属于那个组或不属于任何租吗?

最初由 rackyye 发布
[B]如题,其实我是在程序中已知一个实体ID,然后想得到这个实体所属的那个组中的所有实体。想了好久也没找到办法,期待答案! [/B]


从实体ID求得 实体的ads_name,用acdbEntGet()得到 实体的数据链表,见图 1)

从第一个 330组码求得所在组(GROUP)的 ads_name, 再用acdbEntGet()求得 group的数据链,从该链中可以得到group包含的所有实体的 ads_name (组码 340),  见图 2)
------------
实体的ads_name中的尖刮号 无法显示出来,只好改用图显示。是否有办法直接书写出来?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-25 22:06:55 | 显示全部楼层
谢谢ishou的提示,昨晚把实现方法搞定,特贴出来供大家讨论:

  1.   [FONT=courier new]
  2. // This is command 'PICG'
  3. void testGroup()
  4. {
  5.         // TODO: Implement the command
  6.         ads_name ent;
  7.         ads_point pt;
  8.         acedEntSel(_T("请选择实体...\n"), ent, pt);
  9.         AcDbObjectId objId;
  10.         Acad::ErrorStatus es;
  11.         es = acdbGetObjectId(objId, ent);
  12.         if (es != Acad::eOk)
  13.                 return;

  14.         AcDbEntity *pEnt = NULL;
  15.         if (acdbOpenObject(pEnt, objId, AcDb::kForRead)
  16.                 != Acad::eOk) {
  17.                 return;
  18.         }
  19.        
  20.         acutPrintf("实体名字是:%s\n", pEnt->isA()->name());

  21.         pEnt->close();
  22.         pEnt = NULL;

  23.         resbuf *rb = acdbEntGet(ent);
  24.         if (rb == NULL)
  25.                 return;

  26.         AcDbObjectId groupId;
  27.         for (; rb != NULL; rb = rb->rbnext) {
  28.                 if (rb->restype == 330) {
  29.                         groupId.setFromOldId(rb->resval.rlong);
  30.                         break;
  31.                 }
  32.         }

  33.         acutRelRb(rb);
  34.        
  35.         if (!groupId.isNull()) {
  36.                 AcDbObject *pObj = NULL;
  37.                 if (acdbOpenObject(pObj, groupId, AcDb::kForRead) != Acad::eOk) {
  38.                         return;
  39.                 }

  40.                 if (pObj->isKindOf(AcDbGroup::desc())) {
  41.                         AcDbGroup *pGroup = AcDbGroup::cast(pObj);
  42.                         AcDbGroupIterator *pIter = pGroup->newIterator();
  43.                         acutPrintf("该实体属于组'%s'...    \n", pGroup->name());
  44.                         acutPrintf("下面打印该组中所有实体名字...\n");
  45.                         int count = 1;
  46.                         for (; !pIter->done(); pIter->next()) {
  47.                                 pIter->getObject((AcDbObject *&)pEnt, AcDb::kForRead);
  48.                                 acutPrintf("第%d个实体为'%s'\n", count, pEnt->isA()->name());
  49.                                 count ++;
  50.                         }
  51.                         delete pIter;
  52.                         pGroup->close();
  53.                 }
  54.                 else {
  55.                         acutPrintf("该实体不属于任何组!\n");
  56.                 }
  57.         }
  58.         else {
  59.                 acutPrintf("该实体不属于任何组!\n");
  60.         }
  61. }
  62.   [/FONT]
复制代码


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

使用道具 举报

发表于 2005-4-26 15:43:29 | 显示全部楼层
谢谢提供的代码,虽然还没试用过
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-27 16:11:56 | 显示全部楼层
我有点不能理解的是,实体属于一个组有什么用啊, 还有,反应器到底是怎么回事,不知有谁能不能简单讲讲
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 13:23 , Processed in 0.393810 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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