AcDbDatabase *pNewDb=new AcDbDatabase(Adesk::kFalse);
if (pNewDb == NULL)
{
return;
}
Acad::ErrorStatus es= pNewDb->readDwgFile(_T("D:\\123.dwg"));
if (Acad::eOk != es || NULL == pNewDb)
{
acutPrintf(_T("\n打开dwg文件失败,错误码:%s"),acadErrorStatusText(es));
return;
}
AcDbObjectIdArray objIdArray;
AcDbBlockTable *pBlkTbl=NULL;
es= pNewDb->getBlockTable(pBlkTbl,AcDb::kForRead);
if (Acad::eOk != es || NULL == pBlkTbl)
{
acutPrintf(_T("\n获取源数据库块表失败,错误码:%s"),acadErrorStatusText(es));
delete pNewDb;
pNewDb=NULL;
return;
}
AcDbBlockTableRecord *pMsBlkRcd=NULL;
es= pBlkTbl->getAt(ACDB_MODEL_SPACE,pMsBlkRcd,AcDb::kForRead);
pBlkTbl->close();
if (Acad::eOk != es || NULL == pMsBlkRcd)
{
acutPrintf(_T("\n获取源数据库模型空间块表记录失败,错误码:%s"),acadErrorStatusText(es));
delete pNewDb;
pNewDb=NULL;
return;
}
//遍历源数据库模型空间块记录中的实体
AcDbBlockTableRecordIterator *pIter=NULL;
pMsBlkRcd->newIterator(pIter);
pMsBlkRcd->close();
AcDbObjectId objId;
for (pIter->start();!pIter->done();pIter->step())
{
pIter->getEntityId(objId);
objIdArray.append(objId);
//将扩展字典改为硬拥有,否则写块出去后会丢失
AcDbEntity *pEnt=NULL;
es = pIter->getEntity(pEnt,AcDb::kForWrite);
if (Acad::eOk == es)
{
AcDbObjectId dicId= pEnt->extensionDictionary();
if (AcDbObjectId::kNull != dicId)
{
AcDbObjectPointer<AcDbDictionary> pDic(dicId,AcDb::kForWrite);
if(Acad::eOk == pDic.openStatus())
{
pDic->setTreatElementsAsHard(Adesk::kTrue);
pDic->close();
}
}
pEnt->close();
}
}
delete pIter; //检查objectId
if (objIdArray.isEmpty())
{
acutPrintf(_T("\n克隆失败,源数据库的模型空间没有实体!"));
delete pNewDb;
pNewDb=NULL;
return;
}
AcDbIdMapping idMap;
AcDbDatabase *pDb= acdbHostApplicationServices()->workingDatabase();
//获取当前数据库的空间ID
AcDbObjectId mSpaceId= pDb->currentSpaceId();
//写块克隆 忽略重定义模式
es = pNewDb->wblockCloneObjects(objIdArray,mSpaceId,idMap,AcDb::kDrcIgnore);
if (Acad::eOk != es)
{
acutPrintf(_T("\ndeepCloneObjects失败错误码:%s"),acadErrorStatusText(es));
delete pNewDb;
pNewDb=NULL;
return;
}
//删除临时数据库
delete pNewDb;
pNewDb=NULL; AcDbIdPair IdPair;
AcDbObjectIdArray arrID2;
//获取克隆后的和原id匹配的对象的objectid,克隆idmap是全部的id映射,包括一些附带的数据
for (int i=;i<objIdArray.length();i++)
{
IdPair.setKey(objIdArray[i]);
if (idMap.compute(IdPair))
{
arrID2.append(IdPair.value());
}
}
if (!arrID2.isEmpty())
{
acutPrintf(_T("\n复制:%d个对象成功!"),arrID2.length());
} //#define Randmod(x) rand()%x
//亮显选择集
ads_name ss,ent;
acedSSAdd(NULL,NULL,ss);
for (int i=;i<arrID2.length();i++)
{
AcDbEntityPointer pEnt(arrID2[i],AcDb::kForWrite);
if (Acad::eOk == pEnt.openStatus())
{
//pEnt->setColorIndex(Randmod(11));
acdbGetAdsName(ent,arrID2[i]);
acedSSAdd(ent,ss,ss);
// if (pEnt->isKindOf(AcDbDimension::desc()))
// {
// AcDbDimension *pDim=AcDbDimension::cast(pEnt);
// pDim->recomputeDimBlock();
// }
pEnt->recordGraphicsModified();
pEnt->close();
}
}
Adesk::Int32 nLength;
acedSSLength(ss,&nLength);
if (nLength>)
{
acedSSSetFirst(ss,NULL);
}
//acedCommand(RTSTR,_T("_.select"),RTPICKS,ss,RTSTR,_T(""),RTNONE);
acedSSFree(ss);

