本例实现删除外部图纸中指定的块定义,在外部图纸当前模型空间中是没有该块定义的块参照存在。

代码如下:

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中指定的块定义的更多相关文章

  1. mssql sqlserver 禁止删除数据表中指定行数据(转自:http://www.maomao365.com/?p=5323)

    转自:http://www.maomao365.com/?p=5323 摘要:下文主要讲述,如何禁止删除数据表中指定行数据 最近收到用户一个需求,禁止所有人删除”表A”中,ID 为1.2.3.4.5的 ...

  2. 删除IE缓存中指定的文件

    DeleteUrlCacheEntry 1.文件单元:WinInt VC声明 BOOL DeleteUrlCacheEntry ( LPCTSTR lpszUrlName); 函数功能 删除Cache ...

  3. leetCode题解之删除单链表中指定的元素

    1.问题描述 Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> ...

  4. JavaScript 删除某个数组中指定的对象和删除对象属性

    Javascript: 删除指定对象:使用过程中只适合删除对象,如果数组中添加的是类型Function的话是删除不了的. function removeObjWithArr(_arr,_obj) { ...

  5. JavaScript 删除某个数组中指定的对象

    返回对象在数组中的下标: _arr表示一个Array数组,里面包括了很多的对象如下图: _obj表示某一个数组对象     function getIndex (_arr,_obj) { var le ...

  6. 删除map容器中指定的元素

    for (std::map<Int64,Int64>::iterator iter = ips_forbidden_.begin(); iter != ips_forbidden_.end ...

  7. 将外部dwg图纸中指定带属性的块插入到当前图纸中

    static void InsertBlock() { //获取要插入的块名 TCHAR str[40]; acedGetString(Adesk::kFalse, _T("\n请输入要插入 ...

  8. CAD二次开发---导入外部文件中的块并输出预览图形(五)

    思路: 1)首先要定义一个数据库对象来表示包含块的文件,改数据库对象会被加载到内存中,但不会被显示在CAD窗口中. 2)调用Database类的ReadDwgFile函数将外部文件DWG文件读入到新创 ...

  9. 获得指定数据库中指定块表中所有实体的id

    该函数也使用外部指定图纸中的数据库中的块 Int getIdsByDwgBlkName(AcDbDatabase *pDwg, CString strBlkName, AcDbObjectIdArra ...

随机推荐

  1. 服务端搭建——腾讯云通信(IM)

    前言 在手机app中因为需要即时聊天功能,在项目采用腾讯云通信服务.如下流程图: 当手机端拿到签名后,就可登录IM,使用im提供的sdk收发信息. 准备工作 1.在腾讯云注册获取appid 2.申请开 ...

  2. day09_request&response学习笔记

    ============================================================ 一.HttpServletResponse接口 p.MsoNormal { m ...

  3. SSH框架组建时碰到的一些问题

    以前用spring+hibernate的框架解决后台事务,这一次重新组建框架,计划引入Struts,如果方便的话,可能会进一步引入Freemarker.以下记下配置中的一些问题及解决,以供他人参考. ...

  4. SDCC2013大会笔记整理

    2013-8-30 大会首日 百度移动云三大框架:Clouda.SiteApp.Appbuilder MBaaS解决高性能Server很难构建的问题. 百度开放云的区域运营服务于创业者 ------- ...

  5. springAOP之代理

    AOP是指面向切面编程. 在学习AOP之前先来了解一下代理,因为传说中的AOP其实也对代理的一种应用. 首先来看这样一段代码: public interface Hello { void say(St ...

  6. Maven手动添加jar包

    有的jar在Maven中找不到则需要手动添加(如ojdbc14.jar) 方法如下: 一.将你要添加的jar包放到指定目录(在该目录下打开命令窗口) 二.输入指令:mvn install:instal ...

  7. 浅谈C++ STL中的优先队列(priority_queue)

    从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维的一致性导致的. 今天讲一讲优先队列(priority_queue),实际 ...

  8. linux基础命令用法

    目录管理 ls.cd.pwd.mkdir.rmdir.tree ls(list) 列出,列表 用法: ls -l:长格式 文件类型: -:普通文件 (f) d: 目录文件 b: 块设备文件 (bloc ...

  9. Scrapy爬虫框架补充内容三(代理及其基本原理介绍)

    前言:(本文参考维基百科及百度百科所写) 当我们使用爬虫抓取数据时,有时会产生错误比如:突然跳出来了403 Forbidden 或者网页上出现以下提示:您的ip访问频率太高 或者时不时跳出一个验证码需 ...

  10. 【Service Fabric】小白入门记录 本地Service Fabric集群安装及设置

    本篇内容是自学自记,现在我还不知道Service Fabric究竟是怎么个入门法,反正按照入门教程先进行本地Service Fabric集群的安装,万里路始于足下,要学习总得先把环境装好了才能开始学习 ...