yusongrong 发表于 2004-11-19 23:17:00

如何实现在new AcDbDatabase里插入一个外部图块?

AcDbDatabase *pDb = new AcDbDatabase();       
AcDbBlockTable *pBtbl;
pDb->getSymbolTable(pBtbl, AcDb::kForRead);       
AcDbBlockTableRecord *pBtblRcd;
pBtbl->getAt(ACDB_MODEL_SPACE, pBtblRcd,AcDb::kForWrite);
pBtbl->close();       
AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
//acDocManager->lockDocument(acDocManager->curDocument()) ;               
int es=pNewDb->readDwgFile(sFileName , _SH_DENYNO,false);
if (es!=Acad::eOk)
{
        acutPrintf("\nThe file %s cannot be opend",sFileName);
        return;
}                       
pDb->insert(AcGeMatrix3d::kIdentity, pNewDb);
       
pBtblRcd->close();                       
pDb->saveAs(DwgName);
delete pDb;
上面代码无法实现在new AcDbDatabase里插入一个外部图块,请高手指教如何实现?

王咣生 发表于 2004-11-20 13:14:00

参考: AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
int es=pNewDb->readDwgFile(sFileName);
if (es!=Acad::eOk)
{
        acutPrintf("\nThe file %s cannot be opend",sFileName);
        return;
}                       
AcDbObjectId id ;
pDb->insert (id,"myfile", pNewDb , Adesk::kFalse) ;
delete pNewDb ;

yusongrong 发表于 2004-11-21 22:45:00

好象不行啊?
AcDbDatabase *pDb = new AcDbDatabase();       
AcDbBlockTable *pBtbl;
pDb->getSymbolTable(pBtbl, AcDb::kForRead);       
AcDbBlockTableRecord *pBtblRcd;
pBtbl->getAt(ACDB_MODEL_SPACE, pBtblRcd,
                               AcDb::kForWrite);
pBtbl->close();
AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
int es=pNewDb->readDwgFile(sFileName);
if (es!=Acad::eOk)
{
               acutPrintf("\nThe file %s cannot be opend",sFileName);
               return;
}                       
       
AcDbObjectId id ;
pDb->insert (id,"myfile", pNewDb , Adesk::kFalse) ;       
delete pNewDb ;               
pBtblRcd->close();                       
pDb->saveAs(DwgName);
delete pDb;

pengst 发表于 2004-11-22 00:06:00

图块应理解为"对定义的引用",外部的图块必须在当前图中生成块定义后才能在当前中使用,

yusongrong 发表于 2004-11-22 21:04:00

没有啊,下面的代码可以将外部的DWG文件插入当前数据库:
AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
acDocManager->lockDocument(acDocManager->curDocument()) ;
int es=pNewDb->readDwgFile(sFileName , _SH_DENYNO,false);
if (es!=Acad::eOk)
{
        acutPrintf("\nThe file %s cannot be opend",sFileName);
        return;
}                       
AcDbDatabase *pDb;
pDb =acdbHostApplicationServices ()->workingDatabase () ;                       
pDb->insert(AcGeMatrix3d::kIdentity, pNewDb);
return;
页: [1]
查看完整版本: 如何实现在new AcDbDatabase里插入一个外部图块?