- UID
- 764067
- 积分
- 120
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2016-9-29
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 liyupitt 于 2017-2-15 12:28 编辑
我先画了一个实体,然后用 acedSSGet() 函数捕捉这个实体,acedSSGet()的参数是包含这个实体周边的区域,理论上说只要这个区域内有实体,就会被选中。但不可以,但是随后再次使用 acedSSGet 函数,又可以选择到这个实体。请问这是为什么?我怎么才能第一次就选择到这个实体?
谢谢各位指点~
(不知道为啥不能贴代码了,所以就复制粘贴了,有图片,也有代码,请各位凑合看下,抱歉)
//----------------------------在图上选择两个点,构成一个正交矩形(对角线上的两点)----------------------------
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);
|
|