- UID
- 770541
- 积分
- 410
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2017-8-19
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
按我的理解来说,acedssget(L"_C",pt1,pt2,Null,ssName);获得的选择集应该是完全由Pt1和Pt2组成的矩形以内那样来的,可是我利用这样的原理来选择时常常会选择到不该选择到的物体。于是我写了以下代码进行验证,我发现实际选择用到的点并不等于给定的pt1,pt2角点,经常性地会根据视图放大。如图所示,生成的正方形宽度达到了9点多,正常按程序宽度应该是0.001(假如我画两条长度为0.001的直线,再执行程序,得到的就是如预期的宽度为0.001的正方形)。我想知道怎样能够精确控制acedssget(L"C")模式,使得实际用到的点就是pt1,pt2.C模式内部的取点与什么有关呢,我用的坐标系是世界坐标系,捕捉也关闭了。谁来帮帮我啊。
 - static void xxxMyGrouptest()
- {
- AcDbObjectId entId = CSSUtil::selectOne(L"\n请选择一条曲线");
- if (entId==AcDbObjectId::kNull)
- {
- return;
- }
- AcDbCurve* pCurve = NULL;
- AcGePoint3d ptEnd,ptRightDown,ptLeftUp;
- AcGePoint3dArray points;
- ads_name ssName;
- if (acdbOpenObject(pCurve,entId)==Acad::eOk)
- {
- pCurve->getEndPoint(ptEnd); //获取曲线端点
- ptRightDown = ptEnd + AcGeVector3d(0.0005, -0.0005, 0); //获取曲线端点为基点右下选择点
- ptLeftUp = ptEnd + AcGeVector3d(-0.0005, 0.0005,0); //获取曲线端点为基点左上选择点
- int rt = acedSSGet(L"_C", asDblArray(ptRightDown), asDblArray(ptLeftUp), NULL, ssName);
- if (rt==RTNORM)
- {
- resbuf* pBuf = NULL;
- rt = acedSSNameX(&pBuf, ssName, 0); //获取实际选择时得到的四个角点
- if (rt==RTNORM)
- {
- resbuf* pTemp = pBuf;
- while (pTemp->rbnext!=NULL)
- {
- if (pTemp->restype==RT3DPOINT)
- {
- points.append(asPnt3d(pTemp->resval.rpoint));
- }
- pTemp = pTemp->rbnext;
- }
- acutRelRb(pBuf);
- }
- if (points.length()) //根据得到的四个角点画出多段线
- {
- CPolylineUtil::Add(CConvertUtil::ToPoint2d(points), 0, true);
- }
- acedSSFree(ssName);
- }
- pCurve->close();
- }
- }
|
-
|