写块克隆可以把当前数据库的实体写入到另一个dwg文件中去。用法根deepclone类似,不过deepclone只能复制到同一数据库中,而写块克隆是在不同数据库中进行复制的。

写块克隆也算是深度克隆,能把所克隆的实体带有的图层、标注样式、多线样式、文字样式、表格样式、引线样式都克隆过去。但是呢,我试过,如果实体的样式是standard样式,实体被克隆到新文件里去,就无法覆盖新文件里的standard样式了,我根据不同的样式采取了不同的方法来完成让standard样式也能被克隆过去。

首先简单的是Mleaderstyle、MLStyle和TableStyle,它们三个采取的是更改standard样式的名称,然后如果原实体有使用到standard样式就能被克隆过去了。这三个的样式都是通过字典来获取的。例如:

  

//表格样式
pDataBase->getTableStyleDictionary(newDict, AcDb::kForWrite);
bool flag=newDict->setName(L"Standard", L"oldStandard");
//多重引线样式
pDataBase->getMLeaderStyleDictionary(newDict, AcDb::kForWrite);
bool flag = newDict->setName(L"Standard", L"oldStandard");
//多线样式
pDataBase->getMLStyleDictionary(newDict, AcDb::kForWrite);
bool flag = newDict->setName(L"Standard", L"oldStandard");

稍微复杂点的,文字样式,需要打开原数据库和新数据库的standard文字样式块记录,然后把原块记录的值赋值给新块记录。大概是这样:

if (pNewRec!=NULL)
{
ACHAR * pTypeface = NULL;
Adesk::Boolean bold;
Adesk::Boolean italic;
Charset charset;
Autodesk::AutoCAD::PAL::FontUtils::FontPitch pitchAndFamily;
Autodesk::AutoCAD::PAL::FontUtils::FontFamily fontFamily;
ACHAR *na, *na1, *bigFontN;
txtRec->getName(na); txtRec->fileName(na1);
txtRec->bigFontFileName(bigFontN);
Adesk::UInt8 flagB = txtRec->flagBits();
setSymbolName(pNewRec, na);
es = pNewRec->setFileName(na1);
es = pNewRec->setBigFontFileName(bigFontN);
pNewRec->setFlagBits(flagB);
pNewRec->setIsVertical(txtRec->isVertical());
pNewRec->setIsShapeFile(txtRec->isShapeFile()); es = txtRec->font(pTypeface, bold, italic, charset, pitchAndFamily, fontFamily);
//es = pTextStyle->font(pTypeface, bold, italic, charset, pitchAndFamily, fontFamily);
if (es == Acad::eOk)
pNewRec->setFont(pTypeface, bold, italic, charset, pitchAndFamily, fontFamily); es = pNewRec->setTextSize(txtRec->textSize());
if (styleId != stdId&&styleId != anoId)
{
es = pNewRec->setXScale(txtRec->xScale());
}
es = pNewRec->setObliquingAngle(txtRec->obliquingAngle()); }

在做克隆standard标注样式的时候,又不能像克隆文字样式那样简单的直接赋值操作,否在新数据库在保存的时候,会弹出警告,虽然样式复制过去了,但是会出现替代样式。这里我采用的办法是,先在新数据库里建一个标注样式来替代新数据库里的standard样式作为当前样式,这是为了能删除standard样式,因为当前标注样式是不能被删除的。然后如果原数据库所选实体使用到了standard样式就能被克隆过去了。

最后就是写块克隆的操作了。

AcDbDatabase* pTempDb = new AcDbDatabase();

        pTempDb->setLtscale(acdbHostApplicationServices()->workingDatabase()->ltscale());
pTempDb->setLineWeightDisplay(acdbHostApplicationServices()->workingDatabase()->lineWeightDisplay());
pTempDb->setFillmode(acdbHostApplicationServices()->workingDatabase()->fillmode()); AcDbIdMapping idMap;
es = idMap.setDestDb(pTempDb);
//省略了各种standard样式的克隆
pTempDb->getSymbolTable(pBT1, AcDb::kForRead);
pBT1->getAt(ACDB_MODEL_SPACE, modelSpaceId); es=pBT1->close(); es = pTempDb->wblockCloneObjects(ids, modelSpaceId, idMap, AcDb::kDrcIgnore); if (es != ErrorStatus::eOk) {
delete pTempDb;
pTempDb=NULL;
return false;
}
es = pTempDb->saveAs(path);

