找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2886|回复: 15

[API建议] 增加 joinEntity 函数

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-8 11:47:02 | 显示全部楼层 |阅读模式

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

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

×
这个是在 2006 以上吧

Abstract method, which when implemented can be used to join two supported entities together. Some implementations might require the primary and secondary entities be of the same type, while other implementations might convert the data from the secondary entity to match the type of the primary entity.

virtual Acad::ErrorStatus joinEntity(    AcDbEntity* pPrimaryEntity,     AcDbEntity* pSecondaryEntity) const = 0;


Parameters

Parameters
Description
AcDbEntity* pPrimaryEntity
The primary entity, which is to be updated with the data of the secondary entity joined to it, if possible.
AcDbEntity* pSecondaryEntity
The secondary entity, which provides the data to be joined to the primary entity.

AcDbLine line1(AcGePoint3d(0.0,0.0,0.0), AcGePoint3d(1.0,0.0,0.0));
AcDbLine line2(AcGePoint3d(2.0,0.0,0.0), AcGePoint3d(3.0,0.0,0.0));
AcDbJoinEntityPE* pJoinPE = AcDbJoinEntityPE::cast(line1.queryX(AcDbJoinEntityPE::desc()));
if (pJoinPE != NULL) {
Acad::ErrorStatus es = pJoinPE->joinEntity(&line1, &line2);
if (Acad::eOk == es) {
// line1 should be updated to be from (0,0,0) to (3,0,0)
}
}




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

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-11-8 12:12:27 | 显示全部楼层
这个要2012以上才有。

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-11 11:37:22 来自手机 | 显示全部楼层
说错了,可以合并多段线,挺好用的。

点评

这个是JOIN, 能保持原来的实体类型。也能都是多段线。  详情 回复 发表于 2018-7-11 11:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-11 11:49:09 | 显示全部楼层
1121443108qaz 发表于 2018-7-11 11:37
说错了,可以合并多段线,挺好用的。

这个是JOIN, 能保持原来的实体类型。也能都是多段线。

点评

你看,我的代码是这样的,但是总是失败,这个joinentitys怎么用啊 ads_name ss; TCHAR keyword[20]; int rc = CSSUtil::GetSS(ss, keyword); if (rc!=RTNORM) { return; } AcDbObjectIdArray  详情 回复 发表于 2018-7-11 12:03
为什么另外一个函数joinentitys,总试不成功。比如我画四条首尾相连最终形成矩形的直线,我想把它们聚合成一条封闭多段线,没试成功。单独的joinentity可以把两条多段线变成一条倒是成功了。  详情 回复 发表于 2018-7-11 11:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-11 11:58:54 来自手机 | 显示全部楼层
newer 发表于 2018-7-11 11:49
这个是JOIN, 能保持原来的实体类型。也能都是多段线。

为什么另外一个函数joinentitys,总试不成功。比如我画四条首尾相连最终形成矩形的直线,我想把它们聚合成一条封闭多段线,没试成功。单独的joinentity可以把两条多段线变成一条倒是成功了。

点评

你看下帮助 AcDbJoinEntityPE::joinEntities Method AcGeIntArray_@const.html[/email]#]Collapse All Parameters JOIN成功多少查 joinedEntityIndices,也就是说不是你认为连的都能连到一起的,  详情 回复 发表于 2018-7-11 12:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-11 12:03:52 | 显示全部楼层
newer 发表于 2018-7-11 11:49
这个是JOIN, 能保持原来的实体类型。也能都是多段线。

你看,我的代码是这样的,但是总是失败,这个joinentitys怎么用啊
ads_name ss;
                TCHAR keyword[20];
                int rc = CSSUtil::GetSS(ss, keyword);
                if (rc!=RTNORM)
                {
                        return;
                }
                AcDbObjectIdArray entIds = CSSUtil::GetSsEntIds(ss);
                acedSSFree(ss);
                AcArray<AcDbEntity*> pEnts;
                AcDbEntity*pEnt = NULL;
                int len = entIds.length();
                for (int i=0;i<len;i++)
                {
                        acdbOpenObject(pEnt, entIds.at(i), AcDb::kForWrite);
                        pEnts.append(pEnt);
                }
                AcDbPolyline* pPoly = new AcDbPolyline();
                AcGeIntArray indexs;
                AcDbJoinEntityPE* pJoin = AcDbJoinEntityPE::cast(pPoly->queryX(AcDbJoinEntityPE::desc()));
                ErrorStatus es=pJoin->joinEntities(pPoly, pEnts,indexs);
                if (es==Acad ::eOk)
                {
                        CDwgDatabaseUtil::postToMOdelSpace(pPoly);
                        acutPrintf(L"\nok");
                }
                else
                {
                        acutPrintf(L"\n join失败");
                        acutPrintf(L"\nerror::%s", acadErrorStatusText(es));
                        for (int j=0;j<pEnts.length();j++)
                        {
                                AcDbEntity* pEnt3 = pEnts.at(j);
                                pEnt3->close();
                        }
                }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-11 12:05:08 | 显示全部楼层
