找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 709|回复: 5

[求助] arx写了个模拟join的命令,但是没达到效果,怎么才能达到我要的效果呢

[复制链接]

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-13 03:11:32 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 1121443108qaz 于 2018-7-13 10:55 编辑

如图,第一行是没做变更的,第二行是我用模仿的命令变更的,第三行是用PE,米,J得到的,第三行是我要的效果。公差是0.0005,文件已经上传了。想知道怎样才能得到第三行那样的效果,也就是延伸那样的效果。
  1. static void xxxMyGroupjoin()
  2.         {
  3.                 ads_name ss;
  4.                 TCHAR keyword[20];
  5.                 int rc = CSSUtil::GetSS(ss, keyword);
  6.                 if (rc != RTNORM)
  7.                 {
  8.                         return;
  9.                 }
  10.                 AcDbObjectIdArray entIds = CSSUtil::GetSsEntIds(ss);
  11.                 acedInitGet(RSG_NONEG, NULL);
  12.                 ads_real tolrence;
  13.                 rc = acedGetReal(L"\n请输入忽略距离<0.0005>:", &tolrence);
  14.                 switch (rc)
  15.                 {
  16.                 case RTERROR:
  17.                         return;
  18.                 case RTCAN:
  19.                         return;
  20.                 case RTNONE:
  21.                         tolrence = 0.0005;
  22.                 }
  23.                 bool isAllCurves = MyUtil::join(entIds, tolrence);
  24.                 if (isAllCurves != true)
  25.                 {
  26.                         acutPrintf(L"\n存在本程序处理不了的实体!");
  27.                 }
  28.                 acedSSFree(ss);
  29.         }
  30. bool MyUtil::topl(AcDbObjectIdArray& entIds, double tol /* = 0.0005 */)
  31. {
  32.         AcGeTol geTol;
  33.         geTol.setEqualPoint(tol);
  34.         bool isAllcurve = true;
  35.         AcArray<AcDbEntity*> pEnts;
  36.         AcDbEntity*pEnt = NULL;
  37.         int len = entIds.length();
  38.         for (int i = 0; i < len; i++)
  39.         {
  40.                 acdbOpenObject(pEnt, entIds.at(i), AcDb::kForWrite);
  41.                 pEnts.append(pEnt);
  42.         }
  43.         AcGeIntArray indexes;
  44.         
  45.         while (pEnts.length() != 0)
  46.         {
  47.                 AcDbPolyline* pPoly = NULL;
  48.                 pEnt = pEnts[0];
  49.                 pEnts = pEnts.removeFirst();
  50.                 AcGePoint2d pt1, pt2;
  51.                 if (!pEnt->isKindOf(AcDbLine::desc()) && !pEnt->isKindOf(AcDbPolyline::desc()) && !pEnt->isKindOf(AcDbArc::desc()))
  52.                 {
  53.                         pEnt->close();
  54.                         isAllcurve = false;
  55.                         continue;
  56.                 }
  57.                 else if (pEnt->isKindOf(AcDbLine::desc()))
  58.                 {
  59.                         AcDbLine* pLine = AcDbLine::cast(pEnt);
  60.                         pt1 = CConvertUtil::ToPoint2d(pLine->startPoint());
  61.                         pt2 = CConvertUtil::ToPoint2d(pLine->endPoint());
  62.                         pPoly = new AcDbPolyline(2);
  63.                         pPoly->addVertexAt(0, pt1);
  64.                         pPoly->addVertexAt(1, pt2);
  65.                 }
  66.                 else if (pEnt->isKindOf(AcDbArc::desc()))
  67.                 {
  68.                         AcDbArc* pArc = AcDbArc::cast(pEnt);
  69.                         double angleStart, angleEnd,radius;
  70.                         AcGePoint2d ptCenter=CConvertUtil::ToPoint2d(pArc->center());
  71.                         radius = pArc->radius();
  72.                         angleStart = pArc->startAngle();
  73.                         angleEnd = pArc->endAngle();
  74.                         AcGePoint2d pt1, pt2;
  75.                         pt1.x = ptCenter.x + radius * cos(angleStart);
  76.                         pt1.y = ptCenter.y + radius * sin(angleStart);
  77.                         pt2.x = ptCenter.x + radius * cos(angleEnd);
  78.                         pt2.y = ptCenter.y + radius * sin(angleEnd);
  79.                         pPoly = new AcDbPolyline(3);
  80.                         pPoly->addVertexAt(0, pt1, angleStart, 0, 0);
  81.                         pPoly->addVertexAt(1, pt2, angleEnd, 0, 0);
  82.                 }
  83.                 else
  84.                 {
  85.                         pPoly = AcDbPolyline::cast(pEnt->clone());
  86.                         if (pPoly->isClosed())
  87.                         {
  88.                                 pPoly->close();
  89.                                 pEnt->close();
  90.                                 continue;
  91.                         }
  92.                 }
  93.                 AcDbJoinEntityPE* pJoin = AcDbJoinEntityPE::cast(pPoly->queryX(AcDbJoinEntityPE::desc()));
  94.                 ErrorStatus es = pJoin->joinEntities(pPoly, pEnts, indexes,geTol);
  95.                 if (es == Acad::eOk)
  96.                 {
  97.                         for (int j = 0; j < pEnts.length(); j++)
  98.                         {
  99.                                 AcDbEntity* pEnt2 = pEnts.at(j);
  100.                                 if (indexes.contains(j))
  101.                                 {
  102.                                         pEnt2->erase();
  103.                                         pEnt2->close();
  104.                                         pEnts = pEnts.removeAt(j);
  105.                                         for (int k = 0; k < indexes.length(); k++)
  106.                                         {
  107.                                                 indexes.at(k) = indexes.at(k) - 1;
  108.                                         }
  109.                                         j = j - 1;
  110.                                 }
  111.                         }
  112.                         CDwgDatabaseUtil::postToMOdelSpace(pPoly);
  113.                         pEnt->erase();
  114.                 }
  115.                 else
  116.                 {
  117.                         pPoly->close();
  118.                 }
  119.                 pEnt->close();
  120.                 indexes = indexes.removeAll();
  121.         }
  122.         return isAllcurve;
  123. }




