找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1227|回复: 8

[求助] 【已解决】acedssget返回rterror怎么解决

[复制链接]

已领礼包: 28个

财富等级: 恭喜发财

发表于 2019-4-27 15:16:10 来自手机 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 1121443108qaz 于 2019-4-27 22:28 编辑

我通过acdbpolyline的acgecurve曲线获取样本点的获得了这个曲线的样本点,这些样本点应该是wcs下的吧,我再使用acedtrans将wcs点转化成了ucs点,然后使用wp模式,希望选择在这条曲线以内的曲线。一般情况下都工作良好,现在遇到一条曲线,怎么都选不到该曲线内的东西。我继而发现只有把这条曲线放大到视图中央,然后重生成一下,才能工作良好。问题是,我不能对每条曲线都这样操作,那将使运行速度变慢好多。我也单独对这条曲线使用draw方法重新绘制或者在程序启动前使用acedupdatedisplay刷新屏幕,都没有效果,只能使用重生成。这是为什么呢,我看官方论坛也有要考虑提到dcs之类,但是我没理解透,有人遇到相同的情况吗。我的代码如下
获取样本点
  1. bool xxx::getSamplePoint(const AcDbCurve* pCurve, AcGePoint3dArray &points, double approEps /* = 0.001 */)
  2. {
  3.         AcGeCurve3d *pGeCurve = NULL;
  4.         AcGeDoubleArray paras;
  5.         AcGeInterval val;
  6.         double startPa, endPa;
  7.         if (pCurve->getAcGeCurve(pGeCurve)==Acad ::eOk)
  8.         {
  9.                 pGeCurve->getInterval(val);
  10.                 val.getBounds(startPa, endPa);
  11.                 pGeCurve->getSamplePoints(startPa, endPa, approEps, points, paras,true);
  12.                 if (points.first().isEqualTo(points.last()))
  13.                 {
  14.                         points.removeLast();
  15.                 }
  16.                 delete pGeCurve;
  17.                 return true;
  18.         }
  19.         return false;
  20. }

形成缓冲区
  1. resbuf* CDwgDatabaseUtil::BuildFromPtArray(const AcGePoint3dArray& points)
  2. {
  3.         struct resbuf* retRb = NULL;
  4.         int count = points.length();
  5.         if (count <= 1)
  6.         {
  7.                 return retRb;
  8.         }
  9.         ads_point wcsPt,ucsPt,dcsPt;
  10.         resbuf fromWcs, toUcs,toDcs;
  11.         fromWcs.restype = RTSHORT;
  12.         fromWcs.resval.rint = 0;
  13.         toUcs.restype = RTSHORT;
  14.         toUcs.resval.rint = 1;
  15.         toDcs.restype = RTSHORT;
  16.         toDcs.resval.rint = 2;
  17.         wcsPt[X] = points.at(0).x;
  18.         wcsPt[Y] = points.at(0).y;
  19.         wcsPt[Z] = points.at(0).z;
  20.         acutPrintf(L"\nwcsPt x y z is %g,%g,%g", wcsPt[X], wcsPt[Y], wcsPt[Z]);
  21.         if (acedTrans(wcsPt,&fromWcs,&toUcs,0,ucsPt)==RTNORM)
  22.         {
  23.                 acutPrintf(L"\nucsPt x y z is %g,%g,%g", ucsPt[X], ucsPt[Y], ucsPt[Z]);
  24.         }
  25.         if (acedTrans(wcsPt,&fromWcs,&toDcs,0,dcsPt)==RTNORM)
  26.         {
  27.                 acutPrintf(L"\ndcsPt x y z is %g,%g,%g", ucsPt[X], ucsPt[Y], ucsPt[Z]);
  28.         }
  29.         retRb = acutBuildList(RT3DPOINT, dcsPt, RTNONE);
  30.         resbuf* nextRb = retRb;
  31.         for (int i = 1; i < count; i++)
  32.         {
  33.                 wcsPt[X] = points.at(i).x;
  34.                 wcsPt[Y] = points.at(i).y;
  35.                 wcsPt[Z] = points.at(i).z;
  36.                 acedTrans(wcsPt, &fromWcs, &toDcs, 0, dcsPt);
  37.                 nextRb->rbnext = acutBuildList(RT3DPOINT, dcsPt, RTNONE);
  38.                 nextRb = nextRb->rbnext;
  39.         }
  40.         return retRb;
  41. }

