找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3212|回复: 15

[求助] 关于根据指定半径绘制和指定的两个圆弧相切的圆弧计算问题

[复制链接]

已领礼包: 344个

财富等级: 日进斗金

发表于 2014-9-23 12:40:22 | 显示全部楼层 |阅读模式

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

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

×
  1. //根据指定半径绘制和指定的两个圆弧相切的圆弧
  2. static void XLRXAPI_ArcTan(void)
  3. {
  4.   ads_name e1,e2;
  5.   AcGePoint3d p1,p2;
  6.   AcDbObjectId Id1,Id2;
  7.   AcDbEntity *pEnt1,*pEnt2;
  8.   AcDbArc *pArc1,*pArc2;
  9. Loop1:
  10.   if (RTNORM != acedEntSel(_T("\n选择第一条圆弧:"),e1,asDblArray(p1))) return;
  11.   if (Acad::eOk != acdbGetObjectId(Id1,e1)) return;
  12.   if (Acad::eOk != acdbOpenObject(pEnt1,Id1,AcDb::kForRead)) return;
  13.   if (!pEnt1->isKindOf(AcDbArc::desc()))
  14.   {
  15.     acutPrintf(_T("\n选择的不是圆弧,请重新选择圆弧:"));
  16.     pEnt1->close();
  17.     goto Loop1;
  18.   }
  19.   pArc1 = AcDbArc::cast(pEnt1);
  20. Loop2:
  21.   if (RTNORM != acedEntSel(_T("\n选择第一条圆弧:"),e2,asDblArray(p2)))
  22.     {
  23.       pEnt1->close();
  24.       return;
  25.   }
  26.   if (Acad::eOk != acdbGetObjectId(Id2,e2)) {
  27.     pEnt1->close();
  28.     return;
  29.   }
  30.   if (Acad::eOk != acdbOpenObject(pEnt2,Id2,AcDb::kForRead)){
  31.     pEnt1->close();
  32.     return;
  33.   }
  34.   if (!pEnt2->isKindOf(AcDbArc::desc()))
  35.   {
  36.     acutPrintf(_T("\n选择的不是圆弧,请重新选择圆弧:"));
  37.     pEnt2->close();
  38.     goto Loop2;
  39.   }
  40.   pArc2 = AcDbArc::cast(pEnt2);
  41.   double Rad;
  42.   if (RTNORM != acedGetDist(asDblArray(p1),_T("\n半径:"),&Rad))
  43.   {
  44.     pEnt1->close();
  45.     pEnt2->close();
  46.     return;
  47.   }
  48.   //圆弧转几何对象
  49.   AcGeCircArc3d *pGeCircArc3d1 = new AcGeCircArc3d(pArc1->center(),
  50.     pArc1->normal(),
  51.     pArc1->normal().perpVector(),
  52.     pArc1->radius(),
  53.     pArc1->startAngle(),
  54.     pArc1->endAngle());
  55.   AcGeCircArc3d *pGeCircArc3d2 = new AcGeCircArc3d(pArc2->center(),
  56.     pArc2->normal(),
  57.     pArc2->normal().perpVector(),
  58.     pArc2->radius(),
  59.     pArc2->startAngle(),
  60.     pArc2->endAngle());
  61.   Adesk::Boolean bSuccess;
  62.   double param1,param2;
  63.   pArc1->getClosestPointTo(p1,p1);
  64.   param1 = pGeCircArc3d1->paramOf(p1);
  65.   pArc2->getClosestPointTo(p2,p2);
  66.   param2 = pGeCircArc3d2->paramOf(p2);

  67.   AcGeCircArc3d *pGeNewCircArc3d = new AcGeCircArc3d;
  68.   pGeNewCircArc3d->set(*pGeCircArc3d1,*pGeCircArc3d2,Rad,param1,param2,bSuccess);
  69.   if (bSuccess)
  70.   {
  71.     AcGeCircArc2d *pGe2d = (AcGeCircArc2d *)pGeNewCircArc3d;
  72.     double refA = pGeNewCircArc3d->refVec().angleTo(AcGeVector3d::kXAxis);
  73.     //以下计算圆弧AcDbArc的代码算法有问题???
  74.     if (pGe2d->isClockWise())
  75.     {
  76.       //顺时针
  77.       acutPrintf(_T("\n顺时针..."));
  78.       refA = pGeNewCircArc3d->refVec().negate().angleTo(AcGeVector3d::kXAxis);
  79.       AcDbArc *pArc = new AcDbArc(pGeNewCircArc3d->center(),
  80.         pGeNewCircArc3d->normal().negate(),
  81.         pGeNewCircArc3d->radius(),
  82.       pGeNewCircArc3d->startAng()+refA,
  83.       pGeNewCircArc3d->endAng()+refA);
  84.       //添加到数据库
  85.       CCreateEnt::PostToSpace(pArc);
  86.     }
  87.     else
  88.     {
  89.       //逆时针
  90.       acutPrintf(_T("\n逆时针..."));
  91.       AcDbArc *pArc = new AcDbArc(pGeNewCircArc3d->center(),
  92.         pGeNewCircArc3d->normal(),
  93.         pGeNewCircArc3d->radius(),
  94.         pGeNewCircArc3d->startAng()+refA,
  95.         pGeNewCircArc3d->endAng()+refA);
  96.       //添加到数据库
  97.       CCreateEnt::PostToSpace(pArc);
  98.     }
  99.   }
  100.   pEnt1->close();
  101.   pEnt2->close();
  102.   delete pGeNewCircArc3d;
  103.   delete pGeCircArc3d1;
  104.   delete pGeCircArc3d2;
  105. }

