找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 669|回复: 0

[ARX程序]:插入外部图块时的错误,提示实体为空???????????????

[复制链接]
发表于 2005-3-10 12:01:49 | 显示全部楼层 |阅读模式

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

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

×
acDocManager->lockDocument( acDocManager->curDocument(), AcAp::kWrite, NULL, NULL,true) ;
//////////////////////////////////
AcDbObjectId id;
AcDbObjectIdArray list;
AcDbDatabase extDatabase( Adesk::kFalse );
  

if (Acad::eOk != extDatabase.readDwgFile( "C:\\d.dwg"))  //打开图库文件
//  if (Acad::eOk != extDatabase.readDwgFile( dwgName ))

    {
        acedAlert( "Error reading DWG!" );
        return;
    }
    AcDbBlockTable* pBT;
    if (Acad::eOk != extDatabase.getSymbolTable( pBT, AcDb::kForRead ))
    {
        acedAlert( "Error getting BlockTable of DWG" );
        return;
    }
    AcDbBlockTableRecord* pBTR;
    Acad::ErrorStatus es = pBT->getAt( _T("bigblock"), pBTR, AcDb::kForRead );

//"bigblock"是要插入的块名
    pBT->close();
    if (Acad::eOk != es) {
        acedAlert( "Error getting the specific blockDef of DWG" );
        return;
    }

AcDbBlockReferenceIdIterator *pItr;
if (Acad::eOk != pBTR->newBlockReferenceIdIterator(pItr))
{
  acedAlert( "Error iterating" );
        pBTR->close();
        return;
}

for (pItr->start(); !pItr->done(); pItr->step())
{
  AcDbObjectId blkRefId;
  if (Acad::eOk == pItr->getBlockReferenceId(blkRefId))
  {
   list.append(blkRefId);   
   break;
  }  
}
delete pItr;
pBTR->close();   

    if (list.isEmpty()) {
        acedAlert( "No entities found in model space of DWG" );
        return;
    }

    AcDbDatabase *pTempDb;

    if (Acad::eOk != extDatabase.wblock( pTempDb, list, AcGePoint3d::kOrigin ))
    {
        acedAlert( "wblock failed!" );
        return;
    }
    if (Acad::eOk != acdbHostApplicationServices()->workingDatabase()
        ->insert( AcGeMatrix3d::kIdentity, pTempDb ))
        acedAlert( "insert failed!" );

    delete pTempDb;

// 如果不需要插入块参照,将模型空间中的最后一个对象删除即可
ads_name lastEnt;
if (acdbEntLast(lastEnt) != RTNORM)
{
  acedAlert("获得模型空间最后一个实体失败!");
  return;
}
AcDbObjectId entId;
es = acdbGetObjectId(entId, lastEnt);
AcDbEntity *pEnt;
es = acdbOpenAcDbEntity(pEnt, entId, AcDb::kForWrite);
pEnt->erase();
pEnt->close();
//////////////////////////
//用窗口的时候

acDocManager->unlockDocument( acDocManager->curDocument());//





程序运行插入块时提示实体为空"No entities found in model space of DWG" ,应该是这里出错了,list.append(blkRefId);   
   break;这两句没有执行,这是什么原因?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-22 09:48 , Processed in 0.442221 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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