找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1311|回复: 19

[求助] [已解决]acgeboundblock3d是否对圆弧,竖方向的椭圆无效

[复制链接]

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-6-8 14:52:45 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 1121443108qaz 于 2018-6-8 16:12 编辑

用下述代码分别对直线,圆,圆弧,横方向和竖方向的椭圆测试得到如下结果,感觉不如entity::getGeomExtents,还是我哪里搞错了吗
static void xxxfMyGrouptest()
        {
                AcDbObjectId entId = CSSUtil::selectOne(L"请选择一条多段线");
                if (entId==AcDbObjectId::kNull)
                {
                        return;
                }
                AcGePoint3d minPt, maxPt;
                AcGeBoundBlock3d pBlock;
                AcGeCurve3d *pCurve3d;
                AcDbCurve* pCurve= NULL;
                ErrorStatus es =acdbOpenObject(pCurve, entId, AcDb::kForWrite);
                if (es!=Acad ::eOk)
                {
                        acutPrintf(L"\n%s", acadErrorStatusText(es));
                }
                es = pCurve->getAcGeCurve(pCurve3d);
                pBlock=pCurve3d->boundBlock();
                pBlock.getMinMaxPoints(minPt, maxPt);
                CPolylineUtil::AddRectangle(CConvertUtil::ToPoint2d(minPt),CConvertUtil::ToPoint2d(maxPt));
                pCurve->close();
        }
捕获.PNG
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-8 14:59:03 | 显示全部楼层

回帖奖励 +10 D豆

本帖最后由 newer 于 2018-6-8 15:01 编辑

适不适合去看它在哪个类,这个类包括它下面的子类都能用。

AcGeCurve3d::boundBlock , 说明只要父类是AcGeCurve3d,就一定可以用,你得不到结果,就说明你代码需要调整,这个思维一定要有。如果你能得到结果,那么它就是这样做的。也有结果不符合认知的,但极少,比如SPLINE。

点评

你能看到我贴的图吗?圆和多段线这些包围框都挺贴合的,圆弧和椭圆就差地很多  详情 回复 发表于 2018-6-8 15:14
是啊,能得到结果,但是这个结果不符合我认知。也不知道怎么调整,所以就想你们看看是不是我哪里搞错了。  详情 回复 发表于 2018-6-8 15:12
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-8 15:12:17 来自手机 | 显示全部楼层
newer 发表于 2018-6-8 14:59
适不适合去看它在哪个类,这个类包括它下面的子类都能用。

AcGeCurve3d::boundBlock , 说明只要父类是Ac ...

是啊,能得到结果,但是这个结果不符合我认知。也不知道怎么调整,所以就想你们看看是不是我哪里搞错了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-8 15:14:27 来自手机 | 显示全部楼层
newer 发表于 2018-6-8 14:59
适不适合去看它在哪个类,这个类包括它下面的子类都能用。

AcGeCurve3d::boundBlock , 说明只要父类是Ac ...

你能看到我贴的图吗?圆和多段线这些包围框都挺贴合的,圆弧和椭圆就差地很多

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-8 15:25:00 | 显示全部楼层
本帖最后由 newer 于 2018-6-8 15:26 编辑
1121443108qaz 发表于 2018-6-8 15:14
你能看到我贴的图吗?圆和多段线这些包围框都挺贴合的,圆弧和椭圆就差地很多

椭圆哪里不对了?
代码很简单,就是调用个方法,结果不符合,那就是ADESK自己的事,有一些,但不多,如果你深入用AcGe库的话。这时候,就自己想另外的代码去解决掉它。

点评

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-8 15:29:47 来自手机 | 显示全部楼层
newer 发表于 2018-6-8 15:25
椭圆哪里不对了?
代码很简单,就是调用个方法,结果不符合,那就是ADESK自己的事,有一些,但不多,如 ...

嗯嗯,好的。那个竖着放的椭圆其实左右两侧也没挨着的。

点评

你这个问题你可以换一个,用 orthoboundbox 就正确了,正交的盒子 下面是API写的LISP,测试,弧就像你说的,但椭圆正常。 [attachimg]78086[/attachimg] 下面LISP和你的ARX代码作用是一样的,LISP写就快多  详情 回复 发表于 2018-6-8 15:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-8 15:39:01 | 显示全部楼层
本帖最后由 newer 于 2018-6-8 16:11 编辑
1121443108qaz 发表于 2018-6-8 15:29
嗯嗯,好的。那个竖着放的椭圆其实左右两侧也没挨着的。

