- UID
- 255808
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-5-9
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
AcDbDatabase* pDb = new AcDbDatabase(false, true);
pDb->readDwgFile(File);
AcDbBlockTable *pBlockTable;
pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
pBlockTable->close();
AcDbBlockTableRecordIterator *pBlockIterator;
pBlockTableRecord->newIterator(pBlockIterator);
for (; !pBlockIterator->done(); pBlockIterator->step())
{
AcDbEntity *pEntity;
pBlockIterator->getEntity(pEntity, AcDb::kForWrite);
const char *pCname = pEntity->isA()->name();
if(!strcmp(pCname, "AcDbText"))
{
const char *pText = ((AcDbText*)pEntity)->textString();
CString st(pText);
st.Replace(m_SearchStr,m_ReplaceStr);
if (((AcDbText*)pEntity)->setTextString(st) != Acad::eOk)
{
acutPrintf("\nSorry, that draing is probably already open.");
return;
}
}
else if(!strcmp(pCname, "AcDbMText"))
{
const char *pMText = ((AcDbMText*)pEntity)->contents();
CString st(pMText);
st.Replace(m_SearchStr,m_ReplaceStr);
((AcDbMText*)pEntity)->setContents(st);
if(pMText)
pMText = NULL;
}
pEntity->close();
}
delete pBlockIterator;
pBlockTableRecord->close();
pDb->saveAs(File);
delete pDb;
其他代码省略,我在运行后,一般DWG文件能够正常替换,但有个别文件不能够替换,AUTOCAD报出致命错误:“内部错误 dbobji.cpp@5717:eNotOpenForWrite",调试过程中发现问题出在“((AcDbText*)pEntity)->setTextString(st)”,但为何有的文件又能够替成功呢,请大家指教,谢谢!
同样不能替换的文件,操作几次,乃至单独替换都不行
,而其他文件又可以,真不知道什莫原因,拜托大家了!
不能替换的文件如下:举一例: |
|