如何在浏览器中渲染AutoCAD DWG文件

1,118 阅读4分钟

在开源社区中,已经有不少DXF的渲染器,支持在浏览器中直接显示DXF文件。例如:

但是,到目前为止我在开源社区中还没有找到一个可以在浏览器中直接渲染DWG文件的开源项目。本文将介绍如何实现在浏览器中渲染AutoCAD DWG文件,后续我将会创建相应的开源项目供大家使用。

目前状况

当前市面上有一些闭源的可以在浏览器中渲染AutoCAD DWG解决方案,这些解决方案都是要上传DWG到后端。这种方案有如下的一些缺点:

  • 增加了第一次显示DWG文件的耗时:这些方案需要首先上传文件到后端,造成了第一次显示DWG文件耗时会比较久;
  • 增加了系统部署和集成的复杂度:做系统部署和集成的时候还是有点麻烦,需要依赖于一个后端;
  • 数据安全问题:对于企业来说,设计文件数据企业的核心数据。在国内的大环境下,放到第三方平台上很难保证数据安全,除非你做私有化部署。

其实,之所以造成这种情况个人认为有两个原因:

  • 商业的原因:从解决方案供应商的角度来看,有后端依赖可以增加客户对它们的依赖度。而且,数据传递到解决方案供应商的后端,对于它们来说这些数据是一笔宝贵的财富。
  • 技术的原因:从技术的角度来看,确实没有一个可以在浏览器端直接解析DWG的解决方案。

解决方案

最近,开源社区里面发布了一个项目libredwg-web。它是基于Web Assembly技术的DWG/DXF解析器,可以让我们彻底摆脱对后端的依赖,直接在浏览器中解析和显示DWG文件了。这个项目基于开源项目libredwg,该项目的核心目标是替换闭源的ODA,几乎支持所有版本AutoCAD DWG/DXF文件的读写。

目前,libredwg-web只暴露了DWG文件的读取接口,并没有暴露DWG的修改接口。估计不久的将来,该项目也会支持修改DWG文件。因为它所以来的底层技术libredwg是支持修改DWG文件的。

有了libredwg-web后,在浏览器中渲染DWG文件就不再是一个难题了。大致的技术方案如下:

直接构建一个DWG文件的渲染器

libredwg-web支持将DWG文件转化为类似于项目dxf-parser所定义的数据模型,那么可以基于dxf-viewerthree-dxf等这些开源的DXF文件渲染器做一些修改,就可以支持在浏览器中渲染DWG文件了。

将DWG转化为DXF文件进行渲染

libredwg-web本质是支持将DWG文件转为DXF文件的,不过你需要重新构建libredwg-web。因为,为了减小Web Assembly的大小,该功能默认是没有包含在构建结果中的。

将DWG转化为SVG文件进行渲染

libredwg-web直接支持将DWG文件转为SVG文件的,所以对于一些简单的场景可以使用这个解决方案。而且,libredwg-web已经提供了一个转化DWG文件为SVG文件的示例程序,大家可以基于改示例程序自行构建你的应用程序。

不过,这种方式有如下的一些缺点:

  • 对非常大的DWG文件显示性能不佳:这个主要是由于浏览器对大的SVG文件的显示性能不佳造成的;
  • 信息转化丢失:DWG转化为DXF文件的时候基本上可以保证信息100%的被转化过去,但是DWG转化为SVG文件的时候会丢失部分信息,例如线型、填充模式、文字排版等都很难转化正确。

所以,可以根据你的实际情况来决定用哪种方案。当然最优的方案肯定是第一种方案,我后续会基于第一种方案构建一个开源的项目供大家使用。