- UID
- 5043
- 积分
- 1347
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-5-13
- 最后登录
- 1970-1-1
|
发表于 2017-4-5 23:55:39
|
显示全部楼层
下面代码是把一个外部DWG文件中的所有块定义(AcDbBlockTableRecord)克隆到当前数据库的代码,你可以借鉴下,如果你想拷贝其他的类型的,在判断实体类型的地方修改下就可以了,主要就是要把你要克隆的实体放到objIdArray数组里面。
 - void XdDbUtils::CopyBlockTableRecordFromDwgFile(CString dwgFile,AcDbObjectIdArray &mId)
- {
- Acad::ErrorStatus es;
- AcDbDatabase *db = acdbHostApplicationServices()->workingDatabase();
- //ACHAR dwgFile1[133];
- CString dwgFile1;
- ASSERT(dwgFile.CompareNoCase(_T("")) != 0);
- acDocManager->lockDocument(curDoc(),AcAp::kWrite);
- #if (ADS < 20)
- if (RTNORM == acedFindFile(dwgFile,dwgFile1.GetBuffer(_MAX_PATH))) //(FileExists(dwgFile) == TRUE)
- #else
- if (RTNORM == acedFindFile(dwgFile,dwgFile1.GetBuffer(_MAX_PATH),_MAX_PATH)) //(FileExists(dwgFile) == TRUE)
- #endif
- {
- dwgFile1.ReleaseBuffer();
- AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
- if(Acad::eOk != (es = pDb->readDwgFile(dwgFile1))){
- acutPrintf(_T("Failed to reading dwg.Error:%d\n"),es);
- acDocManager->unlockDocument(curDoc());
- return;
- }
- AcDbBlockTable* pBT;
- es = pDb->getSymbolTable(pBT,AcDb::kForRead);
- if (es != Acad::eOk) {
- acutPrintf(_T("Error getting BlockTable of dwg.Error:%d\n"),es);
- acDocManager->unlockDocument(curDoc());
- return;
- }
- AcDbObjectId objId;
- AcDbObjectIdArray objIdArray;
- AcDbBlockTableIterator *pIT;
- es = pBT->newIterator(pIT);
- if (es != Acad::eOk) {
- acutPrintf(_T("Error iterating block table.Error:%d\n"),es);
- acDocManager->unlockDocument(curDoc());
- return;
- }
- for (; !pIT->done(); pIT->step()) {
- AcDbBlockTableRecord *pBlk;
- es = pIT->getRecord(pBlk,kForRead);
- if (es == Acad::eOk) {
- if (!pBlk->isLayout() && !pBlk->isFromOverlayReference() && !pBlk->isFromExternalReference())
- {
- objIdArray.append(pBlk->objectId());
- }
- pBlk->close();
- }
- }
- delete pIT;
- pBT->close();
- //
- AcDbObjectId destBlkId;
- destBlkId = db->currentSpaceId();
- AcDbIdMapping idMap;
- idMap.setDestDb(db);
- es = db->wblockCloneObjects(objIdArray,destBlkId,idMap,AcDb::kDrcIgnore);
- if (es != Acad::eOk) {
- acutPrintf(_T("Failed wblockCloneObjects.Error:%d\n"),es);
- acDocManager->unlockDocument(curDoc());
- return;
- }
- AcDbIdMappingIter iter(idMap);
- for (iter.start(); !iter.done(); iter.next()) {
- AcDbIdPair pair;
- if (iter.getMap(pair)) {
- AcDbObject *pEnt;
- if (acdbOpenObject(pEnt,pair.value(),kForRead)==eOk)
- {
- if (pEnt->isKindOf(AcDbBlockTableRecord::desc()))
- {
- mId.append(pair.value());
- }
- pEnt->close();
- }
- }
- }
- acDocManager->unlockDocument(curDoc());
- delete pDb;
- }
- acDocManager->unlockDocument(curDoc());
- }
|
评分
-
查看全部评分
|