找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3906|回复: 11

[ARX程序]:如何把acadpolyline转换为acgepolyline2d?

[复制链接]
发表于 2002-9-22 09:50:09 | 显示全部楼层 |阅读模式

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

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

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

已领礼包: 145个

财富等级: 日进斗金

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

使用道具 举报

 楼主| 发表于 2002-9-22 16:45:53 | 显示全部楼层
XD:我看了以前的讨论,发现少了一个函数convertPolylineToGeCurve()?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-22 16:52:00 | 显示全部楼层
最初由 z954134 发布
[B]XD:我看了以前的讨论,发现少了一个函数convertPolylineToGeCurve()? [/B]


给大家贴过一个,而且是最全的,所有的AcDbCurve曲线转换成对应AcGeCurve 的函数:

去看下下面的帖子:

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

使用道具 举报

 楼主| 发表于 2002-9-22 18:33:57 | 显示全部楼层
这个帖子中缺少XdDbUtils::convertPolylineToGeCurve(pPoly,pGeCurve)的实现啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-22 19:34:34 | 显示全部楼层
最初由 z954134 发布
[B]这个帖子中缺少XdDbUtils::convertPolylineToGeCurve(pPoly,pGeCurve)的实现啊? [/B]


看下面,遍历AcDbPolyline每个顶点,然后得到该段的简单的几何实体,添加到VOID数组里面,最后如果数组里面是一个实体,直接得到,如果有多个段,那么得到:AcGeCompositeCurve2d类对象


  1. [FONT=courier new]
  2. //转换AcDbPolyline to GeCurve2d
  3. Acad::ErrorStatus XdDbUtils::convertPolylineToGeCurve(AcDbPolyline* pPoly, AcGeCurve2d*& pGeCurve)
  4. {
  5.         AcGeVector3d normal;
  6.         double elevation;
  7.         int nSegs;
  8.         AcGeLineSeg2d *pLine;
  9.         AcGeLineSeg2d line;
  10.         AcGeCircArc2d *pArc;
  11.         AcGeCircArc2d arc;
  12.         AcGeVoidPointerArray geCurves;
  13.        
  14.         normal = pPoly->normal();
  15.         elevation = pPoly->elevation();
  16.         nSegs = pPoly->numVerts() - 1;
  17.        
  18.         for(int i = 0; i < nSegs; i++)
  19.         {
  20.                
  21.                 if(pPoly->segType(i) == AcDbPolyline::kLine)
  22.                 {
  23.                         pPoly->getLineSegAt(i, line);
  24.                         pLine = new AcGeLineSeg2d(line);
  25.                         geCurves.append(pLine);
  26.                 }
  27.                 else if(pPoly->segType(i) == AcDbPolyline::kArc)
  28.                 {
  29.                         pPoly->getArcSegAt(i, arc);
  30.                         pArc = new AcGeCircArc2d(arc);
  31.                         geCurves.append( pArc );
  32.                 }
  33.         }// for
  34.        
  35.         if(geCurves.length() == 1)
  36.         {
  37.                 pGeCurve = (AcGeCurve2d*)(geCurves[0]);
  38.         }
  39.         else
  40.         {
  41.                 pGeCurve = new AcGeCompositeCurve2d(geCurves);
  42.         }
  43.         return Acad::eOk;
  44. }
  45. //转换AcDbPolyline to GeCurve3d
  46. Acad::ErrorStatus XdDbUtils::convertPolylineToGeCurve(AcDbPolyline* pPoly, AcGeCurve3d*& pGeCurve)
  47. {
  48.         AcGeVector3d normal;
  49.         double elevation;
  50.         int nSegs;
  51.         AcGeLineSeg3d *pLine;
  52.         AcGeLineSeg3d line;
  53.         AcGeCircArc3d *pArc;
  54.         AcGeCircArc3d arc;
  55.         AcGeVoidPointerArray geCurves;
  56.        
  57.         normal = pPoly->normal();
  58.         elevation = pPoly->elevation();
  59.         nSegs = pPoly->numVerts() - 1;
  60.        
  61.         for(int i = 0; i < nSegs; i++)
  62.         {
  63.                
  64.                 if(pPoly->segType(i) == AcDbPolyline::kLine)
  65.                 {
  66.                         pPoly->getLineSegAt(i, line);
  67.                         pLine = new AcGeLineSeg3d(line);
  68.                         geCurves.append(pLine);
  69.                 }
  70.                 else if(pPoly->segType(i) == AcDbPolyline::kArc)
  71.                 {
  72.                         pPoly->getArcSegAt(i, arc);
  73.                         pArc = new AcGeCircArc3d(arc);
  74.                         geCurves.append( pArc );
  75.                 }
  76.         }// for
  77.        
  78.         if(geCurves.length() == 1)
  79.         {
  80.                 pGeCurve = (AcGeCurve3d*)(geCurves[0]);
  81.         }
  82.         else
  83.         {
  84.                 pGeCurve = new AcGeCompositeCurve3d(geCurves);
  85.         }
  86.         return Acad::eOk;
  87. }
  88. [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2002-9-25 12:26:04 | 显示全部楼层
我转换fit拟合生成的2dpolyline时很正常,但转换用s拟合生成的出错,看了以前的讨论,是不是此类拟合生成的实体要先转换为acdbspline,然后在转换
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-25 18:36:25 | 显示全部楼层
最初由 z954134 发布
[B]我转换fit拟合生成的2dpolyline时很正常,但转换用s拟合生成的出错,看了以前的讨论,是不是此类拟合生成的实体要先转换为acdbspline,然后在转换 [/B]


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

使用道具 举报

 楼主| 发表于 2002-9-26 19:33:02 | 显示全部楼层
我现在的目的是,选择一条2dpolyline,然后输出这条线上的坐标点,为了不失真,我需要按一定的玄高比,来决定输出。本来acgecurve2d中有一个getsamplepoint函数,可以达到目的,但现在有的2dpolyline不能生成acgecurve2d,我不知怎么办才好????
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-26 19:48:25 | 显示全部楼层
最初由 z954134 发布
[B]我现在的目的是,选择一条2dpolyline,然后输出这条线上的坐标点,为了不失真,我需要按一定的玄高比,来决定输出。本来acgecurve2d中有一个getsamplepoint函数,可以达到目的,但现在有的2dpolyline不能生成acgecur... [/B]


上面不远处的帖子,就提供了AcDbPolyline---->AcGeCurve2d,3d的转换函数啊。

如果你的2dPolyline是简单,或者FIT的,可以通过AcDbPolyline::convertFrom(...)把2DPOLY转换成LWPOLYLINE,然后用上面的函数转换几何实体,然后求“样本点”。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 20:27 , Processed in 0.456067 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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