- UID
- 770541
- 积分
- 410
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2017-8-19
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 1121443108qaz 于 2019-4-27 22:28 编辑
我通过acdbpolyline的acgecurve曲线获取样本点的获得了这个曲线的样本点,这些样本点应该是wcs下的吧,我再使用acedtrans将wcs点转化成了ucs点,然后使用wp模式,希望选择在这条曲线以内的曲线。一般情况下都工作良好,现在遇到一条曲线,怎么都选不到该曲线内的东西。我继而发现只有把这条曲线放大到视图中央,然后重生成一下,才能工作良好。问题是,我不能对每条曲线都这样操作,那将使运行速度变慢好多。我也单独对这条曲线使用draw方法重新绘制或者在程序启动前使用acedupdatedisplay刷新屏幕,都没有效果,只能使用重生成。这是为什么呢,我看官方论坛也有要考虑提到dcs之类,但是我没理解透,有人遇到相同的情况吗。我的代码如下
获取样本点 - bool xxx::getSamplePoint(const AcDbCurve* pCurve, AcGePoint3dArray &points, double approEps /* = 0.001 */)
- {
- AcGeCurve3d *pGeCurve = NULL;
- AcGeDoubleArray paras;
- AcGeInterval val;
- double startPa, endPa;
- if (pCurve->getAcGeCurve(pGeCurve)==Acad ::eOk)
- {
- pGeCurve->getInterval(val);
- val.getBounds(startPa, endPa);
- pGeCurve->getSamplePoints(startPa, endPa, approEps, points, paras,true);
- if (points.first().isEqualTo(points.last()))
- {
- points.removeLast();
- }
- delete pGeCurve;
- return true;
- }
- return false;
- }
形成缓冲区
 - resbuf* CDwgDatabaseUtil::BuildFromPtArray(const AcGePoint3dArray& points)
- {
- struct resbuf* retRb = NULL;
- int count = points.length();
- if (count <= 1)
- {
- return retRb;
- }
- ads_point wcsPt,ucsPt,dcsPt;
- resbuf fromWcs, toUcs,toDcs;
- fromWcs.restype = RTSHORT;
- fromWcs.resval.rint = 0;
- toUcs.restype = RTSHORT;
- toUcs.resval.rint = 1;
- toDcs.restype = RTSHORT;
- toDcs.resval.rint = 2;
- wcsPt[X] = points.at(0).x;
- wcsPt[Y] = points.at(0).y;
- wcsPt[Z] = points.at(0).z;
- acutPrintf(L"\nwcsPt x y z is %g,%g,%g", wcsPt[X], wcsPt[Y], wcsPt[Z]);
- if (acedTrans(wcsPt,&fromWcs,&toUcs,0,ucsPt)==RTNORM)
- {
- acutPrintf(L"\nucsPt x y z is %g,%g,%g", ucsPt[X], ucsPt[Y], ucsPt[Z]);
- }
- if (acedTrans(wcsPt,&fromWcs,&toDcs,0,dcsPt)==RTNORM)
- {
- acutPrintf(L"\ndcsPt x y z is %g,%g,%g", ucsPt[X], ucsPt[Y], ucsPt[Z]);
- }
- retRb = acutBuildList(RT3DPOINT, dcsPt, RTNONE);
- resbuf* nextRb = retRb;
- for (int i = 1; i < count; i++)
- {
- wcsPt[X] = points.at(i).x;
- wcsPt[Y] = points.at(i).y;
- wcsPt[Z] = points.at(i).z;
- acedTrans(wcsPt, &fromWcs, &toDcs, 0, dcsPt);
- nextRb->rbnext = acutBuildList(RT3DPOINT, dcsPt, RTNONE);
- nextRb = nextRb->rbnext;
- }
- return retRb;
- }
然后就是用acedSSGet(L"_WP", pRb, NULL, pFilter, ssname)进行选择,我的过滤器是没有问题的,要有问题就是这个缓冲区。
来自: 微社区 |
-
-
1.rar
17.67 KB, 下载次数: 7, 下载积分: D豆 -1 , 活跃度 1
|