从DWG到XAML (I) - 浅谈DWG历史,现状及方向

 

    "多少风云事,都付笑谈中."

-Jeffrey按按按

导读

第二篇: 从DWG到XAML (II) - DWFx格式解析及其和XPS的关系

第三篇 : 从DWG到XAML (III) – .NET中的 XPS Packaging类库及一个DWFx Packaging类库的实现 (源码)第二篇

DWG的时间奇点

     AutoCAD(Auto Computer Aided Design)是美国Autodesk公司首次于1982年生产的自动计算机辅助设计软件,用于二维绘图、详细绘制、设计文档和基本三维设计。现已经成为国际上广为流行的绘图工具。CAD技术不是AutoDesk公司的专利, 同样CAD在计算机上的应用, 也不是AutoDesk公司开的先河. 在AutoCAD出现之前, 已经有了一家叫做VersaCAD的公司制作的同名软件出现在市场上. 由于VersaCAD很强大也很贵, 所以AutoDesk在一开始选择了一条聪明的道路, 免费及开放, 这使得AutoCAD得以迅速传播和升级. 借助于AutoCAD的东风, DWG文件格式成为事实上的二维设计绘图的标准格式, 这是其一. 前期的开放也为后来发生的事情埋下了引线, 这是其二.

      但是历史在小局部偶尔也会开一下倒车. 在AutoCAD发展的过程中, 它逐步的转向了收费, 并且DWG文件成为了一个封闭的标准! 直到今天, 互联网上依然无法得到一份完整的, 关于某个DWG文件格式版本的技术文档. AutoDesk利用AutoCAD的影响力给自己构建了一个帝国, 在赚取大把美钞的同时, 也关闭了DWG格式标准与其他软件系统互通的大门. 我们现在仅仅直到一点点朦胧的东西, 比如: DWG格式的组织形式基于二进制编码; DWG格式具有自关联的压缩技术; DWG文件能够自验证等. 但也是仅仅如此而已, 没有任何细节可言.

Capture       同时, 基于AutoCAD这个庞大平台的二次开发也从未停止过. AutoLisp和ADS成为早期的主力. 后来AutoCAD发布了基于C++语言的二次开发包-ObjectARX. 至此, 基于AutoCAD的二次开发行为第一次被明确定义了(至少笔者是这么认为). 这一开发行为的流程图大概看起来如左: ObjectARX作为类库提供相关功能, 开发人员可以在任何编辑器中编辑二次开发代码; 通过C++编译器编译和链接; 最终生成动态链接库载入到AutoCAD中实现功能扩展. 即使后来出现了ObjectARX面向其他语言比如C#语言的版本, 这一基本方式还是在本质上得到了保留. 互操作成为部分可能, 虽然不是直接实现. 工程人员在AutoCAD软件内打开对应的DWG文件后, 可以通过二次开发的功能扩展, 使DWG格式内容转化为可被其他系统认可的数据.

      "AutoCAD在地上划了一个圈, 逼迫所有人把东西放到这个圈子里."

反抗者的步伐

     中国有句话, 叫"哪里有压迫, 哪里就有反抗." 在AutoCAD的压迫下, 第一个揭竿而起的不是某个谁, 而是一个组织. 这个组织的名字叫做"Open Design Alliance", 简称ODA. ODA是在一个月黑风高的晚上带着武器来的, 这个武器就是著名的OpenDWG文档和DWGDirect开放类库. 前文说到AutoDesk初期的开放策略给自己埋下了隐患,这个隐患现在被ODA利用了. ODA在最初的DWG版本基础上, 通过类似于破解的方式, 获取了DWG格式的大部分技术细节. ODA收取少量的注册费用以维持运营, 并且以开放的姿态发布了DWGDirect - 面向C++语言, DWGDirectX - 面向ActiveX控件, DWGDirect.NET - 面向.NET. ODA承诺, 面对AutoCAD的版本升级, 将以最快的速度更新这些类库. 实际上它做到了: 现在, DWGDirect类库已经声称支持DWG/DXF/BDXF等格式最新的2010版本的读写. ODA的行为从根本上动摇了AutoDesk的根基. 2006 年11月22日 Autodesk 对 Open Design Alliance 提出了诉讼. 下面这一段是AutoDesk公司对于诉讼的官方声明:

      "The ODA software libraries contain technology that falsely identifies customer data files their software creates as Autodesk-created files. We have the right to control the use of our trademark and we depend on that right in informing customers of the source of the files they are introducing in their CAD environments. The ODA interfered with our ability to do that. The ODA failed to respond to our reasonable request to stop violating our rights. As a result Autodesk is suing the ODA in order to defend its ability, through TrustedDWG, to assure our customers of the source of customer data files and make sure the origin of the files is not falsely attributed. The ODA’s latest software libraries mimic TrustedDWG and defeat the very purpose of the program. We are relying on trademark laws to protect our ability to inform customers of the source of customer data files."

      诉讼还在继续, 走向也不得而知, 我们能确定的是, AutoDesk和ODA到现在都活得很好. 不过作为系统开发人员, 我们似乎更应该关注OpenDWG文档和DWGDirect潜在的风险:

  •       OpenDWG文档是以一种近似于破解的方式获取了DWG格式的细节. 这将会给使用DWGDirect的开发人员带来法律上的风险.
  •       OpenDWG文档不是一个对DWG所有版本的完整描述. 它仅仅支持到2004, 并且部分支持2007. 
  •       甚至于在某一特定版本内部, OpenDWG文档至今还未破解部分字节的含义.

