DeepCloneObjects 和 DeepClone
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的更多相关文章
- MyDAL - 引用类型对象 .DeepClone() 深度克隆[深度复制] 工具 使用
索引: 目录索引 一.API 列表 .DeepClone() 用于 Model / Entity / ... ... 等引用类型对象的深度克隆 特性说明 1.不需要对对象做任何特殊处理,直接 .Dee ...
- js 深度复制deepClone
function isObject(obj) { return typeof obj === 'object' && obj != null; } const deepClone =( ...
- cad.net DeepCloneObjects WasErased
/// <summary> /// 克隆图元到块表记录 /// </summary> /// <param name="objId">id数组& ...
- javascript深度克隆函数deepClone
javascript深度克隆函数deepClone function deepClone(obj) { var _toString = Object.prototype.toString; // nu ...
- deepClone deepCompare
一.深度复制 // 深度复制 function deepClone(datas) { if (typeof datas !== 'object' || datas === null) return d ...
- C# DeepClone 深拷贝
常规利用反射进行克隆 public static T CloneModel<T>(T oModel) { var oRes = default(T); var oType = typeof ...
- MemberwiseClone和DeepClone
文章转自:http://www.cnblogs.com/zhangji/archive/2011/02/23/1961897.html MemberwiseClone 方法创建一个浅表副本,具体来说就 ...
- 深克隆(deepclone)
1.简单版: <script type="text/javascript"> const newObj = JSON.parse(JSON.stringify(oldO ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
随机推荐
- tomcat的HTTPS
完美配置Tomcat的HTTPS 博客分类: Tomcat HTTPS Tomcat配置HTTPS的文章到处都有,过程也比较简单,随后文中会转一段过来. 但对于启用APR情况下报异常“java.l ...
- Eclipse + CDT引入OpenCV失败的解决的方法
Android JNI开发中用到了OpenCV,由于想通过JNI实现,就没有去用Android层的Lib引用. 可是操作中发如今.cpp文件中include的时候发现"#include &l ...
- 进程间通信之-共享内存Shared Memory--linux内核剖析(十一)
共享内存 共享内存是进程间通信中最简单的方式之中的一个. 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区. 共享内存同意两个或很多其他进程訪问同一块内存,就如同 malloc() 函数 ...
- ios30---pthread, NSThread, GCD, NSOperation
pthread(线程库,很早就有的技术,了解):一套通用的多线程API适用于Unix\Linux\Windows等系统(java开发也有pthread)跨平台\可移植使用难度大(全是C函数) C语言 ...
- 扩展AutoCompleteTextView让其默认显示一组列表。setThreshold
很多时候, 在做自动下拉框时,默认点上去时需要显示一组默认的下拉数据.但是默认的AutoCompleteTextView是实现不了的, 因为setThreshold方法最小值是1,就算你设的值为0,也 ...
- mybatis写当天 当月的数据 时间段数据
1 数据库字段pk_time(Varchar) 当天的数据 SELECT * FROM 表 WHERE date(fk_time) = curdate(); 当月的数据 SELECT *FROM 表 ...
- 蓝书3.3 SPFA算法的优化
T1 最小圈 bzoj 1486 题目大意: 一个环的权值平均值为定义为一个这个环上所有边的权值和除以边数 求最小的环的权值平均值 思路: 二分一个值 把所有边减去这个值 判断是否有负环 #inclu ...
- SQLAlchemy框架---ORM思想
- TI BLE:读本机地址
uint8 ownAddress[B_ADDR_LEN]; //B_ADDR_LEN=6GAPRole_GetParameter(GAPROLE_BD_ADDR, ownAddress); #def ...
- Controller控制器的使用
如果不加@Controller注解,浏览器它是无法访问到的.@RequestMapping通过某个URL访问到我们写的方法