以上代码计算的圆弧起始角度和终点角度的算法不正确,望各位高手给解决下!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-23 13:33:21 | 显示全部楼层
如:


  1.                 if (geArc.isClockWise())
  2.                 {
  3.                         pArc = new AcDbArc(center, pPoly->normal(), geArc.radius(), end, start);
  4.                 }
  5.                 else
  6.                 {
  7.                         pArc = new AcDbArc(center, pPoly->normal(), geArc.radius(), start, end);
  8.                 }

点评

我把实体转换了一下,解决210组码是-1的问题,好像这不是最终解决之道,应该有其他办法吧,只是我实在搞不明白!  详情 回复 发表于 2014-9-23 14:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-23 12:52:25 | 显示全部楼层
怎么不正确,是两个角互换了?

点评

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2014-9-23 12:54:03 | 显示全部楼层
XDSoft 发表于 2014-9-23 12:52
怎么不正确,是两个角互换了?

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-23 12:56:37 | 显示全部楼层
AcGeCircArc2d *pGe2d = (AcGeCircArc2d *)pGeNewCircArc3d; 这样做肯定不行,2D 和 3D不能直接转换,要重新构造。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-23 12:57:04 | 显示全部楼层
AcGeCircArc2d *pGe2d = (AcGeCircArc2d *)pGeNewCircArc3d; 这样做肯定不行,2D 和 3D不能直接转换,要重新构造。

点评

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2014-9-23 13:01:36 | 显示全部楼层
XDSoft 发表于 2014-9-23 12:57
AcGeCircArc2d *pGe2d = (AcGeCircArc2d *)pGeNewCircArc3d; 这样做肯定不行,2D 和 3D不能直接转换,要重 ...