捕获.PNG

Drawing1.rar

26.9 KB, 下载次数: 2, 下载积分: D豆 -1 , 活跃度 1

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

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-13 03:17:43 来自手机 | 显示全部楼层
额,又给自动翻译了

点评

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2018-7-13 08:53:27 | 显示全部楼层
1121443108qaz 发表于 2018-7-13 03:17
额,又给自动翻译了

贴代码,请用 下面 按钮

搜狗截图20180713085238.png

点评

版主,在我这里,编辑修改时按那个按钮弹不出来那个框(没反应),我换浏览器解决了,你能不能再帮我看看如何改下代码能改到和pedit,m,j一样的那种效果,谢谢。  详情 回复 发表于 2018-7-13 10:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-13 10:31:07 | 显示全部楼层
XDSoft 发表于 2018-7-13 08:53
贴代码,请用 下面 按钮

版主,在我这里,编辑修改时按那个按钮弹不出来那个框(没反应),我换浏览器解决了,你能不能再帮我看看如何改下代码能改到和pedit,m,j一样的那种效果,谢谢。

点评

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2018-7-13 10:50:51 | 显示全部楼层
1121443108qaz 发表于 2018-7-13 10:31
版主,在我这里,编辑修改时按那个按钮弹不出来那个框(没反应),我换浏览器解决了,你能不能再帮我看看 ...

你把代码都高亮选择后,再点代码按钮试试。

点评

好的,可以了,但是这不是关键啊,我这代码怎样优化能达到pedit,m,j那样的效果啊  详情 回复 发表于 2018-7-13 10:57
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2018-7-13 10:57:01 | 显示全部楼层
XDSoft 发表于 2018-7-13 10:50
你把代码都高亮选择后,再点代码按钮试试。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 11:00 , Processed in 0.195860 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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