找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 891|回复: 8

[研讨] AcDbMPolygon的getChildLoops()有Bug?

[复制链接]
发表于 2017-4-20 14:14:04 | 显示全部楼层 |阅读模式

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

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

×
如题:
测试代码如下:
acedArxLoad(_T("AcMPolygonObj18.dbx"));//加载后才能加入数据库
AcGePoint3d pt2(0,30,0);
AcGePoint3d pt3(0,130,0);
AcGePoint3d pt(0,0,0);
AcDbMPolygon *pMpoly = new AcDbMPolygon();
AcDbCircle *pc = new AcDbCircle(pt,AcGeVector3d(0,0,1), 100);
AcDbCircle *pc2 = new AcDbCircle(pt3,AcGeVector3d(0,0,1), 150); //半径取150,出错;半径取40,出错;50就不错
pMpoly->appendLoopFromBoundary(pc);
pMpoly->appendLoopFromBoundary(pc2);
AcGeIntArray iLoop = NULL;
pMpoly->getChildLoops(0, iLoop);
AcGeIntArray iLoop2 = NULL;
pMpoly->getChildLoops(1, iLoop2);//这里出错
delete pc;
delete pc2;
delete pMpoly;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-4-20 17:46:28 | 显示全部楼层
你可以试试加载XDRX API,作为测试,

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-4-20 17:52:34 | 显示全部楼层
virtual Acad::ErrorStatus

appendLoopFromBoundary(

const AcDbCircle* pCircle,

bool excludeCrossing = true,

double tol = AcDbMPolygonCrossingFuzz);

1、你上面的代码,你看看判断下返回值,eOk后,你再进行下面的操作。
2、下面你判断下numMPolygonLoops() 是否是2个子环
3、getChildLoops()也有返回值,你判断下返回值是什么
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-20 20:39:28 | 显示全部楼层

ERROR: eAmbiguousInput2 (不明确的输入)。
加入第二条边界时出错,不过还是想不明白,半径40加入时会出错,半径改为40.1,就能加入.晕倒。
觉得好像已经很明确了呀

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-4-20 20:47:43 | 显示全部楼层

1、 你改40.0 试试

2、你先添加到数据库把圆,然后在添加LOOP

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

使用道具 举报

 楼主| 发表于 2017-4-20 21:04:17 | 显示全部楼层
本帖最后由 lionguns 于 2017-4-20 21:10 编辑

测试过了,40.0怎么都不行,圆先加入数据库再打开,然后append.....也不行.我的是CAD2012
半径40.1时采用默认参数能加入,修改最后一个参数时加入不了。
给我感觉这种非核心类,似乎不是很完美。

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

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-4-20 21:18:29 | 显示全部楼层

appendLoopFromBoundary(pEnt,false);

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-4-20 21:46:07 | 显示全部楼层

用XDRX API制作的MPOLYGON实体,里面半径是40,没问题

QQ截图20170420213601.png

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 20:33 , Processed in 0.297934 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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