Capture2

      笔者不是ODA的粉丝. 恰恰相反, 笔者对于这种破解的行为持怀疑和否定的态度. 但是毫无疑问, OpenDWG文档和DWGDirect类库重新定义了二次开发的流程, 使在AutoCAD平台外使用和修改DWG文件成为现实. 事实上, 国内很多公司在使用OpenDWG. 现在, 由于OpenDWG文档和DWGDirect的流行, 二次开发的流程被重新修订为:

  •       使用AutoCAD制作DWG文件
  •       向外部系统传递DWG文件
  •       外部系统利用DWGDirect读取数据.

      ODA开了掘墓的先河, 后来者自然蜂拥而上. 现在在互联网上, 基于OpenDWG的各种类库琳琅满目, 凡此种种, 却已不足道也.

强者的联姻

      外部世界对于AutoDesk来说有点风雨欲来的味道. 互操作的群众呼声越来越大, OpenDWG越来越让它头疼. 到了二十一世纪第一个十年的末期, 系统软件理论及实践都攀升至一个前所未有的高度, 系统开发人员们越来越清楚地认识到DWG格式的封闭和对于互操作支持的匮乏, 严重影响了一些自动化系统对于DWG工程图的使用.

Capture3      在这样的背景下, 为了应对图形输出,发布,共享和互联的呼声, AutoCAD 2009开始声称支持一种新的文件格式DWFx. DWFx基于标准ISO/IEC 29500-2:2008 Open Packaging Conventions (OPC, Office Open XML文档标准的一部分), 可以看成是一种XPS兼容格式. DWFx格式基于平文组织, 和所有的xps文档一样, 它其实是一个zip包, 里面包含了图形信息, 对象定义等内容.

      现在AutoDesk终于迈出了在开放道路上的第二步, 和另一个软件巨头微软站到了一起. DWG文件可以发布为DWFx格式, 并且使用Office Visio(可以查看XPS文档)直接打开观看; 另外, 在.NET类库中, 可以直接使用DocumentViewer来查看DWFx文档. 虽然依然无法修改DWG文件, 但是毕竟可以在外部系统中直接现实工程图文件了.

尾声

      "青山遮不住,毕竟东流去." 认清形势总是一个比较痛苦的过程, 也来得比较缓慢. 但是我们还是希望, AutoDesk在互联共享的道路上能更进一步. 现状是, ObjectARX如入中天, 是绝对的主流; OpenDWG如火如荼, 却暗藏隐患; DWFx完成了读工程图的大部分功能(有些数据内容在从DWG到DWFx的转换过程中被忽略掉了), 在写的道路上裹足不前(这在很大程度上取决于AutoDesk的意愿).

      DWFx还是有些意思的. 对于一些特定的需求, DWFx更轻型更快捷. 这个系列的下一节, 准备仔细地剖析DWFx文件格式及.NET应用, 最后一节将发布一个笔者写的完全基于C#的, 在部分功能上能操作DWFx内容的DWFx类库.

posted @ 2010-01-16 10:41  Jeffrey Sun  阅读(4520)  评论(7编辑  收藏  举报