然后就是用acedSSGet(L"_WP", pRb, NULL, pFilter, ssname)进行选择,我的过滤器是没有问题的,要有问题就是这个缓冲区。


来自: 微社区

1.rar

17.67 KB, 下载次数: 7, 下载积分: D豆 -1 , 活跃度 1

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

已领礼包: 5060个

财富等级: 富甲天下

发表于 2019-4-27 16:37:27 来自手机 | 显示全部楼层
zoom一下又不会死,也没有你说的那么慢
来自: 微社区

点评

如果只zoom一下我肯定是愿意的,但是我没能找到那条曲线不能成的原因之前,我就必须对每条曲线都缩放一下,那确实很慢。  详情 回复 发表于 2019-4-27 22:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2019-4-27 20:29:41 | 显示全部楼层
问题的关键是你得到的那些点,你要处理这些点,你去看看这些点有什么不同,把点都打印出来
SSGET不是UCS点,是DCS点,虽然很多时候WCS,UCS,DCS点是一样的

点评

我使用dcs点后仍然不能解决问题呢,另外https://forums.autodesk.com/t5/objectarx/forming-a-crossing-polygon-in-dcs-for-passing-to-acedssget/m-p/4341617?advanced=false&collapse_discussion=true&filter=loca  详情 回复 发表于 2019-4-27 22:09
我再试了一下,打印发现wcs点,ucs点,dcs点都是一样的,我把我的文件和代码都上传了,你再看看我这是由于什么问题。  详情 回复 发表于 2019-4-27 22:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2019-4-27 22:01:29 | 显示全部楼层
Lisphk 发表于 2019-4-27 20:29
问题的关键是你得到的那些点,你要处理这些点,你去看看这些点有什么不同,把点都打印出来
SSGET不是UCS点 ...

我再试了一下,打印发现wcs点,ucs点,dcs点都是一样的,我把我的文件和代码都上传了,你再看看我这是由于什么问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2019-4-27 22:09:58 | 显示全部楼层
Lisphk 发表于 2019-4-27 20:29
问题的关键是你得到的那些点,你要处理这些点,你去看看这些点有什么不同,把点都打印出来
SSGET不是UCS点 ...

我使用dcs点后仍然不能解决问题呢,另外https://forums.autodesk.com/t5/o ... ;search_type=thread在这个链接里面桌子公司的人说是要ucs点的啊,没搞懂到底怎么回事。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2019-4-27 22:11:46 | 显示全部楼层
xinxirong 发表于 2019-4-27 16:37
zoom一下又不会死,也没有你说的那么慢

如果只zoom一下我肯定是愿意的,但是我没能找到那条曲线不能成的原因之前,我就必须对每条曲线都缩放一下,那确实很慢。

点评

你为什么要没个曲线都ZOOM一次呢,你ZOOM到选择集最大外框一次就够了  详情 回复 发表于 2019-4-28 10:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2019-4-27 22:29:51 | 显示全部楼层
最终发现还是因为样本点之间相邻有重复点,但是re一下就能正确识别。

点评

API是API,RE是RE,你要把数据处理成API的要求。 不要有重点了  详情 回复 发表于 2019-4-28 10:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2019-4-28 10:30:53 | 显示全部楼层
1121443108qaz 发表于 2019-4-27 22:11
如果只zoom一下我肯定是愿意的,但是我没能找到那条曲线不能成的原因之前,我就必须对每条曲线都缩放一下 ...

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2019-4-28 10:31:52 | 显示全部楼层
1121443108qaz 发表于 2019-4-27 22:29
最终发现还是因为样本点之间相邻有重复点,但是re一下就能正确识别。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 04:50 , Processed in 0.218308 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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