找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1015|回复: 9

[求助] acedSSGet()无法选择到刚画的实体

[复制链接]

已领礼包: 4个

财富等级: 恭喜发财

发表于 2017-2-15 12:28:54 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 liyupitt 于 2017-2-15 12:28 编辑

我先画了一个实体,然后用 acedSSGet() 函数捕捉这个实体,acedSSGet()的参数是包含这个实体周边的区域,理论上说只要这个区域内有实体,就会被选中。但不可以,但是随后再次使用 acedSSGet 函数,又可以选择到这个实体。请问这是为什么?我怎么才能第一次就选择到这个实体?
谢谢各位指点~
(不知道为啥不能贴代码了,所以就复制粘贴了,有图片,也有代码,请各位凑合看下,抱歉)
daima.png
//----------------------------在图上选择两个点,构成一个正交矩形(对角线上的两点)----------------------------
ads_point onePoint;
ads_point twoPoint;
if(acedGetPoint(NULL,_T("请指定矩形对角线上的一个点\n"),onePoint) != RTNORM){  
        return;  
}  
if(acedGetPoint(NULL,_T("请指定矩形对角线上的另一点\n"),twoPoint) != RTNORM){  
        return;  
}
double dblMinX = onePoint[X]<twoPoint[X]?onePoint[X]:twoPoint[X];
double dblMinY = onePoint[Y]<twoPoint[Y]?onePoint[Y]:twoPoint[Y];
double dblMinZ = onePoint[Z]<twoPoint[Z]?onePoint[Z]:twoPoint[Z];
double dblMaxX = onePoint[X]>twoPoint[X]?onePoint[X]:twoPoint[X];
double dblMaxY = onePoint[Y]>twoPoint[Y]?onePoint[Y]:twoPoint[Y];
double dblMaxZ = onePoint[Z]>twoPoint[Z]?onePoint[Z]:twoPoint[Z];

//-----------------------------------------------画出这个矩形-----------------------------------------------
AcGePoint2d rp1(dblMinX,dblMinY);
AcGePoint2d rp2(dblMaxX,dblMinY);
AcGePoint2d rp3(dblMaxX,dblMaxY);
AcGePoint2d rp4(dblMinX,dblMaxY);
AcGePoint2dArray points;
points.append(rp1);
points.append(rp2);
points.append(rp3);
points.append(rp4);
points.append(rp1);
AcDbPolyline* pRectangle = new AcDbPolyline(points.length());  
for(int i = 0;i < points.length();i ++)
{  
        pRectangle->addVertexAt(i,points.at(i),0,0.0,0.0);
}
pRectangle->setColorIndex(1);
AcDbBlockTable* pBlockTable = NULL;  
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);  
AcDbBlockTableRecord* pBlockTableRecord;  
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);  
AcDbObjectId Id;  
pBlockTableRecord->appendAcDbEntity(Id,pRectangle);   
pRectangle->close();  
pBlockTableRecord->close();
pBlockTable->close();  

//-------------------------------------使用acedSSGet函数获得区域内实体-------------------------------------ads_point pMinArea,pMaxArea;//acedSSGet的区域,比矩形的区域要大
pMinArea[X] = dblMinX -1;
pMinArea[Y] = dblMinY -1;
pMinArea[Z] = dblMinZ;
pMaxArea[X] = dblMaxX +1;
pMaxArea[Y] = dblMaxY +1;
pMaxArea[Z] = dblMaxZ;

ads_name ssname;//选择集
struct resbuf *pointlist;
ads_point cpwp2,cpwp4;
cpwp2[X] = pMaxArea[X];
cpwp2[Y] = pMinArea[Y];
cpwp2[Z] = 0.0;
cpwp4[X] = pMinArea[X];
cpwp4[Y] = pMaxArea[Y];
cpwp4[Z] = 0.0;

pointlist=acutBuildList(RTPOINT,pMinArea, RTPOINT,cpwp2, RTPOINT,pMaxArea, RTPOINT,cpwp4,0);
acedSSGet(_T("WP"),pointlist,NULL,NULL,ssname);
//acedSSGet(_T("W"),pMinArea,pMaxArea,NULL,ssname);
long lngCountInArea = 0;
acedSSLength(ssname,&lngCountInArea);
acedSSFree(ssname);
acutPrintf(_T("在此区域内捕捉到%d个实体\n"),lngCountInArea);



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

已领礼包: 4个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-2-15 13:29:06 | 显示全部楼层

ssget 除了 X , 其他的如W,WP,CP,C,F......都需要实体显示在屏幕内才能选到。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-2-15 13:30:36 | 显示全部楼层

你要选择刚画的,可以用entlast,也可以在代码中加入AcDbObjectIdArray , 你画一个实体,就把ID加入到这个数组里面,最后用这个数组处理你画过的实体。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2017-2-15 13:52:26 | 显示全部楼层

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-2-15 20:02:58 来自手机 | 显示全部楼层
屏幕外的除了 x ,其它不可能,刚加入的有两个函数 acedfxxxc():acedUpdateDxxx();刷新屏幕
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2017-2-16 09:51:08 | 显示全部楼层

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-9-23 12:17:07 | 显示全部楼层
可以使用 acedSSGet(_T("L"),NULL,NULL,NULL,ss) 将刚刚生成的实体加入到选择集
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 20:25 , Processed in 0.267274 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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