找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2289|回复: 11

[求助] 写了个双向偏移的用来测试getoffsetcurves,为什么只对直线有效呢

[复制链接]

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-6-6 10:53:37 | 显示全部楼层 |阅读模式

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

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

×
我用多段线和圆弧,结果返回len1为0,根本没有获得acdbcoidptrarray啊,这是为什么?
ErrorStatus MyUtil::OffsetBothSide(const AcDbObjectId &curveId, double offsetValue)
{
        double offsetValue2 = -offsetValue;
        AcGeVector3d normal(0, 0, 1);
        int len1;
        AcDbEntity* pEntity = NULL;
        ErrorStatus es = Acad::eOk;
        AcDbCurve *pCurve = NULL;
        AcDbVoidPtrArray offsetCurves1,offsetcurves2 = NULL;
        es = acdbOpenObject(pCurve, curveId, AcDb::kForRead);
        if (es!=Acad ::eOk)
        {
                return es;
        }
        pCurve->getOffsetCurvesGivenPlaneNormal(normal, offsetValue, offsetCurves1);
        pCurve->getOffsetCurvesGivenPlaneNormal(normal, offsetValue2, offsetcurves2);
        len1 = offsetCurves1.length();
        acutPrintf(L"\nlen1的值是%d", len1);
        for (int i = 0;i<offsetCurves1.length();i++)
        {
                pEntity =(AcDbEntity*)offsetCurves1[i];
                CDwgDatabaseUtil::postToMOdelSpace(pEntity);
        }
        for (int j =0;j<offsetcurves2.length();j++)
        {
                pEntity = (AcDbEntity*)offsetcurves2[j];
                CDwgDatabaseUtil::postToMOdelSpace(pEntity);
        }
        pCurve->close();
        return es;
}
static void XXXMyGrouptest()
        {
                AcDbObjectId entId = CSSUtil::selectOne(L"\n选择要双向偏移的对象");
                ErrorStatus es = MyUtil::OffsetBothSide(entId, 5.0);
                if (es!=Acad ::eOk)
                {
                        acutPrintf(L"\n选择对象非曲线实体,无法偏移");
                        return;
                }
        }

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

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-6 11:18:34 来自手机 | 显示全部楼层
我把getoffsetcurvebygivenplanenormal换成getoffsetcurve就好了,也不知道为啥,我以为给定平面应该更好使啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-6 11:23:32 来自手机 | 显示全部楼层
我想知道什么时候获得的无值指针数组长度大于1,我用含弧多段线测试len1值也是1啊

点评