搞定了,这样就没问题了!
  1. static void XLRXAPI_ArcTan(void)
  2. {
  3.         ads_name e1,e2;
  4.         AcGePoint3d p1,p2;
  5.         AcDbObjectId Id1,Id2;
  6.         AcDbEntity *pEnt1,*pEnt2;
  7.         AcDbArc *pArc1,*pArc2;
  8. Loop1:
  9.         if (RTNORM != acedEntSel(_T("\n选择第一条圆弧:"),e1,asDblArray(p1))) return;
  10.         if (Acad::eOk != acdbGetObjectId(Id1,e1)) return;
  11.         if (Acad::eOk != acdbOpenObject(pEnt1,Id1,AcDb::kForRead)) return;
  12.         if (!pEnt1->isKindOf(AcDbArc::desc()))
  13.         {
  14.                 acutPrintf(_T("\n选择的不是圆弧,请重新选择圆弧:"));
  15.                 pEnt1->close();
  16.                 goto Loop1;
  17.         }
  18.         pArc1 = AcDbArc::cast(pEnt1);
  19. Loop2:
  20.         if (RTNORM != acedEntSel(_T("\n选择第一条圆弧:"),e2,asDblArray(p2)))
  21.                 {
  22.                         pEnt1->close();
  23.                         return;
  24.         }
  25.         if (Acad::eOk != acdbGetObjectId(Id2,e2)) {
  26.                 pEnt1->close();
  27.                 return;
  28.         }
  29.         if (Acad::eOk != acdbOpenObject(pEnt2,Id2,AcDb::kForRead)){
  30.                 pEnt1->close();
  31.                 return;
  32.         }
  33.         if (!pEnt2->isKindOf(AcDbArc::desc()))
  34.         {
  35.                 acutPrintf(_T("\n选择的不是圆弧,请重新选择圆弧:"));
  36.                 pEnt2->close();
  37.                 goto Loop2;
  38.         }
  39.         pArc2 = AcDbArc::cast(pEnt2);
  40.         double Rad;
  41.         if (RTNORM != acedGetDist(asDblArray(p1),_T("\n半径:"),&Rad))
  42.         {
  43.                 pEnt1->close();
  44.                 pEnt2->close();
  45.                 return;
  46.         }
  47.         //圆弧转几何对象
  48.         AcGeCircArc3d *pGeCircArc3d1 = new AcGeCircArc3d(pArc1->center(),
  49.                 pArc1->normal(),
  50.                 pArc1->normal().perpVector(),
  51.                 pArc1->radius(),
  52.                 pArc1->startAngle(),
  53.                 pArc1->endAngle());
  54.         AcGeCircArc3d *pGeCircArc3d2 = new AcGeCircArc3d(pArc2->center(),
  55.                 pArc2->normal(),
  56.                 pArc2->normal().perpVector(),
  57.                 pArc2->radius(),
  58.                 pArc2->startAngle(),
  59.                 pArc2->endAngle());
  60.         Adesk::Boolean bSuccess;
  61.         double param1,param2;
  62.         pArc1->getClosestPointTo(p1,p1);
  63.         param1 = pGeCircArc3d1->paramOf(p1);
  64.         pArc2->getClosestPointTo(p2,p2);
  65.         param2 = pGeCircArc3d2->paramOf(p2);

  66.         AcGeCircArc3d *pGeNewCircArc3d = new AcGeCircArc3d;
  67.         pGeNewCircArc3d->set(*pGeCircArc3d1,*pGeCircArc3d2,Rad,param1,param2,bSuccess);
  68.         if (bSuccess)
  69.         {
  70.                 AcGePlane plane = AcGePlane(pGeNewCircArc3d->center(),pGeNewCircArc3d->normal());
  71.                 AcGeVector3d refVec = pGeNewCircArc3d->refVec();
  72.                 double refA = refVec.angleOnPlane(plane);
  73.                 AcDbArc *pArc = new AcDbArc(pGeNewCircArc3d->center(),
  74.                                                          pGeNewCircArc3d->normal(),
  75.                                                          pGeNewCircArc3d->radius(),
  76.                                                  pGeNewCircArc3d->startAng()+refA,
  77.                                                  pGeNewCircArc3d->endAng()+refA);
  78.                                                  //添加到数据库
  79.                                                  CCreateEnt::PostToSpace(pArc);
  80.         }
  81.         pEnt1->close();
  82.         pEnt2->close();
  83.         delete pGeNewCircArc3d;
  84.         delete pGeCircArc3d1;
  85.         delete pGeCircArc3d2;
  86. }

