找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1015|回复: 8

[求助]:intersectWith()函数求交的问题

[复制链接]
发表于 2002-11-21 03:50:19 | 显示全部楼层 |阅读模式

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

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

×
AcDbLine *pLine = new AcDbLine();
        AcGePoint3dArray GPts;
        AcGeVector3d Vec(0., 0., 1.);

        ads_polar(pt0, rAngle, 10000, pt1);

        GPt.x = pt0[X];
        GPt.y = pt0[Y];
        GPt.z = 0;
        pLine->setStartPoint(GPt);

        GPt.x = pt1[X];
        GPt.y = pt1[Y];
        GPt.z = 0;
        pLine->setEndPoint(GPt);
        pLine->setNormal(Vec);

        if ((es = pEnt->intersectWith(pLine, AcDb::kOnBothOperands, GPts)) != Acad::eOk ||
                GPts.length() == 0){
                ads_printf("\nes=%d , %d", es, GPts.length());
                return FALSE;
        }
明显相交的,就是无法求得,能返回eOK,交点数组却是空的,这是为何?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-11-21 09:53:13 | 显示全部楼层
不知 pLine->setNormal(Vec); 有什么作用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-21 09:59:41 | 显示全部楼层

Re: [求助]:intersectWith()函数求交的问题

最初由 xb4270293 发布
[B]AcDbLine *pLine = new AcDbLine();
        AcGePoint3dArray GPts;
        AcGeVector3d Vec(0., 0., 1.);

        ads_polar(pt0, rAngle, 10000, pt1);

        GPt.x = pt0[X];
        GPt.y = pt0[Y];
        GPt.z = 0;
        pLine->setStartP... [/B]


pEnt实体的NORMAL和PLINE的一样吗?
点pt0值是什么? 代码好像不全。

你用的是参数AcDb::kOnBothOperands,要求这两个实体必须实际相交,不求延伸交点。

另:ads_point点转换到AcGePoint3d点不用挨个赋值。可以:

GPt=asPnt3d(pt0);

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

使用道具 举报

已领礼包: 192个

财富等级: 日进斗金

发表于 2002-11-21 10:09:16 | 显示全部楼层
不知道你的pEnt是什么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-21 23:06:14 | 显示全部楼层
问题解决了! 谢谢大家!
程序没有错,问题出在pEnt上,自定义的实体要重载intersectWith函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-21 23:08:49 | 显示全部楼层
最初由 xb4270293 发布
[B]问题解决了! 谢谢大家!
程序没有错,问题出在pEnt上,自定义的实体要重载intersectWith函数。 [/B]


恭喜你:),能把你这个自定义实体实现的interSectWith方法完整代码给大家贴论坛来吗?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-21 23:24:25 | 显示全部楼层
不好意思, 我是在help中抄来修改的,sample中写得很严谨:
Acad::ErrorStatus
AsdkPoly::intersectWith(
    const AcDbEntity* ent,
    AcDb::Intersect intType,
    AcGePoint3dArray& points,
    int /*thisGsMarker*/,
    int /*otherGsMarker*/) const
{
    assertReadEnabled();
    Acad::ErrorStatus es = Acad::eOk;
    if (ent == NULL)
        return Acad::eNullEntityPointer;

    // The idea is to intersect each side of the polygon
    // with the given entity and return all the points.
    //
    // For non-R12-entities, i.e. the ones that have their

    // intersection methods defined, we call that method for
    // each of the sides of the polygon. For R12-entities,
    // we use the locally defined intersectors since their
    // protocols are not implemented.

    if (ent->isKindOf(AcDbLine::desc())) {
        if ((es = intLine(this, AcDbLine::cast(ent),
            intType, NULL, points)) != Acad::eOk)
        {
            return es;
        }
    } else if (ent->isKindOf(AcDbArc::desc())) {
        if ((es = intArc(this, AcDbArc::cast(ent), intType,

            NULL, points)) != Acad::eOk)
        {
            return es;
        }
    } else if (ent->isKindOf(AcDbCircle::desc())) {
        if ((es = intCircle(this, AcDbCircle::cast(ent),
            intType, NULL, points)) != Acad::eOk)
        {
            return es;
        }
    } else if (ent->isKindOf(AcDb2dPolyline::desc())) {
        if ((es = intPline(this, AcDb2dPolyline::cast(ent),
            intType, NULL, points)) != Acad::eOk)
        {
            return es;

        }
    } else if (ent->isKindOf(AcDb3dPolyline::desc())) {
        if ((es = intPline(this, AcDb3dPolyline::cast(ent),
            intType, NULL, points)) != Acad::eOk)
        {
            return es;
        }
    } else {

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

使用道具 举报

发表于 2002-11-22 09:23:30 | 显示全部楼层
哦,继续写吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-24 22:48:27 | 显示全部楼层
可以在AdsDev.hlp中找到. 写多了,怕大家笑话
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 11:20 , Processed in 0.378156 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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