乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 47|回复: 3

大虾帮忙看看程序吧

[复制链接]

5

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
27
发表于 2006-10-11 16:49:00 | 显示全部楼层 |阅读模式
整个程序主要是为了从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()[X],exts.maxPoint()[Y]);
  acutPrintf("\nThe minPoint=%0.4f,%0.4f",exts.minPoint()[X],exts.minPoint()[Y]);
  pEnt->close();
回复

使用道具 举报

14

主题

202

帖子

4

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
258
发表于 2006-10-11 18:51:00 | 显示全部楼层
你这种好象要通过事务处理才能实现
回复

使用道具 举报

5

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
27
发表于 2006-10-12 19:02:00 | 显示全部楼层
哦,可是必须要事务处理吗?
不能把图块读到当前数据库中,再对图块操作吗?
回复

使用道具 举报

5

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
27
发表于 2006-10-12 19:48:00 | 显示全部楼层
好了,问题解决了。这样就得到了。谢谢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()[X],exts.maxPoint()[Y]);
  acutPrintf("\nThe minPoint=%0.4f,%0.4f",exts.minPoint()[X],exts.minPoint()[Y]);
//
pBlkRef->close();

不过,如果程序这样写
if(pBlkRef->getGeomExtents(exts)!=Acad::eOk)
{
acutPrintf("\nerror\n");
}
if中的语句会是“假”,得到error,不知道为什么啊?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 22:03 , Processed in 0.314418 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表