wblockCloneObjects 写块克隆的使用的更多相关文章

  1. 使用wblockCloneObjects从后台读取dwg文件复制实体到当前数据库

    AcDbDatabase *pNewDb=new AcDbDatabase(Adesk::kFalse); if (pNewDb == NULL) { return; } Acad::ErrorSta ...

  2. Ceph块设备

    Ceph块设备 来自这里. 块是一个字节序列(例如,一个512字节的数据块).基于块的存储接口是最常见的存储数据的方法,它通常基于旋转介质,像硬盘.CD.软盘,甚至传统的9道磁带. 基本的块设备命令 ...

  3. 在VMware下正确克隆CentOS6.5的打开方式

    引言 想必用VMware Workstation软件安装虚拟机,作为一个爱"折腾"的攻城狮肯定是千千万万遍的事情.无论是学习还是工作之中,我们都会遇到需要在一台物理主机上运行多台虚 ...

  4. Smart210学习记录------块设备

    转自:http://bbs.chinaunix.net/thread-2017377-1-1.html 本章的目的用尽可能最简单的方法写出一个能用的块设备驱动.所谓的能用,是指我们可以对这个驱动生成的 ...

  5. [ext4]07 磁盘布局 - 块/inode分配策略

    Ext4系统从设计上就认为数据局部性是文件系统的文件系统的一个理想品质. 在机械硬盘上,相关联的数据存放在相近的blocks上,可以使得在访问数据时减少磁头驱动器的移动距离,从而加快IO访问. 在SS ...

  6. git克隆github上的代码(整个分支),并使用vs code上传到github

    好久没写博客辣,之前一直用sublime text3,最近开始用vc写,感觉很良好.然后公司也在用git,就写一个克隆上传的教程吧 1.下载git https://www.git-scm.com/do ...

  7. Linux块设备驱动_WDS

    推荐书:<Linux内核源代码情景分析> 1.字符设备驱动和使用中等待某一事件的方法①查询方式②休眠唤醒,但是这种没有超时时间③poll机制,在休眠唤醒基础上加一个超时时间④异步通知,异步 ...

  8. nand flash 的oob 及坏块管理

    0.NAND的操作管理方式      NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 ...

  9. nand flash坏块管理OOB,BBT,ECC

    转:http://www.cnblogs.com/elect-fans/archive/2012/05/14/2500643.html 0.NAND的操作管理方式 NAND FLASH的管理方式:以三 ...

  10. 原生JavaScript之深度克隆

    先看一下克隆成功后的结果 深度克隆就是将obj的属性克隆到obj1上面,并且在obj上面修改属性不影响obj1上面的属性. 1.先把所有的值都遍历一遍(看是引用值和原始值)用for ( var pro ...

随机推荐

  1. C++调用Python-6:调用Python类

    # mytest.py class Test: def hello(self): print("this is test class hello function no params ret ...

  2. .NET服务发现(Microsoft.Extensions.ServiceDiscovery)集成Consul

    随着Aspire发布preview5的发布,Microsoft.Extensions.ServiceDiscovery随之更新, 服务注册发现这个属于老掉牙的话题解决什么问题就不赘述了,这里主要讲讲M ...

  3. HarmonyOS Connect认证测试

     原文链接:https://mp.weixin.qq.com/s/zRG97PWPqfDo0vfwQWSUew,点击链接查看更多技术内容:   在HarmonyOS Connect生态产品的认证测试过 ...

  4. Pytorch-卷积神经网络CNN之ResNet的Pytorch代码实现

    先说一个小知识,助于理解代码中各个层之间维度是怎么变换的. 卷积函数:一般只用来改变输入数据的维度,例如3维到16维. Conv2d() Conv2d(in_channels:int,out_chan ...

  5. SVN Windows10的安装

    SVN Windows安装与配置 先去到官网的下载链接:Download Apache Subversion Sources 然后点这个 binary packages 在这里能看到大多数的操作系统的 ...

  6. 力扣647(java)-回文子串(中等)

    题目: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目. 回文字符串 是正着读和倒过来读一样的字符串. 子字符串 是字符串中的由连续字符组成的一个序列. 具有不同开始位置或结束位置 ...

  7. 【阿里云采购季】3月采购完,IT运维躺赢一年2

    阿里云2020上云采购季正式上线啦!今年的采购季可以逛些啥?    采购季正式期时间: 3月2日-3月31日 在这段时间里,想买啥就买吧,别忘了把想买的产品加入购物车噢,特惠产品叠加购物车满减,更划算 ...

  8. 千万商家的智能决策引擎--AnalyticDB如何助力生意参谋双十一

    作者:算法&健兮,阿里巴巴数据技术及产品部技术专家 生意参谋介绍 生意参谋是阿里官方打造的全渠道.全链路.一站式数据平台,致力于为用户提供经营分析.市场洞察.客群洞察等多样化数据服务,帮助用户 ...

  9. 【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美

    简介: 台湾作家林清玄在接受记者采访的时候,如此评价自己 30 多年写作生涯:"第一个十年我才华横溢,'贼光闪现',令周边黯然失色:第二个十年,我终于'宝光现形',不再去抢风头,反而与身边的 ...

  10. [FAQ] Argument 3 passed to Lcobucci\JWT\Signer\Hmac::doVerify() must be an instance of Lcobucci\JWT\Signer\Key, null given

    出现这个错误,说明没有找到 key,在使用 laravel-jwt 之前需要生成加密 key,使用: $ php artisan jwt:secret Link:https://www.cnblogs ...