你这个问题你可以换一个,用 orthoBoundBlock 就正确了,正交的盒子

下面是API写的LISP,测试,弧就像你说的,但椭圆正常。

搜狗截图20180608153014.png

下面LISP和你的ARX代码作用是一样的,LISP写就快多了,如果你想深入了解AcGe库,同时还会LISP的话,最后用LISP去测试,LISP写的快。

  1. (defun c:tt ()
  2.   (if (and (setq e (car (xdrx_entsel
  3.                           "\n拾取一个曲线<退出>:"
  4.                           '((0 . "*LINE,ARC,ELLIPSE,CIRCLE"))
  5.                         )
  6.                    )
  7.            )
  8.            (setq g (xdge::constructor e))
  9.            (setq box (xdge::getpropertyvalue g "boundblock"))
  10.            (setq box1 (xdge::getpropertyvalue g "orthoboundblock"))
  11.            (setq pts1 (xdge::getpropertyvalue box "getMinMaxPoints"))
  12.            (setq pts2 (xdge::getpropertyvalue box1 "getMinMaxPoints"))
  13.       )
  14.     (progn (setq ln   (xdrx_line_make pts1)
  15.                  boxs (xdrx_entity_box ln)
  16.            )
  17.            (xdrx_polyline_make boxs t)
  18.            (xdrx_setpropertyvalue (entlast) "color" 2)
  19.            (xdrx_entity_delete ln)
  20.            (setq ln   (xdrx_line_make pts2)
  21.                  boxs (xdrx_entity_box ln)
  22.            )
  23.            (xdrx_polyline_make boxs t)
  24.            (xdrx_setpropertyvalue (entlast) "color" 1)
  25.            (xdrx_entity_delete ln)
  26.     )
  27.   )
  28.   (xdge::free g box box1)
  29.   (princ)
  30. )


点评

嗯嗯好的,我越看arx越觉得晓东的api非常好,不知道为什么圆弧的boundblock设计成那样,有什么用。  详情 回复 发表于 2018-6-8 15:54

评分

参与人数 1D豆 +5 收起 理由
1121443108qaz + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-8 15:54:29 来自手机 | 显示全部楼层
newer 发表于 2018-6-8 15:39
你这个问题你可以换一个,用 orthoboundbox 就正确了,正交的盒子

下面是API写的LISP,测试,弧就像你 ...

嗯嗯好的,我越看arx越觉得晓东的api非常好,不知道为什么圆弧的boundblock设计成那样,有什么用。

点评

是啊,LISP下面没有API解决不了的,除非ARX也解决不了,但在AUTOCAD下,这是不可能发生的事。 使用完API,再学ARX,会很容易上手,看上面的几何库函数就知道了,完全和ARX是一样的。 同样,会ARX,在用LISP,就更  详情 回复 发表于 2018-6-8 16:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-8 16:00:41 | 显示全部楼层
1121443108qaz 发表于 2018-6-8 15:54
嗯嗯好的,我越看arx越觉得晓东的api非常好,不知道为什么圆弧的boundblock设计成那样,有什么用。

是啊,LISP下面没有API解决不了的,除非ARX也解决不了,但在AUTOCAD下,这是不可能发生的事。
使用完API,再学ARX,会很容易上手,看上面的几何库函数就知道了,完全和ARX是一样的。
同样,会ARX,在用LISP,就更轻松了,LISP直接交互CAD,比ARX写代码的效率要高多了。

点评

嗯嗯,我把boundblock换成orthoboundblock后所有结果完全正确和getgeomextent是一样的,你那里圆弧还是有问题,说明arx2019改进了。  详情 回复 发表于 2018-6-8 16:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-8 16:07:59 来自手机 | 显示全部楼层
本帖最后由 1121443108qaz 于 2018-6-8 16:11 编辑
newer 发表于 2018-6-8 16:00
是啊,LISP下面没有API解决不了的,除非ARX也解决不了,但在AUTOCAD下,这是不可能发生的事。
使用完API ...

嗯嗯,我把boundblock换成orthoboundblock后所有结果完全正确和getgeomextent是一样的。

点评

