ARX AcDbDatabase 中的方法 deepCloneObjects() 和 wblock() 区别以及和 AcDbObject 方法 clone() 和 deepClone() 的关系

AcDbDataBase的deepCloneOjbects接口的功能
Acad::ErrorStatus
deepCloneObjects(AcDbObjectIdArray& objectIds,AcDbObjectId& owner,AcDbIdMapping& idMap,bool deferXlation = false);
objectIds
输入要深度克隆的对象的数组
owner
输入要作为克隆的拥有者的对象的对象ID
idMap
返回用于转化对象ID关系的AcDbIdPair对象的数组
deferXlation
输入布尔值,表示是否要执行ID转化
克隆objectId数组中的所有对象并将它们增加至由owner指定的容器对象中。idMap储存AcDbIdPair对象,这个AcDbIdPair对象包含原始的和克隆的对象对的objectId实体。这个数组可用于包含在深度克隆操作中的对象的前处理。
当所有要被克隆的对象没有相同的宿主,则必须建立独立的AcDbObjectIdArray实体,每一个AcDbObjectIdArray实体包含具有所有相同的宿主的对象。再将deferXlation设置为Adesk::kTrue,对每一个数组调用deepCloneObject方法,除了最后一个调用。

AcDbObject的deepClone接口
AcDbIdMapping IdMap;
Acad::ErrorStatus es = spEntity->deepClone(spBlkTblRcd, pClonedObject, IdMap);
spEntity:被复制对象。
spBlkTblRcd: 新创建对象的Owner,如能要放到图里,通常就是当前的Model Space指针。
pClonedObject:新创建的对象。
IdMap:可以用来创建一个对应关系,原对象的ID和新对象的ID的对应关系。

AcDbDatabase::wblock 函数
Acad::ErrorStatus wblock(AcDbDatabase*& pOutputDb,const AcDbObjectIdArray& outObjIds,const AcGePoint3d& basePoint);
pOutputDb
返回用于写出的数据库的指针
outObjIds
输入被写块的所有对象的对象ID实体的数组
basePoint
输入pOutputDb中使用的基点(在pOutputDb的WCS坐标中)
创建一个新的AcDbDatabase对象,设置pOutputDb指向它,再使用wblockClone机制将outObjId实体指定的对象的数组写出至pOutputDb指定的数据库的模型空间块表记录中,其中使用basePoint作为pOutputDb的基点值。
就是把指定的一些实体,拷贝指定数据库是的新建块中。

AcDbObject中的clone就是所谓的浅克隆,并不会将实体与其它实体的关系等相关信息clone进去。

DeepCloneObjects 和 DeepClone的更多相关文章

  1. MyDAL - 引用类型对象 .DeepClone() 深度克隆[深度复制] 工具 使用

    索引: 目录索引 一.API 列表 .DeepClone() 用于 Model / Entity / ... ... 等引用类型对象的深度克隆 特性说明 1.不需要对对象做任何特殊处理,直接 .Dee ...

  2. js 深度复制deepClone

    function isObject(obj) { return typeof obj === 'object' && obj != null; } const deepClone =( ...

  3. cad.net DeepCloneObjects WasErased

    /// <summary> /// 克隆图元到块表记录 /// </summary> /// <param name="objId">id数组& ...

  4. javascript深度克隆函数deepClone

    javascript深度克隆函数deepClone function deepClone(obj) { var _toString = Object.prototype.toString; // nu ...

  5. deepClone deepCompare

    一.深度复制 // 深度复制 function deepClone(datas) { if (typeof datas !== 'object' || datas === null) return d ...

  6. C# DeepClone 深拷贝

    常规利用反射进行克隆 public static T CloneModel<T>(T oModel) { var oRes = default(T); var oType = typeof ...

  7. MemberwiseClone和DeepClone

    文章转自:http://www.cnblogs.com/zhangji/archive/2011/02/23/1961897.html MemberwiseClone 方法创建一个浅表副本,具体来说就 ...

  8. 深克隆(deepclone)

    1.简单版: <script type="text/javascript"> const newObj = JSON.parse(JSON.stringify(oldO ...

  9. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

随机推荐

  1. BestCoder Round #56 /hdu5464 dp

    Clarke and problem 问题描述 克拉克是一名人格分裂患者.某一天,克拉克分裂成了一个学生,在做题. 突然一道难题难到了克拉克,这道题是这样的: 给你nn个数,要求选一些数(可以不选), ...

  2. http ssl

    http ssl

  3. HDU 5371(2015多校7)-Hotaru&#39;s problem(Manacher算法求回文串)

    题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...

  4. [noip模拟赛]算算数

    https://www.zybuluo.com/ysner/note/1298755 题面 有一天小胡同学看到了一种表达式.这个表达式有四个变量\(A,B,C,D\).这四 个变量都只有\(0\)和\ ...

  5. 洛谷 P1965 转圈游戏 —— 快速幂

    题目:https://www.luogu.org/problemnew/show/P1965 居然真的就只是 ( x + m * 10k % n ) % n 代码如下: #include<ios ...

  6. Java应用程序中的声音播放

    声音可以创造意境,触发遐想,当与虚拟图像相结合时,更加可以让整个世界充满幻觉,声音是多媒体技术的基础. 播放声音是Java对多媒体的支持一个重要部分,它支持的声音文件类型主要有: AU - (扩展名为 ...

  7. ubuntu 16.04 Eclipse 图标显示为 ?(已解决)

    这个问题挺好解决: sudo gedit /usr/share/applications/eclipse.desktop在这个文件中将Icon=/home/soyo/eclipse/icon.xpm, ...

  8. is not mapped [from错误

    我出现的错误是:org.hibernate.hql.ast.QuerySyntaxException: loginuser is not mapped [from loginuser] 配置文件如下: ...

  9. DTO和ENTITY的关系

    DTO是数据传输对象:主要用于封装前台页面传过来的数据,在各个层之间进行数据的传递,主要用于接受前台数据进行封装并向各个层之间传递数据(个人理解是向下层传递数据),定义方法跟Bean规范一致 ENTI ...

  10. bzoj1051受欢迎的牛(Tarjan)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4776  Solved: 2542 Description ...