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] 一.设计模式 ...
随机推荐
- Python的lambda函数与排序
Python的lambda函数与排序 2010-03-02 15:02 2809人阅读 评论(0) 收藏 举报 lambdapythonlistlispclass工作 目录(?)[+] 前几天 ...
- CentOS 7 执行级别的切换
CentOS 7 执行级别的切换 由命令行级别切换到窗体级别的命令未变:init 5或startx 由窗体级别切换到命令行级别的命令未变:init 3 新版本号的执行级别都定义在 /lib/syste ...
- RPC和微服务
1 什么是RPC 是remote procedure call的缩写. 2 什么是微服务 所谓的微服务就是说,把一个应用分解成一组小的服务,每个服务运行在自己的进程中.每个服务都可以单独部署,可以用自 ...
- YTU 2535: C++复数运算符重载(+与<<)
2535: C++复数运算符重载(+与<<) 时间限制: 1 Sec 内存限制: 128 MB 提交: 867 解决: 532 题目描述 定义一个复数类Complex,重载运算符&qu ...
- 记录一次Mysql死锁排查过程
背景 以前接触到的数据库死锁,都是批量更新时加锁顺序不一致而导致的死锁,但是上周却遇到了一个很难理解的死锁.借着这个机会又重新学习了一下mysql的死锁知识以及常见的死锁场景.在多方调研以及和同事们的 ...
- SQLServer 存储过程 SET NOCOUNT { ON | OFF } 的使用
在JDBC中调用 sql server 的存储过程时“该语句没有返回结果集”异常: 解决方法:在存储过程首行加上 SET NOCOUNT ON 使返回的结果中不包含有关受 Transact-S ...
- oracle给用户授权
1.在PLSQL里,用sys(oracle系统用户)登陆,登陆的时候一定要选择SYSDBA.普通用户登陆选择normal就可以了 2.创建用户 *也可以给普通用户授权为dba即数据库管理员.在导入导出 ...
- bzoj [JSOI2010]Group 部落划分 Group【二分+并查集】
我是zz吗这么简单都写错-- 一眼二分,然后判断的话是枚举点,然后计算这个点到已有联通块的最小距离,如果这个点到一些联通块的距离小于当前二分的val,则把这些联通块合并起来,这里用并查集维护,最后看这 ...
- bzoj 1596: [Usaco2008 Jan]电话网络【贪心】
dfs,如果一个点的儿子.本身.父亲都没有塔,就在父亲上建一个 原理不明-- #include<iostream> #include<cstdio> using namespa ...
- css 实现 checkbox 大小调整
一般调整 checkbox 大小我们想到的是 width.height,可是设置后,发现是没有效的. 如微信小程序里面,checkbox 默认就很大,想设置小一点怎么办? transform: sca ...