大虾帮忙看看程序吧
整个程序主要是为了从dwg文件中得到图块的包罗矩形的两个点.(不知道有没有其他的方法)下面怎么老是得不到 包络矩形的两个点呢?
只会得到**Error on get the extents point...
不知道是那里出问题了?大虾们帮忙看看吧
//插入图形
Acad::ErrorStatus es;
CString filename="E:\\\\dwgfile\\qq.dwg";//已经存在的文件
AcDbDatabase *pNewDb=new AcDbDatabase(Adesk::kFalse);
es=pNewDb->readDwgFile(filename,_SH_DENYNO,false);
if(es!=Acad::eOk)
{
acutPrintf("\nThe file %s cannot be opend",filename);
return;
}
AcDbDatabase *pDb;
pDb=acdbHostApplicationServices()->workingDatabase();
CString pBlockName="testblock";
AcDbObjectId blockID;
if((es=pDb->insert(blockID, pBlockName,pNewDb,true))==Acad::eOk)
{ acutPrintf("\ninsert ok\n");
delete pNewDb;}
else
{ AfxMessageBox("Insert failed");
delete pNewDb;
return; }
AcGePoint3d pt(100.0,200.0,0.0);
AcDbBlockReference *pBlkRef = new AcDbBlockReference;
pBlkRef->setBlockTableRecord(blockID);//指向blockId;
pBlkRef->setPosition(pt);//设定位置
AcDbBlockTable *pBlockTable;
pDb->getBlockTable(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();
///////取得包络矩形的两个顶点
AcDbEntity *pEnt;
acdbOpenAcDbEntity(pEnt,newEntId,AcDb::kForRead);
AcDbExtents exts;
if(pEnt->getGeomExtents(exts)!=Acad::eOk);
{
acutPrintf("\n**Error on get the extents point...");
pEnt->close();
return;
}
acutPrintf("\nThe maxPoint=%0.4f,%0.4f",exts.maxPoint(),exts.maxPoint());
acutPrintf("\nThe minPoint=%0.4f,%0.4f",exts.minPoint(),exts.minPoint());
pEnt->close();
你这种好象要通过事务处理才能实现 哦,可是必须要事务处理吗?
不能把图块读到当前数据库中,再对图块操作吗?
好了,问题解决了。这样就得到了。谢谢easypower 的答复
Acad::ErrorStatus es;
CString filename="E:\\autocad\\dwgfile\\qq.dwg";//已经存在的文件
AcDbDatabase *pNewDb=new AcDbDatabase(Adesk::kFalse);
es=pNewDb->readDwgFile(filename,_SH_DENYNO,false);
if(es!=Acad::eOk)
{
acutPrintf("\nThe file %s cannot be opend",filename);
return;
}
AcDbDatabase *pDb;
pDb=acdbHostApplicationServices()->workingDatabase();
CString pBlockName="testblock";
AcDbObjectId blockID;
if((es=pDb->insert(blockID, pBlockName,pNewDb,true))==Acad::eOk)
{ acutPrintf("\ninsert ok\n");
delete pNewDb;}
else
{ AfxMessageBox("Insert failed");
delete pNewDb;
return; }
//
AcDbExtents exts;
//
AcDbBlockReference *pBlkRef = new AcDbBlockReference;
pBlkRef->setBlockTableRecord(blockID);//指向blockId;
//
pBlkRef->getGeomExtents(exts);
acutPrintf("\nThe maxPoint=%0.4f,%0.4f",exts.maxPoint(),exts.maxPoint());
acutPrintf("\nThe minPoint=%0.4f,%0.4f",exts.minPoint(),exts.minPoint());
//
pBlkRef->close();
不过,如果程序这样写
if(pBlkRef->getGeomExtents(exts)!=Acad::eOk)
{
acutPrintf("\nerror\n");
}
if中的语句会是“假”,得到error,不知道为什么啊?
页:
[1]