点评

同时带来的副作用是生成的圆弧实体210组码是‘(0 0 -1.0)!  详情 回复 发表于 2014-9-23 13:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2014-9-23 13:04:27 | 显示全部楼层
牢固 发表于 2014-9-23 13:01
搞定了,这样就没问题了!

同时带来的副作用是有些生成的圆弧实体210组码是‘(0 0 -1.0)!如何解决?

点评

构造2D GE ARC时候,参数里面多个isClockWise , 你构造时候给值就行了。 顺逆时针两个构造,一个TURE,一个FALSE 顺时针的时候,startAng endAng  详情 回复 发表于 2014-9-23 13:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-23 13:18:59 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2014-9-23 13:21 编辑
牢固 发表于 2014-9-23 13:04
同时带来的副作用是有些生成的圆弧实体210组码是‘(0 0 -1.0)!如何解决?


这几天测试XdGe函数也遇到这个问题,是顺时针圆弧引起的,自己要转换下

你打印起始角、终止角看看

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-23 13:24:40 | 显示全部楼层
牢固 发表于 2014-9-23 13:04
同时带来的副作用是有些生成的圆弧实体210组码是‘(0 0 -1.0)!如何解决?

构造2D GE ARC时候,参数里面多个isClockWise , 你构造时候给值就行了。 顺逆时针两个构造,一个TURE,一个FALSE

构造DB ARC的时候,顺时针时候,把 startAng 和 endAng 换下。

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2014-9-23 14:32:35 | 显示全部楼层