多利用返回值,判断OK再进入处理 把 pCurve->getOffsetCurvesGivenPlaneNormal(normal, offsetValue, offsetCurves1); 改成: es = pCurve->getOffsetCurvesGivenPlaneNormal(normal, offsetValue, offsetCurves1  详情 回复 发表于 2018-6-6 11:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-6 11:42:27 | 显示全部楼层
本帖最后由 newer 于 2018-6-6 11:44 编辑
1121443108qaz 发表于 2018-6-6 11:23
我想知道什么时候获得的无值指针数组长度大于1,我用含弧多段线测试len1值也是1啊

多利用返回值,判断OK再进入处理
把 pCurve->getOffsetCurvesGivenPlaneNormal(normal, offsetValue, offsetCurves1);
改成:
es = pCurve->getOffsetCurvesGivenPlaneNormal(normal, offsetValue, offsetCurves1);
if (es == Acad::eOk)
{
.....
}else{
    acutPrintf(_T("\n Arx Error:%s"),acedErrorStatus(es);
}

你看看返回值是什么

点评

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-6 12:04:01 来自手机 | 显示全部楼层
newer 发表于 2018-6-6 11:42
多利用返回值,判断OK再进入处理
把 pCurve->getOffsetCurvesGivenPlaneNormal(normal, offsetValue, of ...

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-6 12:13:04 | 显示全部楼层

回帖奖励 +5 D豆

不可能是acad::error,这个不是Acad::ErrorStatus里面的枚举值。
你把执行的屏幕打印结果贴上来。

点评

主要我这没有acederrorstatus,我是 es=pCurve->getOffsetCurvesGivenPlaneNormal(normal,offsetValue, offsetCurves1); if (es!=Acad ::eOk) { acutPrintf(L"\nacad::error%s",(Acad::ErrorStatus)es);  详情 回复 发表于 2018-6-6 12:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-6 12:54:12 | 显示全部楼层
newer 发表于 2018-6-6 12:13
不可能是acad::error,这个不是Acad::ErrorStatus里面的枚举值。
你把执行的屏幕打印结果贴上来。

主要我这没有acederrorstatus,我是


es=pCurve->getOffsetCurvesGivenPlaneNormal(normal,offsetValue, offsetCurves1);
        if (es!=Acad ::eOk)
        {
                acutPrintf(L"\nacad::error%s",(Acad::ErrorStatus)es);
                return es;
        }

然后结果是选择要双向偏移的对象
acad::error
选择对象非曲线实体,无法偏移
所以根本没打印出来。

点评

你这样写不对,你没打印出%s的内容,只是打印了前面的acad::error字符串 是 acadErrorStatusText 函数把Acad::ErrorStatus枚举值变成字符串。 这样写: es = pCurve->getOffsetCurvesGivenPlaneNormal(normal  详情 回复 发表于 2018-6-6 13:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-6 13:29:20 | 显示全部楼层
1121443108qaz 发表于 2018-6-6 12:54
主要我这没有acederrorstatus,我是

你这样写不对,你没打印出%s的内容,只是打印了前面的acad::error字符串

是 acadErrorStatusText 函数把Acad::ErrorStatus枚举值变成字符串。
这样写:

es = pCurve->getOffsetCurvesGivenPlaneNormal(normal, offsetValue, offsetCurves1);
if (es == Acad::eOk)
{
.....
}else{
    acutPrintf(_T("\n Arx Error:%s"),acadErrorStatusText(es);
}

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-6 13:50:02 | 显示全部楼层
本帖最后由 newer 于 2018-6-6 13:51 编辑

你可以写成通用的函数用

  1. void XdDbUtils::rxErrorMsg(Acad::ErrorStatus msgId)
  2. {
  3.         if (msgId != Acad::eOk)
  4.                 ads_printf(_T("\nARX_ERROR: %s"), acadErrorStatusText(msgId));
  5. }
  6. void XdDbUtils::rxErrorAlert(Acad::ErrorStatus msgId)
  7. {
  8.         CString str;
  9.         if (msgId != Acad::eOk){
  10.                 str.Format(_T("ARX ERROR: %s"), acadErrorStatusText(msgId));
  11.                 XdDbUtils::alertBox(str);
  12.         }
  13. }
  14. void
  15. XdDbUtils::alertBox(LPCTSTR msg)
  16. {
  17.         AfxMessageBox(msg, MB_OK | MB_ICONEXCLAMATION);
  18. }
  19. const TCHAR* XdDbUtils::rxErrorStr(Acad::ErrorStatus msgId)
  20. {
  21.         return(acadErrorStatusText(msgId));
  22. }

点评

另外,什么时候getoffsetcurve得到的无值指针数组长度大于1呢,通常都是1啊  详情 回复 发表于 2018-6-7 13:51
N版,返回值是acad::erroreNotImplementedYet,我看了文档没明白这是什么问题。  详情 回复 发表于 2018-6-7 13:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-7 13:39:59 | 显示全部楼层
newer 发表于 2018-6-6 13:50
你可以写成通用的函数用

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-7 13:51:21 | 显示全部楼层
newer 发表于 2018-6-6 13:50
你可以写成通用的函数用

另外,什么时候getoffsetcurve得到的无值指针数组长度大于1呢,通常都是1啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2019-3-11 15:59:29 来自手机 | 显示全部楼层
今天再试还是一样的,这个函数有问题。
来自: 微社区
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 06:16 , Processed in 0.369570 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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