找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 818|回复: 7

[求助]:如何删除当前数据库的实体!?

[复制链接]
发表于 2004-8-22 09:24:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
总是写不对~~~望赐教!!
谢谢
   AcDbDatabase *pDb = NULL;
   AcDbObjectId LayerId;                                        //层ID号
        AcDbLayerTable *pLayerTable;                        //层记录指针
        AcDbLayerTableRecord *pLayerTableRecord;//层表记录指针

        if((pDb = acdbHostApplicationServices()->workingDatabase()) == NULL)        //取得当前数据库指针
        {
                acdbFail("\n错误::当前数据库为空!");
                return ;
        }

        if(pDb->getSymbolTable(pLayerTable, AcDb::kForWrite) != Acad::eOk)        //取得层表
        {
                acdbFail("\n错误::获取层表指针失败.");
                pLayerTable->close();
                return ;
        }
       
    AcDbBlockTable *pBlockTable;
    pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
    AcDbBlockTableRecord *pOtherMsBtr;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pOtherMsBtr, AcDb::kForRead);
    pBlockTable->close();

    // 创建一个迭代器.
    AcDbBlockTableRecordIterator *pIter;
    pOtherMsBtr->newIterator(pIter);
    // 创建一个对象ID队列,用于存储操作的ID对象.
    AcDbObjectIdArray objIdArray;
    //遍历块表记录找出所有直线
    for (pIter->start(); !pIter->done(); pIter->step())
        {
                AcDbEntity *entity;                                               
                entity->erase(Adesk::kTrue);                                               
                entity->close();
    }
    delete pIter;
    pOtherMsBtr->close();
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-8-22 11:22:11 | 显示全部楼层
//遍历块表记录找出所有直线
for (pIter->start(); !pIter->done(); pIter->step())
{
AcDbEntity *entity;
entity = ....? //   必须初始化 entity       [/COLOR]
entity->erase(Adesk::kTrue);
entity->close();
}
delete pIter;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-22 14:51:58 | 显示全部楼层
AcDbBlockTableRecordIterator::getEntity(
    AcDbEntity*& pEntity,
    AcDb::OpenMode openMode,
    bool openErasedEntity = false)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-23 08:59:21 | 显示全部楼层
现在改成这样,总出错阿~~~
出错内容:Unhandled exception in acad.exe(ACDB15.dll) 0XC00000005        ACESS VIOLATION
Acad::ErrorStatus es;
   AcDbBlockTableRecordIterator *pIter;
   AcDbBlockTable *pBlockTable;

  AcDbBlockTableRecord *pBlkTblRcd;
  
      es=acdbCurDwg()->getBlockTable(pBlockTable,AcDb::kForRead);

           if(es!=Acad::eOk)
                return;
       
        es=pBlkTblRcd->newIterator(pIter);
        pBlkTblRcd->close();
        if(es!=Acad::eOk)
                return;

        for (pIter->start();!pIter->done();pIter->step())
        {      
                AcDbEntity *entity;
                es=pIter->getEntity(entity,AcDb::kForWrite,false);
        es=entity->erase(Adesk::kTrue);
                entity->close();
        }
   pBlockTable->close();
        delete pIter;//*/
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-23 20:38:34 | 显示全部楼层
es=acdbCurDwg()->getBlockTable(pBlockTable,AcDb::kForRead);

if(es!=Acad::eOk)
return;

pBlkTblRcd=...?  //必须初始化 pBlkTblRcd !!!  Why made the same Error!
[/COLOR]
es=pBlkTblRcd->newIterator(pIter);
pBlkTblRcd->close();
if(es!=Acad::eOk)
return;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-24 09:30:28 | 显示全部楼层
这段程序错在哪里啊?怎么不好时阿   
Acad::ErrorStatus es;//层ID号
   AcDbBlockTable *pBlockTable;
   AcDbBlockTableRecord *pOtherMsBtr;
   AcDbBlockTableIterator *pIter;
   AcDbObjectIdArray objIdArray;
   AcDbEntity *entity;       

   es=acdbCurDwg()->getBlockTable(pBlockTable,AcDb::kForWrite);
           if(es!=Acad::eOk)
                return;
       
        es=pBlockTable->newIterator(pIter);
        pBlockTable->close();
        if(es!=Acad::eOk)
                return;

        for (pIter->start();!pIter->done();pIter->step())
        {
        es=pIter->getRecord(pOtherMsBtr,AcDb::kForWrite);
                if(es!=Acad::eOk)
                        continue;
                pOtherMsBtr->getBlockReferenceIds(objIdArray);
                continue;

                if(objIdArray.length()<1)
                        continue;
                for(int i=0;i<objIdArray.length();i++)
                {
                        es=acdbOpenAcDbEntity(entity,objIdArray,AcDb::kForWrite);
                        if(es!=Acad::eOk)
                                continue;
                        entity->erase();
                        entity->close();
                }
                pOtherMsBtr->close();
                objIdArray.setLogicalLength(0);
        }
   delete pIter;//*/
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-25 12:40:51 | 显示全部楼层
楼上的,ACDB_MODEL_SPACE是不能删除的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-26 11:19:41 | 显示全部楼层
那怎么用程序删除当前图形数据库的内容
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 23:32 , Processed in 0.345717 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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