我把实体转换了一下,解决210组码是-1的问题,好像这不是最终解决之道,应该有其他办法吧,只是我实在搞不明白!
  1. //根据选择的两个圆弧和半径绘制与其相切的圆弧
  2. static void XLRXAPI_ArcTan(void)
  3. {
  4.         ads_name e1,e2;
  5.         AcGePoint3d p1,p2;
  6.         AcDbObjectId Id1,Id2;
  7.         AcDbEntity *pEnt1,*pEnt2;
  8.         AcDbArc *pArc1,*pArc2;
  9. Loop1:
  10.         if (RTNORM != acedEntSel(_T("\n选择第一条圆弧:"),e1,asDblArray(p1))) return;
  11.         if (Acad::eOk != acdbGetObjectId(Id1,e1)) return;
  12.         if (Acad::eOk != acdbOpenObject(pEnt1,Id1,AcDb::kForRead)) return;
  13.         if (!pEnt1->isKindOf(AcDbArc::desc()))
  14.         {
  15.                 acutPrintf(_T("\n选择的不是圆弧,请重新选择圆弧:"));
  16.                 pEnt1->close();
  17.                 goto Loop1;
  18.         }
  19.         pArc1 = AcDbArc::cast(pEnt1);
  20. Loop2:
  21.         if (RTNORM != acedEntSel(_T("\n选择第一条圆弧:"),e2,asDblArray(p2)))
  22.                 {
  23.                         pEnt1->close();
  24.                         return;
  25.         }
  26.         if (Acad::eOk != acdbGetObjectId(Id2,e2)) {
  27.                 pEnt1->close();
  28.                 return;
  29.         }
  30.         if (Acad::eOk != acdbOpenObject(pEnt2,Id2,AcDb::kForRead)){
  31.                 pEnt1->close();
  32.                 return;
  33.         }
  34.         if (!pEnt2->isKindOf(AcDbArc::desc()))
  35.         {
  36.                 acutPrintf(_T("\n选择的不是圆弧,请重新选择圆弧:"));
  37.                 pEnt2->close();
  38.                 goto Loop2;
  39.         }
  40.         pArc2 = AcDbArc::cast(pEnt2);
  41.         double Rad;
  42.         if (RTNORM != acedGetDist(asDblArray(p1),_T("\n半径:"),&Rad))
  43.         {
  44.                 pEnt1->close();
  45.                 pEnt2->close();
  46.                 return;
  47.         }
  48.         //圆弧转几何对象
  49.         AcGeCircArc3d *pGeCircArc3d1 = new AcGeCircArc3d(pArc1->center(),
  50.                 pArc1->normal(),
  51.                 pArc1->normal().perpVector(),
  52.                 pArc1->radius(),
  53.                 pArc1->startAngle(),
  54.                 pArc1->endAngle());
  55.         AcGeCircArc3d *pGeCircArc3d2 = new AcGeCircArc3d(pArc2->center(),
  56.                 pArc2->normal(),
  57.                 pArc2->normal().perpVector(),
  58.                 pArc2->radius(),
  59.                 pArc2->startAngle(),
  60.                 pArc2->endAngle());
  61.         Adesk::Boolean bSuccess;
  62.         double param1,param2;
  63.         pArc1->getClosestPointTo(p1,p1);
  64.         param1 = pGeCircArc3d1->paramOf(p1);
  65.         pArc2->getClosestPointTo(p2,p2);
  66.         param2 = pGeCircArc3d2->paramOf(p2);
  67.        
  68.         AcGeCircArc3d *pGeNewCircArc3d = new AcGeCircArc3d;
  69.         pGeNewCircArc3d->set(*pGeCircArc3d1,*pGeCircArc3d2,Rad,param1,param2,bSuccess);
  70.         if (bSuccess)
  71.         {
  72.                 AcGePlane plane = AcGePlane(pGeNewCircArc3d->center(),pGeNewCircArc3d->normal());
  73.                 AcGeVector3d refVec = pGeNewCircArc3d->refVec();
  74.                 double refA = refVec.angleOnPlane(plane);
  75.                 AcDbArc *pArc = new AcDbArc(pGeNewCircArc3d->center(),
  76.                                                          pGeNewCircArc3d->normal(),
  77.                                                          pGeNewCircArc3d->radius(),
  78.                                                  pGeNewCircArc3d->startAng()+refA,
  79.                                                  pGeNewCircArc3d->endAng()+refA);
  80.                 AcGeMatrix3d mat ;
  81.                 AcGeVector3d zAxis = pArc->normal();
  82.                 mat.entry[0][2] = zAxis.x;
  83.                 mat.entry[1][2] = zAxis.y;
  84.                 mat.entry[2][2] = zAxis.z;
  85.                 pArc->transformBy(mat);
  86.                 //添加到数据库
  87.                 CCreateEnt::PostToSpace(pArc);
  88.                                                
  89.         }
  90.         pEnt1->close();
  91.         pEnt2->close();
  92.         delete pGeNewCircArc3d;
  93.         delete pGeCircArc3d1;
  94.         delete pGeCircArc3d2;
  95. }

点评

应该让它在GE转成DB的时候,就是对的。判断GE数据,生成逆时针的DB  详情 回复 发表于 2014-9-23 14:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-23 14:45:55 | 显示全部楼层
牢固 发表于 2014-9-23 14:32
我把实体转换了一下,解决210组码是-1的问题,好像这不是最终解决之道,应该有其他办法吧,只是我实在搞 ...

应该让它在GE转成DB的时候,就是对的。判断GE数据,生成逆时针的DB

点评

现在这样就可以了:  详情 回复 发表于 2014-9-23 15:59
还没搞明白怎么算,还需要研究!  详情 回复 发表于 2014-9-23 14:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2014-9-23 14:47:18 | 显示全部楼层
XDSoft 发表于 2014-9-23 14:45
应该让它在GE转成DB的时候,就是对的。判断GE数据,生成逆时针的DB

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-23 14:49:55 | 显示全部楼层
牢固 发表于 2014-9-23 14:47
还没搞明白怎么算,还需要研究!

Ge 数据就是那样,转 Db 的时候 判断 isClockWise( 2d 才有)决定是否交换 startAng 和 endAng
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 14:32 , Processed in 0.486292 second(s), 66 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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