找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 911|回复: 9

[研讨] 关于AcDbEllipse转换为AcGeEllipArc3d

[复制链接]
发表于 2017-3-7 09:44:27 | 显示全部楼层 |阅读模式

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

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

×
关于AcDbEllipse转换为AcGeEllipArc3d,
转换代码如下
个人认为没什么错误,但是转换后起点、终点都不对。难道AcGeEllipArc3d的这个构造函数有Bug
====以下代码供测试讨论==========================================

ads_name eName;
ads_point pt;

if( RTNORM != acedEntSel(_T("\nPlease select a Ellipse "), eName, pt ))
    return;

AcDbObjectId id;
acdbGetObjectId( id, eName );
AcDbObjectPointer <AcDbEllipse> pDbCrv(id, AcDb::kForRead);
AcGeEllipArc3d *pGeCrv =  new AcGeEllipArc3d(
    pDbCrv->center(),
    pDbCrv->majorAxis(),
    pDbCrv->minorAxis(),
    pDbCrv->majorRadius(),
    pDbCrv->minorRadius(),
    pDbCrv->startAngle(),
    pDbCrv->endAngle()
    );
AcGePoint3d ptSta= pGeCrv->startPoint();
XXX::addPoint(ptSta);//点加入数据库,自行替换
AcGePoint3d ptEnd= pGeCrv->endPoint();
XXX::addPoint(ptEnd);//点加入数据库,自行替换
delete pGeCrv;
pGeCrv = NULL;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-3-7 09:51:03 | 显示全部楼层
pDbCrv->startAngle(),
pDbCrv->endAngle()

你改成
double startParam,endParam;
pDbCrv->getStartParam(startParam);
pDbCrv->getEndParam(endParam);

用 startParam,endParam替换你构造函数里面最后的那两个起始角和终止角,

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

使用道具 举报

 楼主| 发表于 2017-3-7 10:05:25 | 显示全部楼层

果然可以了,晕哦,头文件里写的是startAngle, endAngle,误导。我晕哦。
谢谢大神。

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

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-3-7 10:28:05 | 显示全部楼层
本帖最后由 LoveArx 于 2017-3-7 10:29 编辑

椭圆参数和角度的关系比较特别,不像圆和弧, 角度等于参数的

椭圆弧定义有个参数角的概念,角度和参数的关系用 pElli->paramAtAngle(), pElli->angleAtParam()得到,椭圆的某个角度要用上面的方法得到参数,他们不一定相等。

椭圆几何实体定义里面的角度是参数角。

看图

搜狗截图20170307101211.png

下面用 XDRX API 验证下关系


标注: e
命令: (setq startAng (xdrx_getpropertyvalue (car (entsel)) "startangle"))

选择对象: 6.00726 起始角

命令: (angtos 6.00726)
"344"   起始角度344°


命令: (setq startAng (xdrx_getpropertyvalue (car (entsel)) "endangle"))

选择对象: 9.9977 终止角

命令: (angtos 9.9977)
"213" 终止角度213°



命令: (setq startParam (xdrx_getpropertyvalue (car (entsel)) "startParam"))

选择对象: 5.73235  起始参数

命令: (setq endParam (xdrx_getpropertyvalue (car (entsel)) "endParam"))

选择对象: 10.3751 终止参数

命令: (setq sPa (xdrx_getpropertyvalue (car (entsel)) "paramAtAngle" startang))

选择对象: 5.73235 起始参数角


命令: (setq ePa (xdrx_getpropertyvalue (car (entsel)) "paramAtAngle" endang))

选择对象: 10.3751 终止参数角



可见:椭圆弧的参数值和参数角是一样的,起始参数和终止参数不等于 起始角和终止角。


所以,构建椭圆弧的时候,要用 参数值。


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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2017-3-8 10:34:04 | 显示全部楼层

请问一下大师,在起终点相同的情况下  AcDbLine的起始参数,结束参数,
                                                           与AcGeLineSeg3d的起始参数,结束参数
                                                            是否是不一样的呢?根据我测试好像是不一样的,不知道我是否有错。

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

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-3-8 10:43:54 | 显示全部楼层

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-3-8 10:59:09 | 显示全部楼层
XDRX API 几何库测试了下

命令: (setq e (entlast))
<图元名: -262398>

命令: (xdrx_getpropertyvalue e "startparam" "endparam") DB曲线实体
(0.0 4104.01)

命令: (setq g (xdge::constructor e))  几何实体
<图元名: 1b2c22e0>

命令: (xdge::getpropertyvalue g "startparam" "endparam") 几何参数值
(0.0 1.0)

命令: (setq spt (xdrx_getpropertyvalue e "startpoint" "endpoint")) 起点、端点
((16516.0 4128.22 0.0) (20276.5 5771.89 0.0))

命令: (xdge::getpropertyvalue g "paramof" (car spt)) 几何实体求起点参数
0.0

命令: (xdge::getpropertyvalue g "paramof" (last spt)) 几何实体求终点点参数
1.0
用AcGeInterval 验证

命令: (setq gi (xdge::getpropertyvalue g "getinterval"))
(<图元名: 1b2c4bb0> (16516.0 4128.22 0.0) (20276.5 5771.89 0.0))

命令: (xdge::getpropertyvalue (car gi) "lowerbound")
0.0
命令: (xdge::getpropertyvalue (car gi) "upperbound")
1.0


可以看出来,DB直线实体参数值是跟长度相关
几何实体AcGeLineSeg3d参数值区间是 0-1.0
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-11 01:51:47 | 显示全部楼层

研究了一下,
现在已经明白了AcDbEllipse、AcGeEllipArc3d两者的角度关系,
AcDbEllipse的起始角结束角,指向的点为椭圆上的点。
而AcGeEllipArc3d的起始角结束角,指向的点为 椭圆上的点  投影到 以椭圆长轴为半径画圆,圆上的点。
见图。

GE椭圆与DB椭圆的角度区别

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 22:06 , Processed in 0.316219 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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