找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1942|回复: 6

[讨论]:在arx202中,AcGeLine2d和AcGeCircArc2d求交就出错?

[复制链接]
发表于 2003-8-15 11:27:23 | 显示全部楼层 |阅读模式

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

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

×
相同的代码,到arx2002中就没有问题,类似于这样的问题,arx202好像有很多,有时遇到,我只有绕行,不过,有的问题很像没办法绕行,我不知道是我使用的问题,还是arx202中真的有很多问题?
不知有没有什么办法?除了升级到2000,2002?有补丁不?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-8-15 11:34:56 | 显示全部楼层

Re: [讨论]:在arx202中,AcGeLine2d和AcGeCircArc2d求交就出错?

最初由 catwang_G 发布
[B]相同的代码,到arx2002中就没有问题,类似于这样的问题,arx202好像有很多,有时遇到,我只有绕行,不过,有的问题很像没办法绕行,我不知道是我使用的问题,还是arx202中真的有很多问题?
不知有没有什么办法?除了?.. [/B]


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

使用道具 举报

 楼主| 发表于 2003-8-15 13:47:48 | 显示全部楼层
对不起,我记错了,是两AcGeCircArc求距离有问题。如:
AcGeCircArc2d arc1(AcGePoint2d(500,0),500,0.0,PI);
AcGeCircArc2d arc2(AcGePoint2d(1000,-500),AcGePoint2d(500,0),AcGePoint2d(1000,500));
double distll = arc1.distanceTo(arc2);
事实是,相关函数,closestPointTo,getClosestPointTo都有问题,一用就出错。至于求交我没试。

arx202里AcDbCurve函数extend在处理延伸line时,和arx2002处理不同,如参数为newPara,在arx2002里,直接传入起点或终点的参数,如原先终点参数为1000,想扩展100,直接传入1100即可,在arx202里,则必须传入参数100/1000才可.这给软件升级带来很大不便。
bool ExtendCurve(AcDbCurve* pCurve,const double &dist)
{
        if(!pCurve)
                return false ;

        double dParam(0) ;
        Acad::ErrorStatus es = pCurve->getParamAtDist(fabs(dist),dParam) ;
        if(es!=Acad::eOk)
                return false ;
        AcDbLine *pLine = AcDbLine::cast(pCurve) ;
        double paraSt(0),paraEnd(0) ;
        pCurve->getStartParam(paraSt) ;
        pCurve->getEndParam(paraEnd) ;
        dParam = dParam-paraSt ;
        double parm = paraSt -dParam ;
        if(pLine)
                parm = parm/paraEnd ;//此处要非常注意,因为在arx2002中,直接传入parm就可以了,不要除paraEnd
        //Acad::ErrorStatus es1 =pCurve->upgradeOpen() ;
        es = pCurve->extend(parm);//扩展起点
               
        es = pCurve->getParamAtDist(fabs(dist),dParam) ;
        pCurve->getEndParam(paraEnd) ;
        pCurve->getStartParam(paraSt) ;
        dParam = dParam-paraSt ;
        parm = paraEnd+dParam ;
        if(pLine)
                parm = parm/(paraEnd-paraSt) ;
        es =pCurve->extend(parm) ;//扩展终点
        pCurve->getEndParam(paraEnd) ;
        pCurve->getStartParam(paraSt) ;
        if(es!=Acad::eOk)
                return false ;
        return true ;
}

在arx202里,沿来一闭合路径,如一矩形,给一顶点朝下的等腰三角形生成实体,生成的实体比想要的实体小。可通过vpoint,通过与原面域比较发现。
各位若有兴趣可自已试试。路径不闭合,生成实体就不会变小。
另外,在实体做布尔运算时,更是想要的实体莫名其妙的没了,不知哪位网友总结出了这方面的规律。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-15 15:32:53 | 显示全部楼层
最初由 catwang_G 发布
[B]对不起,我记错了,是两AcGeCircArc求距离有问题。如:
AcGeCircArc2d arc1(AcGePoint2d(500,0),500,0.0,PI);
AcGeCircArc2d arc2(AcGePoint2d(1000,-500),AcGePoint2d(500,0),AcGePoint2d(1000,500));
double dis... [/B]


ACAD下面实体的关于图形几何学的所有算法都在AcGe几何库里面提供了。

1.求2几何曲线的最近距离
AcGeCurve3d::distanceTo(
    const AcGeCurve3d& curve,

    const AcGeTol& tol) const

curve        Any 3d curve
tol        Tolerance

Returns the distance between the closest points between this curve and the input curve.

2.求2几何曲线的最近距离的点
void

getClosestPointTo(

const AcGeCurve3d& curve3d,

AcGePointOnCurve3d& pntOnThisCrv,

AcGePointOnCurve3d& pntOnOtherCrv,

const AcGeTol& tol = AcGeContext::gTol) const;

curve3d Input any 3D curve
pntOnThisCrv Output closest point on this curve
pntOnOtherCrv Output closest point on input curve
tol Input tolerance

Finds the closest points between this curve and the input curve. This function is the same as closestPointTo(), except the closest points are returned as AcGePointOnCurve3d objects.

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

使用道具 举报

发表于 2003-8-15 16:21:13 | 显示全部楼层

可以考虑取出关键信息,自己求交点么

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

使用道具 举报

发表于 2003-8-17 20:37:09 | 显示全部楼层

arx202? 是哪个版本?

最初由 catwang_G 发布
[B]对不起,我记错了,是两AcGeCircArc求距离有问题。如:
AcGeCircArc2d arc1(AcGePoint2d(500,0),500,0.0,PI);
AcGeCircArc2d arc2(AcGePoint2d(1000,-500),AcGePoint2d(500,0),AcGePoint2d(1000,500));
double dis... [/B]


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

使用道具 举报

 楼主| 发表于 2003-8-19 10:07:42 | 显示全部楼层
Echoyin ,我当然知道这两种函数最终实现是一样的,我的意思就是两个AcGeCircArc求最近点,这种函数就出错!我的例子就在后面。
arx202是对应r14的开发包。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 02:40 , Processed in 0.198186 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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