- UID
- 22042
- 积分
- 180
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-12-26
- 最后登录
- 1970-1-1
|
发表于 2004-3-31 20:36:01
|
显示全部楼层
Re: [求助]:插入图形,为什么慢
最初由 stoneball 发布
[B]我用下面的代码插入图形到当前稳当,当DWG在3M后,慢的我无法忍受,而使用ACAD的INSERT耗时跃15秒,而我的INSERT需要5分钟,甚至最后CPU耗尽而死机???
AcDbDatabase* pCurDb;
AcDbDatabase* pDb = new AcDbData... [/B]
是方法不对!
[PHP]
int XRecordApplication::InsertBlock(CString fileName,CString XReName)////////插图(Insert)
{
CString pBlockName=XReName;
//在这里一定要用Adesk::kFalse
AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
if (Acad::eOk!=pNewDb->readDwgFile(fileName , _SH_DENYNO,false))
{
acutPrintf("\nThe file %s cannot be opend",fileName);
return 0;
}
//这样,source.dwg以经用pNewDb来表示了. 我们用pDb来表示当前数据库
AcDbDatabase *pDb;
pDb =acdbHostApplicationServices()->workingDatabase();
AcDbObjectId blockId;
if(Acad::eOk!=pDb->insert(blockId, pBlockName,pNewDb, true))
{
AfxMessageBox(fileName+" Insert failed");
delete pNewDb;pNewDb=NULL;
return 0;
}
AcDbBlockReference *pBlkRef = new AcDbBlockReference;
pBlkRef->setBlockTableRecord(blockId);//指向blockId;
AcDbBlockTable *pBlockTable;
pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId newEntId;
pBlockTableRecord->appendAcDbEntity(newEntId, pBlkRef);
pBlockTableRecord->close();
pBlkRef->close();
delete pNewDb;pNewDb=NULL;//删除插入图的指针,不然关闭CAD后会出错
}
[/PHP] |
|