这个Joinentitys怎么用的啊
virtual Acad::ErrorStatus joinEntities(
    AcDbEntity* pPrimaryEntity,
    const AcArray<AcDbEntity*>& otherEntities,
    AcGeIntArray& joinedEntityIndices,
    const AcGeTol& tol = AcGeContext::gTol
) const = 0;
Parameters
Parameters  Description  
pPrimaryEntity  The primary entity, which is to be updated with the data of the secondary entity joined to it, if possible.  
otherEntities  The other entities to be joined to the primary entity. Note, some implementations might require all of these entities to be of the same time as the primary entity.  
joinedEntityIndices  An array of indices to the entities from the otherEntities array that were successfully joined.  
tol  Input tolerance (Optional).  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-11 12:14:20 | 显示全部楼层
本帖最后由 newer 于 2018-7-11 12:15 编辑
1121443108qaz 发表于 2018-7-11 11:58
为什么另外一个函数joinentitys,总试不成功。比如我画四条首尾相连最终形成矩形的直线,我想把它们聚合 ...

你看下帮助

AcDbJoinEntityPE::joinEntities Method  
virtual Acad::ErrorStatus joinEntities(
    AcDbEntity* pPrimaryEntity,
    const AcArray<AcDbEntity*>& otherEntities,
    AcGeIntArray& joinedEntityIndices
) const = 0;

Parameters


Parameters
Description
AcDbEntity* pPrimaryEntity
The primary entity, which is to be updated with the data of the other entities joined to it, if possible.
const AcArray<AcDbEntity*>& otherEntities
The other entities to be joined to the primary entity. Note, some implementations might require all of these entities to be of the same time as the primary entity.
AcGeIntArray& joinedEntityIndices
An array of indices to the entities from the otherEntities array that were successfully joined.


JOIN成功多少查 joinedEntityIndices,也就是说不是你认为连的都能连到一起的,两个紧连的实体才会JOIN。

所以你要保证那些实体要在表里面要手尾相连。这个函数不会帮你去处理依次连接哪两个。








点评

看了下是在7楼  详情 回复 发表于 2018-7-11 15:19
我用直线画了个矩形出来,这四条直线不能join成功吗?它们是首尾相连的啊  详情 回复 发表于 2018-7-11 13:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-11 13:39:52 来自手机 | 显示全部楼层
newer 发表于 2018-7-11 12:14
你看下帮助

AcDbJoinEntityPE::joinEntities Method  

我用直线画了个矩形出来,这四条直线不能join成功吗?它们是首尾相连的啊

点评

你自己可以打印下选择集的顺序,看看挨着不  详情 回复 发表于 2018-7-11 13:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-11 13:47:58 | 显示全部楼层
本帖最后由 newer 于 2018-7-11 13:49 编辑
1121443108qaz 发表于 2018-7-11 13:39
我用直线画了个矩形出来,这四条直线不能join成功吗?它们是首尾相连的啊

你看着挨着不行,选择集里面实体的顺序可不一定是挨着的,你自己可以打印下选择集的顺序,看看挨着不
另外,有问题最好把你写的完整源码贴上来。

点评

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-11 15:16:45 来自手机 | 显示全部楼层
newer 发表于 2018-7-11 13:47
你看着挨着不行,选择集里面实体的顺序可不一定是挨着的,你自己可以打印下选择集的顺序,看看挨着不
另 ...

我的代码放8楼了,我以为是那样用的,你看看是不是用法出了问题

点评

不需要NEW一个POLYLINE, 主实体是你选择集第一个实体,除去第一个实体,其他实体和这个主实体连接。  详情 回复 发表于 2018-7-11 15:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-11 15:19:26 来自手机 | 显示全部楼层
newer 发表于 2018-7-11 12:14
你看下帮助

AcDbJoinEntityPE::joinEntities Method  

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-7-11 15:23:20 | 显示全部楼层
1121443108qaz 发表于 2018-7-11 15:16
我的代码放8楼了,我以为是那样用的,你看看是不是用法出了问题

不需要NEW一个POLYLINE, 主实体是你选择集第一个实体,除去第一个实体,其他实体和这个主实体连接。

点评

好的,我晚上再试试。我之前试过主实体是选择集第一个,otherentitys里面包含了那个主实体,没成功。  详情 回复 发表于 2018-7-11 15:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-7-11 15:27:15 来自手机 | 显示全部楼层
newer 发表于 2018-7-11 15:23
不需要NEW一个POLYLINE, 主实体是你选择集第一个实体,除去第一个实体,其他实体和这个主实体连接。

好的,我晚上再试试。我之前试过主实体是选择集第一个,otherentitys里面包含了那个主实体,没成功。

点评

主实体不能在连接的数组里面, 主和主怎么连。  详情 回复 发表于 2018-7-11 16:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 01:42 , Processed in 0.635681 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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