明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4027|回复: 5

AcDbDatabase从dwg文件读取数据后,获取图像范围错误如何解决?

[复制链接]
发表于 2008-5-15 13:56:00 | 显示全部楼层 |阅读模式

用一个AcDbDatabase从dwg文件中读取数据,然后计算这个dwg图形的包围框。

原来是打开块表之后用AcDbExtents::addBlockExt,但是统计的相当不准确。

后来改成AcDbDatabase::extmax 和AcDbDatabase::extmin就很准确了。

但是有些图形(可能是什么软件自动生成的)用这种方法获取的就是空数据的范围(1.0000E20),但是用AutoCAD打开的话,执行extmin和extmax获取系统常量的数值却又是对的~之前加了AcDbDatabase::updateExt也没有效果。有没有什么办法通过arx更新数据库的extmin和extmax常量?

发表于 2008-5-15 16:42:00 | 显示全部楼层
将源代码粘出来吧
 楼主| 发表于 2008-5-15 17:16:00 | 显示全部楼层
代码简化一下就是下面这样。主要可能也跟数据有关,可能是什么软件生成的dwg,然后没有记录extmax和extmin常量,怎么统计或者更新这个常量?
  1. {
  2. AcGePoint3d ptMin ,ptMax ;
  3. AcDbDatabase* pDb = new AcDbDatabase(Adesk::kFalse);
  4. Acad::ErrorStatus es = pDb->readDwgFile(strDwgFile) ;
  5. if ( es != Acad::eOk) {
  6.   return eReadFileFail;
  7. }
  8. //方法1:这里的ptMin 为 1.00000E20,ptMax为-1.000000E19。
  9. pDb->updateExt(TRUE);
  10. ptMin = pDb->extmin();
  11. ptMax = pDb->extmax();
  12. //方法2:打开块表计算包围框。
  13. AcDbBlockTable *pBlockTable;
  14. pDb->getSymbolTable(pBlockTable, AcDb::kForWrite);
  15. pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
  16. pBlockTable->close();
  17. AcDbExtents extent;
  18. extent.addBlockExt(pBlockTableRecord);
  19. ptMin = extent.minPoint();
  20. ptMax = extent.maxPoint();
  21. }
复制代码
 楼主| 发表于 2008-5-15 17:48:00 | 显示全部楼层

补充一点:就是那个图如果用CAD打开另存之后就能获得正确的extmax和extmin,应该是做了什么处理,找了很多资料也没有解决。

因为数据很多,也不可能每张都用CAD去另存一下,不知道arx能不能处理好~

发表于 2008-5-20 17:46:00 | 显示全部楼层

我测试过你的代码

能够得出正确坐标

acdbCurDwg()->updateExt();   
AcGePoint3d minPt = acdbCurDwg()->extmin() ;
AcGePoint3d maxPt = acdbCurDwg()->extmax() ;
(R14的代码,和你的差不多)

如果注释掉updateExt这个方法,结果和你的一样.所以你先检查一下updateExt执行结果.

另外,方法二取得的坐标值是不对的,原因我没有深究.

PS:你插入的是一个空的DWG文件吗?如果是,换一个试试

 楼主| 发表于 2008-5-21 13:42:00 | 显示全部楼层

多谢楼上。

问题就是我的那些图,不是空图,但是用原始图形无法获取正确边界,如果用CAD打开就可以获取到正确的,另存以后也可以。但是不知道为什么会这样。

用CAD存的图一般不调用updateExt也没有问题。都能获得正确的结果。应该是CAD统计更新了extmax和extmin.不知道它是怎么统计的。

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 15:41 , Processed in 0.168528 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表