这样插入外部块?请大家帮帮忙看看那里错了
AcDbObjectId blockId ;AcDbDatabase *pDb=new AcDbDatabase(Adesk::kFalse);
pDb->readDwgFile(name);
blockId=pDb->xrefBlockId();
AcDbBlockReference *pBlkRef =new AcDbBlockReference ;
pBlkRef->setBlockTableRecord (blockId) ;
pBlkRef->setScaleFactors(AcGeScale3d(Scale,Scale,Scale));
pBlkRef->setPosition(pt) ;
pBlkRef->setRotation (Rotation) ;
AcDbBlockTable *pBlockTable ;
acdbHostApplicationServices()->workingDatabase()->getBlockTable (pBlockTable, AcDb::kForRead) ;
AcDbBlockTableRecord *pBlockTableRecord ;
pBlockTable->getAt (ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite) ;
pBlockTable->close () ;
pBlockTableRecord->appendAcDbEntity(pBlkRef);
pBlockTableRecord->close();
pBlkRef->close();
运行的时候提示** 未定义的块 #-1
同问
我试着用一个insert()函数来插入块。但是insert()函数老是没执行成功,没返回 Acad::eOk
也是提示找不到块定义
你这样试试:
HDR_API BOOL fdm_InsertDwgFile(const TCHAR *FileName,const AcGePoint3d &insPt,AcDbObjectId &BlkRefId,const double ang,const TCHAR *lay)
{
BOOL state=FALSE;
TCHAR FullPath;
if(ads_findfile(FileName,FullPath)==RTNORM)
{
AcDbDatabase *pDb=new AcDbDatabase(Adesk::kFalse);
if(pDb->readDwgFile(FullPath)==Acad::eOk)
{
if(pDb!=NULL)
{
AcDbObjectId ObjId;
if(acdbCurDwg()->insert(ObjId,_T("*U"),pDb)==Acad::eOk)
{
AcDbObjectId ReferenceId=AcDbObjectId::kNull;
AcDbBlockReference *pReference=new AcDbBlockReference;
pReference->setBlockTableRecord(ObjId);
pReference->setPosition(insPt);
pReference->setRotation(ang);
pReference->setLayer(lay);
if(fdm_addToModelSpace(BlkRefId,pReference)==Acad::eOk)
{
state=TRUE;
}
else delete pReference;
}
delete pDb;
}
}
}
return state;
}
//将实体加入到(模型/图纸)空间
HDR_API Acad::ErrorStatus fdm_addToModelSpace(AcDbObjectId &ObjId,AcDbEntity *pObj,BOOL IsToMs)
{
AcDbBlockTable *pBlockTable;
AcDbBlockTableRecord *pSpaceRecord;
Acad::ErrorStatus es;
es=acdbCurDwg()->getBlockTable(pBlockTable,AcDb::kForRead);
if(es==Acad::eOk)
{
if(IsToMs) es=pBlockTable->getAt(ACDB_MODEL_SPACE, pSpaceRecord,AcDb::kForWrite);
else es=pBlockTable->getAt(ACDB_PAPER_SPACE,pSpaceRecord,AcDb::kForWrite);
if(es==Acad::eOk)
{
es=pSpaceRecord->appendAcDbEntity(ObjId,pObj);
if(es==Acad::eOk) pObj->close();
pSpaceRecord->close();
}
pBlockTable->close();
}
return es;
}
非常感谢!
页:
[1]