可恶的AutoDESK用自己的操作方式和格式一同天下,据统计世界上有70%的图纸是dwg格式的。所以大家都不得不去琢磨这个dwg,如果那个公司说要推出自己的格式抗衡dwg,你就全当他在说梦话吧。毕竟林子很大吗。。:)

    OpenDesign一直在破解dwg格式,做的是最成功的一个了。应该说是唯一的一个。这个组织三番两次的邀请AutoDESK加入他们,结果人家理都不理。

     当然,我们用OpenDWG来解析dwg是最好不过了。OpenDWG早期的版本有ODT和ODV,新的好像是DWG Drict,好多人直接用ODV就可以显示出DWG了。 但是这种需求毕竟不多。 我要查询属性啊? 我要测量距离噢? 我要简单的编辑啊,,我要毕竟复杂的编辑,,别说了。 ODV当然不中..。.所以我要表一下ODT,ODT全名OpenDWG Tool Kit.。它提供的函数可以解析2002以前版本的dwg。

         有的公司自以为买了OPENDWG就万事大吉,其实不然。 ODT可以帮你解析DWG文件,但是解出来的东东放在什么地方啊? 你有MLINE,有POLYLINE,有MTEXT,有HATCH,有XDATA,有DIMSTYLE。。。吗?
德国有个POWERCAD的最新版还没有支持到SPLINE呢?

       DWG中包含了模型空间和图纸空间,不要说你不知道这两个空间。
      然后,记录了几个样式链表,字体样式链表,文字样式链表,尺寸样式链表,VIEW链表,VIEWPORT链表,冻结链表,块链表,剖面线链表,线型链表,MLINE样式链表等;
      下来是一些要保存到图纸中的系统变量,烦如牛毛,
       下来是就是真正模型空间中的实体了。。。

       字体和文字样式不同,以后我们可以专门的讨论这个。
       所谓字体是.shp.shx字体。每个文字样式都可能用到shx字体,也有可能是ttf字体。Text创建和画的时候要检查自己的文字样式,文字样式再找相关的shx字体。

       尺寸样式中有六七十个选项来控制,这些选项在实际对尺寸的影响中有不仅相同,因为尺寸保存了一个块,为了画的时候快一点。恶心吧? 所以一定要一个重建机制来伺候这些家伙。

     view链表是用来记录显示位置的。

     VIEWPORT链表主要是图纸空间中用来调整打印效果的。

     冻结链表呢? 在dwg中,有一些图层是隐藏的,并且这些隐藏的图层很少用到,结果就被人家冻结了。为了提高速度哦,不用去读它。

        块链表里面包含了块的信息,每个块都有自己的entity链表。 有些内部块要注意。比如“*d”开头的是尺寸块。还有模型空间和图纸空间也用块机制来管理。 我发现AutoCAD很喜欢用块来简化一些操作,这一点应该借鉴。

   剖面线和线型链表记录了他们各自的形状定义。 奇怪了吧? 剖面线型和线型的定义竟然保存在文件中。对,这样的好处是我这个dwg文件可以在其它任何acad上打开,我有自己的线型定义,不要你系统的线型。如果对于用户自己定义的线型和剖面线更是省事多多了。。另外,线型和剖面线的形状定义也不会占太多的空间,几行text文本而已啦。

      ....

       如果你有兴趣,又有时间,建议你看看Intellicad的源码。 他们用来ODT,同时他们也仿照dwg建立模型。