删除外部dwg中指定的块定义
本例实现删除外部图纸中指定的块定义,在外部图纸当前模型空间中是没有该块定义的块参照存在。
代码如下:
void CBlockUtil::DeleteBlockDefFormOtherDwg(const TCHAR* fileName, const TCHAR* blkDefName)
{
// 使用_SH_DENYNO参数打开图形(只读打开),允许其它用户读写该文件
AcDbDatabase* pSourceDwg = new AcDbDatabase(Adesk::kFalse);
Acad::ErrorStatus es = pSourceDwg->readDwgFile(fileName);
if (es != Acad::eOk)
{
delete pSourceDwg;
pSourceDwg = NULL;
acutPrintf(TEXT("\n读入dwg图形错误, 图形名称: %s"), fileName);
return;
}
// 打开外部图形数据库的块表,寻找给定名称的块表记录
AcDbBlockTable* pBlkTable = NULL;
es = pSourceDwg->getBlockTable(pBlkTable, AcDb::kForWrite);
AcDbBlockTableRecord *pBlkTabRcd;
CString strBlkDef(blkDefName);
if (pBlkTable->has(strBlkDef))
{
pBlkTable->getAt(blkDefName, pBlkTabRcd, ZcDb::kForWrite);
es = pBlkTabRcd->erase();
}
else
{
acutPrintf(_T("\n在当前文件中不存在该块表!"));
pBlkTable->close();
delete pSourceDwg;
pSourceDwg = NULL;
return;
}
pBlkTable->close();
pBlkTabRcd->close();
//保存更改后的数据库,这里一定不能少这句
es=pSourceDwg->saveAs(fileName);
delete pSourceDwg;
pSourceDwg = NULL;
}
在上述中我们使用的是saveAs()来保存更改后的数据库,有时还可以使用save()来保存更改,在本例中使用save()会出现错误,具体原因还不清楚,以后多试试就可以了,就是这两种中的一种。
如果要删除当前图形中的块定义就简单多了,我们并不需要保存数据库的更改,代码如下:
AcDbBlockTable *pBlkTab;
acdbHostApplicationServices()->workingDatabase()
->getBlockTable(pBlkTab, ZcDb::kForWrite);
CString strBlk = _T("as");
AcDbBlockTableRecord *pBlkTabRcd;
if (pBlkTab->has(strBlk))
{
pBlkTab->getAt(strBlk, pBlkTabRcd, ZcDb::kForWrite);
pBlkTabRcd->erase();
}
else
{
return;
}
pBlkTab->close();
pBlkTabRcd->close();
删除外部dwg中指定的块定义的更多相关文章
- mssql sqlserver 禁止删除数据表中指定行数据(转自:http://www.maomao365.com/?p=5323)
转自:http://www.maomao365.com/?p=5323 摘要:下文主要讲述,如何禁止删除数据表中指定行数据 最近收到用户一个需求,禁止所有人删除”表A”中,ID 为1.2.3.4.5的 ...
- 删除IE缓存中指定的文件
DeleteUrlCacheEntry 1.文件单元:WinInt VC声明 BOOL DeleteUrlCacheEntry ( LPCTSTR lpszUrlName); 函数功能 删除Cache ...
- leetCode题解之删除单链表中指定的元素
1.问题描述 Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> ...
- JavaScript 删除某个数组中指定的对象和删除对象属性
Javascript: 删除指定对象:使用过程中只适合删除对象,如果数组中添加的是类型Function的话是删除不了的. function removeObjWithArr(_arr,_obj) { ...
- JavaScript 删除某个数组中指定的对象
返回对象在数组中的下标: _arr表示一个Array数组,里面包括了很多的对象如下图: _obj表示某一个数组对象 function getIndex (_arr,_obj) { var le ...
- 删除map容器中指定的元素
for (std::map<Int64,Int64>::iterator iter = ips_forbidden_.begin(); iter != ips_forbidden_.end ...
- 将外部dwg图纸中指定带属性的块插入到当前图纸中
static void InsertBlock() { //获取要插入的块名 TCHAR str[40]; acedGetString(Adesk::kFalse, _T("\n请输入要插入 ...
- CAD二次开发---导入外部文件中的块并输出预览图形(五)
思路: 1)首先要定义一个数据库对象来表示包含块的文件,改数据库对象会被加载到内存中,但不会被显示在CAD窗口中. 2)调用Database类的ReadDwgFile函数将外部文件DWG文件读入到新创 ...
- 获得指定数据库中指定块表中所有实体的id
该函数也使用外部指定图纸中的数据库中的块 Int getIdsByDwgBlkName(AcDbDatabase *pDwg, CString strBlkName, AcDbObjectIdArra ...
随机推荐
- Java小技巧输出26个英文字母
相信有的童鞋写到过与字母有关的小东西,是否有写过全部的字母呢?26个这么多字母,一个个打会疯掉.所有咱们可以用一个小技巧使用for循环帮我们把26个字母自动搞出来,大家来瞅一眼把! 使用Java遍历2 ...
- AMDP + XLSX Workbench 报表开发模式
本文介绍了我和同事通过使用AMDP + XLSX Workbench缩短报表开发周期.分离数据查询处理逻辑和前端展示工作的经验.欢迎讨论. 前言 最近接到了一套人力资源报表的开发需求,需要以EXCEL ...
- 排序算法入门之堆排序(Java实现)
堆排序 在学习了二叉堆(优先队列)以后,我们来看看堆排序.堆排序总的运行时间为O(NlonN). 堆的概念 堆是以数组作为存储结构. 可以看出,它们满足以下规律: 设当前元素在数组中以R[i]表示,那 ...
- dom4j 解析 xml标签属性
重写onEnd()和onStart()方法 public class XmlElementHandler implements ElementHandler { @Override public vo ...
- linux命令TOP参数load average详解[转]
我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟.五分钟.以及十五分钟的系统平均负载……我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别 ...
- python函数与装饰器
一.名字空间与作用域 1.名字空间 名字空间:赋值语句创建了约束,用来存储约束的dict被称为名字空间 赋值语句的行为:1.分别在堆和栈中创建obj与name ...
- Linux 下常用的Shell 命令
英文原文链接:https://www.lopezferrando.com/30-interesting-shell-commands/ 1. 监控命令(每2秒运行一次) watch "ls ...
- python---生成器、迭代器
# -*- coding:utf-8 -*- # LC # 列表生成式 def func(x): print(x) return 2*x print([ func(i) for i in range( ...
- 使用MongoDB存储集合的一些问题
这两天在工作中被Mongo集合存储给整得头大,当然也是我的认知太浅,所以下面我来分享下我所遇到的这个问题希望有大佬能给出更好的解决方案, 1.需求: 存储一个从前端接收未知数据类型的集合 例: 由于是 ...
- VS下使用Google Protobuf完成SOCKET通信
如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信 出处:如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信 最近一 ...