使用wblockCloneObjects从后台读取dwg文件复制实体到当前数据库的更多相关文章

  1. C# 解决读取dbf文件,提示Microsoft Jet 数据库引擎找不到对象的问题

    前言 最新项目需要经常和dbf文件打交道,在实际场景中很多软件需要和一些老的系统进行数据交互,而这些系统都在使用foxpro数据库,读取dbf文件一般都是分为两种情况:第一:安装foxpro的驱动进行 ...

  2. WPF 后台读取样式文件

    ResourceDictionary dic = new ResourceDictionary { Source = new Uri("Styles.xaml",UriKind.R ...

  3. PHP读取CSV文件把数据插入到数据库,本地没有问题,阿里云测试服务器不行

    原因是 本地windows和服务器linux编码不同,在代码中不要加编码转换的内容,而是把csv文件另存为utf-8文件上传就可以了,windows和Linux都就可以了. html代码: PHP端代 ...

  4. C# 读取CAD文件缩略图(DWG文件)

    //C# 读取CAD文件缩略图(DWG文件) https://blog.csdn.net/hanghangaidoudou/article/details/8589574 //2010-09-04 1 ...

  5. 批量输出dwg文件中的文本

    公司来了一批图纸,里面有一部分内容需要复制到excel中,几百张来图每一张都 手工复制,烦死了.编写一个CAD插件,自动导出文本,简单记录在下面. 想法是: 1.输入命令,选择所有dwg文件 2.挨个 ...

  6. 无需AutoCAD,用C#生成DWG文件

    是一个类库:Teigha.NET for .DWG 利用它就可以在无需安装AutoCAD软件的情况下,生成.读取DWG文件,适合那些导入导出的场合. Teigha曾用名OpenDWG .DWGdire ...

  7. java读取文件内容并输出到控制台,java中实现文件复制

    public class TestFileInputStream { public static void main(String [] args) { //读取指定文件中内容,并在控制台输出 Fil ...

  8. input type="file"文件上传到后台读取

    html页面(表单采用bootStrap) js部分: //更换头像时把上传的图片post方式到控制器 <script type="text/javascript"> ...

  9. Javascript写入txt和读取txt文件的方法

    文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...

随机推荐

  1. #region 常量和静态变量静态类readonly

    #region 常量和静态变量静态类readonly //---------------------------------------------------------------------- ...

  2. 迷你MVVM框架 avalonjs 学习教程2、模块化、ViewModel、作用域

    一个项目是由许多人分工写的,因此必须要合理地拆散,于是有了模块化.体现在工作上,PM通常它这为某某版块,某某频道,某某页面.某一个模块,必须是包含其固有的数据,样式,HTML与处理逻辑.在jQuery ...

  3. org.json库下的json的基本使用

    public class Users { private String username; private String password; public String getUsername() { ...

  4. cas增加验证码

    参考地址:https://blog.csdn.net/attackmind/article/details/52052502 参考地址:https://blog.csdn.net/jadyer/art ...

  5. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    实现EXCEL导入功能:web网站,excel导入用OLEDB同样会报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 报错信息: Exception caught. ...

  6. unity animation readonly 无法加事件?

    目前找到的解决方案是用代码加Event: using System.Collections; using System.Collections.Generic; using UnityEngine; ...

  7. C++中public、protected以及private的使用

    相比C语言,C++中通过class/struct来定义既包含数据,又包含行为的结构,从而支持了“对象”.现实世界中,一个人(一个对象)通常 拥有一些资产(数据),并且掌握某些技能(行为),并且这些资产 ...

  8. 子串字谜substring anagrams

    [抄题]: 给定一个字符串 s 和一个 非空字符串 p ,找到在 s 中所有关于 p 的字谜的起始索引.字符串仅由小写英文字母组成,字符串 s 和 p 的长度不得大于 40,000.输出顺序无关紧要. ...

  9. 转载:字符串hash总结(hash是一门优雅的暴力!)

    转载自:远航休息栈 字符串Hash总结 Hash是什么意思呢?某度翻译告诉我们: hash 英[hæʃ] 美[hæʃ]n. 剁碎的食物; #号; 蔬菜肉丁;vt. 把…弄乱; 切碎; 反复推敲; 搞糟 ...

  10. 查找yum 安装目录

    [root@DB-Server ~]# rpm -qa | grep -i mysql MySQL-server-advanced-5.6.20-1.rhel5 MySQL-client-advanc ...