AcDbCurve类的方法,都是AcGe做支撑的,AcGe提供的方法更多,也比AcDbCurve快,因为完全是内存数学、几何模型,没AcDb类额外的那些方法和属性,所以想要效率的话,尽量转AcGe去做。  详情 回复 发表于 2018-6-8 16:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-8 16:20:00 | 显示全部楼层
1121443108qaz 发表于 2018-6-8 16:07
嗯嗯,我把boundblock换成orthoboundblock后所有结果完全正确和getgeomextent是一样的。

AcDbCurve类的方法,都是AcGe做支撑的,AcGe提供的方法更多,也比AcDbCurve快,因为完全是内存数学、几何模型,没AcDb类额外的那些方法和属性,所以想要效率的话,尽量转AcGe去做。

点评

可是比如我这个获得边界框的函数,既然桌子公司也是用acge库做支撑,我们写为啥会比单纯用getgeomextent有效率呢?我的意思是acge库用在哪些情况下效率更高。不过acge库函数方法更多是真的。  详情 回复 发表于 2018-6-8 16:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-8 16:29:28 来自手机 | 显示全部楼层
newer 发表于 2018-6-8 16:20
AcDbCurve类的方法,都是AcGe做支撑的,AcGe提供的方法更多,也比AcDbCurve快,因为完全是内存数学、几何 ...

可是比如我这个获得边界框的函数,既然桌子公司也是用acge库做支撑,我们写为啥会比单纯用getgeomextent有效率呢?我的意思是acge库用在哪些情况下效率更高。不过acge库函数方法更多是真的。

点评

你怎么觉得你写的求包围盒比AcDbEntity::getGeomExtents()效率要高? 需要注意的是getGeomExtents 是 AcDbEntity下的,所以不是曲线的,你就得用它了。 有的时候你还需要改造它,因为它对SPLINE是不准确的,ARX论  详情 回复 发表于 2018-6-8 16:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-8 16:43:47 | 显示全部楼层
1121443108qaz 发表于 2018-6-8 16:29
可是比如我这个获得边界框的函数,既然桌子公司也是用acge库做支撑,我们写为啥会比单纯用getgeomextent ...

你怎么觉得你写的求包围盒比AcDbEntity::getGeomExtents()效率要高?
需要注意的是getGeomExtents 是 AcDbEntity下的,所以不是曲线的,你就得用它了。
有的时候你还需要改造它,因为它对SPLINE是不准确的,ARX论坛有SPLINE的求盒子的代码。对有些AcDbBlockReferences也不准确,这个论坛也有。所以你要写自己的盒子函数,要综合考虑这些组合起来。
另外,增强功能话,你还要加上任意方向的盒子,这个就要用矩阵,就像API的xdrx_entity_box, xdrx_points_box,

另外,有些时候你是必须用AcGe的,比如AcGeCurveCurveInt3d,AcGeCurveSurfInt,AcGeSurfSurfInt 求交函数就比AcDbEntity::IntersectWith()强大的不是一点半点,你能通过他们求Overlap, 能求出曲线自交点对应的两个参数,这些是IntersectWith做不到的。桌子把几何、数学相关图形几何学算法的人类知识都集成到了AcGe里面了。还有AcBr库也靠AcGe支撑,其他的还有AcGeInterval...等等都很重要。

点评

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-6-8 16:45:49 来自手机 | 显示全部楼层
newer 发表于 2018-6-8 16:43
你怎么觉得你写的求包围盒比AcDbEntity::getGeomExtents()效率要高?
需要注意的是getGeomExtents 是 Ac ...

好的,受教了,谢谢n版。

点评

有空去看看AcGeSetInterval,DB曲线的TRIM,BREAK,EXTEND等等都是用它实现的,你用它,会发现能更快的做出TRIM,BREAK,EXTEND做不到的东西。 还有,AcGeCurve3d::GetSamplePoints()...  详情 回复 发表于 2018-6-8 16:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-6-8 16:56:41 | 显示全部楼层
1121443108qaz 发表于 2018-6-8 16:45
好的,受教了,谢谢n版。

有空去看看AcGeSetInterval,DB曲线的TRIM,BREAK,EXTEND等等都是用它实现的,你用它,会发现能更快的做出TRIM,BREAK,EXTEND做不到的东西。
还有,AcGeCurve3d::GetSamplePoints()...

点评

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 11:13 , Processed in 0.542082 second(s), 74 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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