天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 4|回复: 0

删除图纸中指定的块定义

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    本例实现删除外部图纸中指定的块定义,在外部图纸当前模型空间中是没有该块定义的块参照存在。

    代码如下:

    复制代码
    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();
    复制代码

     

     

     

     

    删除图纸中指定的块定义
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:53 , Processed in 0.057458 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表