找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1017|回复: 6

[编程申请]:如何用简单的办法将一条曲线(AcDbPolyline)内部的顶点顺序逆向!

[复制链接]
发表于 2004-3-12 19:38:41 | 显示全部楼层 |阅读模式

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

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

×
如何用简单的办法将 一条曲线(AcDbPolyline)内部的顶点顺序逆向!注意的是中间若是有圆弧段,要保持凸度不变!不知谁有好的办法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-12 19:59:14 | 显示全部楼层

Re: [编程申请]:如何用简单的办法将一条曲线(AcDbPolyline)内部的顶点顺序逆向!

最初由 DARCY 发布
[B]如何用简单的办法将 一条曲线(AcDbPolyline)内部的顶点顺序逆向!注意的是中间若是有圆弧段,要保持凸度不变!不知谁有好的办法? [/B]


首先你把AcDbCurve类对象转换成AcGeCurve3d 几何对象,然后利用

  1. [php]
  2. AcGeCurve3d::reverseParam Function AcGeCurve3d &

  3. reverseParam();

  4. Reverses the parametric direction of the curve. The point set of the curve
  5. is unchanged, but the direction of the curve is reversed.

  6. [/php]


把曲线的参数反向,最后在把AcGeCurve3d转换回AcDbCurve就达到了把曲线“反向”的目的。

注意的是,上面的方法对AcDbCurve都适用,不仅仅是AcDbPolyline

DB曲线转换成GE曲线模型,论坛以前贴过代码。你可以搜索下。

对于曲线类的应用,大家都试试到AcGeCurve2d,AcGeCurve3d里面去找找方法,ARX提供了足够的数学支持对于曲线对象。AcGe几何类提供了比AcDb实体更多的数学方法。

下面是XDRX API里面,把曲线转向的函数的部分代码:

  1. [font=courier]
  2. if (pLw=AcDbPolyline::cast(pCurve))
  3.         {
  4.                 AcGeCurve2d *pGe;
  5.                 if (Acad::eOk==XdDbUtils::convertPolylineToGeCurve(pLw,pGe))
  6.                 {
  7.                         pGe->reverseParam();
  8.                         if (Acad::eOk==XdDbUtils::convertGeCurveToPolyline(pGe,pLw))
  9.                         {
  10.                                 delete pGe;
  11.                                 if (pCurve->upgradeOpen()==Acad::eOk)
  12.                                 {
  13.                                         pCurve->handOverTo(pLw);
  14.                                         delete pCurve;
  15.                                         pCurve=(AcDbCurve *)pLw;
  16.                                         ads_rett();
  17.                                 }
  18.                         }
  19.                         else
  20.                                 delete pGe;
  21.                 }
  22.         }
  23. [/font]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-13 22:17:31 | 显示全部楼层
怎样把AcGeCurve3d转换回AcDbCurve及把AcDbCurve类对象转换成AcGeCurve3d 几何对象,请赐教
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-13 23:38:38 | 显示全部楼层
最初由 xux4618 发布
[B]怎样把AcGeCurve3d转换回AcDbCurve及把AcDbCurve类对象转换成AcGeCurve3d 几何对象,请赐教 [/B]



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

使用道具 举报

 楼主| 发表于 2004-3-15 13:32:06 | 显示全部楼层
谢谢斑竹!  其实这个思路我有,但我觉得若是此函数在一个程序中要被调用好多次,这样来回转化好像不太好,所以我试着看能否通过“AcDbPolyline”本身的成员函数,用自己的算法来实现此功能:) 我再试试,看有否结果!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-15 17:15:16 | 显示全部楼层 |阅读模式

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

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

×
最初由 DARCY 发布
[B]谢谢斑竹!  其实这个思路我有,但我觉得若是此函数在一个程序中要被调用好多次,这样来回转化好像不太好,所以我试着看能否通过“AcDbPolyline”本身的成员函数,用自己的算法来实现此功能:) 我再试试,看有否结果... [/B]



使用AcGe几何库应该是最稳定和高效的方法了,因为算法ADESK替我们做好了。

如果自己写算法,稳定上肯定要不如AcGe的。而且在适用的面上也不如AcGe来的周到,以后自己的维护上要花精力更多。

AcGe对象是纯数学模型,在对象上(属性和方法)对内存的占用上要比AcDb对象要小的多,因为AcDb对象额外的属性和方法要很多,比如层属性,颜色属性等等。这些都是直接利用AcGe对象比AcDb对象效率更高的地方。DB对象到GE对象的转换“损失”点的,在GE对象的运算上要弥补甚至更高效的。

另外,现在的机器,遍历一个几十万实体的图形数据库,也仅仅0.0几秒的时间,对象的来回转换顶多就几百个“时钟周期”而已。一个时钟周期是机器上G主频的倒数,C++在一定程度上效率还要不如C,这是面向对象程序语言必然的,那我们是不是在写程序时要考虑C++的不好?

写程序稳定是第一位的,多使用现成的库,虽然往复调用浪费了一些时间,但是和自己去写,调试BUG的代价要好的多。

一点个人见解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2004-3-18 11:08:43 | 显示全部楼层
斑竹:我发现按您提供的思路我试了一下好像不行!
  我没查出错误,而且按文档说明好像也不行。
AcGeCurve2d&
reverseParam();
Reverses the parametric direction of the curve. The point set of the curve is unchanged, but the direction of the curve is reversed.
代码如下:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 15:04 , Processed in 0.442536 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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