找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 646|回复: 5

[求助]:请教关于选择集的过滤问题(有代码和图片)

[复制链接]
发表于 2003-6-25 15:48:34 | 显示全部楼层 |阅读模式

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

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

×
C:/Documents and Settings/Administrator/My Documents/My Pictures/help3.bmp
我想只选择选定区域的尺寸标注(如图中所示),用选择集来实现
ads_ssget(NULL,NULL,NULL,NULL,ssGet);
然后在后来的程序中对选择集里面的实体进行过滤,只留下AcDbDimension,效果实现了,但在刚开始获取选择集的时候那个非AcDbDimension的矩形也被选中,感觉很不爽。

我用了下面的代码对刚开始获取的选择集进行过滤(想过滤掉矩形等),但效果没有实现,代码如下:
ads_name ssDim;
struct resbuf pRb;
ads_point pt1;
ads_point pt2;

//构造过滤List(通过实体名称过滤)
char sbuf[10]; // Buffers to hold strings
pRb.restype = 0;        //实体名称
strcpy(sbuf, "Dimension");
pRb.resval.rstring = sbuf;
pRb.rbnext = NULL;
       
ads_getpoint(NULL,NULL,pt1);
ads_getpoint(NULL,NULL,pt2);
       
//选取尺寸标注
int ss= ads_ssget("w",pt1,pt2,&pRb,ssDim);
if(ss!=RTNORM)
    return;

以上代码实现时,没有出现区域选择的方框,请问我在哪里弄错了呢?请高手指点......如何能出现区域选择的方框并在刚开始的时候实现过滤。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2003-6-25 22:16:37 | 显示全部楼层
呵呵,问题已经解决了
//改尺寸值
void ChangeDim()
{
ads_name ssDim,EntityName;
AcDbDimension *pDim;
AcDbEntity *pEnt;
AcDbObjectId objId;       
struct resbuf pRb;

//创建过滤List(由实体名称来过滤)
char sbuf[50]; // Buffers to hold strings
pRb.restype = 0;        //实体名称
strcpy(sbuf, "Dimension");
strupr(sbuf);
pRb.resval.rstring = sbuf;
pRb.rbnext = NULL;

//选取尺寸标注
int ss= ads_ssget(NULL,NULL,NULL,&pRb,ssDim);

//取得选择集中实体个数
long NumOfEntity;
ss = ads_sslength(ssDim,&NumOfEntity);
       
char name[50];
ads_getstring(NULL,"\n请输入新的尺寸值:",name);
       
//对选择集中的实体进行过滤
for(long i = 0 ; i<NumOfEntity;i++)
{
ads_ssname(ssDim,i,EntityName);
       
acdbGetObjectId(objId,EntityName);
               
if(acdbOpenObject(pEnt,objId,AcDb::kForWrite)!=Acad::eOk)
{
ads_printf("\n打开实体时出错!");
return;
}
       
pDim=AcDbDimension::cast(pEnt);
pDim->setDimensionText(name);
pDim->close();
}
}

以上代码是实现对区域选择范围内的实体用实体名称进行过滤,
并修改尺寸值,其实可以再丰富下(增加些过滤条件等)封装成一个有用的函数的。。请大家参考
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-13 20:25:33 | 显示全部楼层
//对选择集中的实体进行过滤
for(long i = 0 ; i {
ads_ssname(ssDim,i,EntityName);
什么意思,为什么这种情况在论坛很常见啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-14 10:40:23 | 显示全部楼层
这是遍历选择集。 ssDim是集合。 EntityName是单个实体名。通过这个函数得到单个实体的
ads_name 然后通过函数 acdbGetObjectId(dbObjID,EntityName);  得到实体的AcdbObjectId,
然后通过acdbOpenObject(pdbObj,dbObjID,AcDb::kForRead);可以得到这个实体的指针,对其进行操作。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 07:40 , Processed in 0.274459 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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