LibreDWG - DWG 文件格式的自由实现
LibreDWG 是一个用于读取和写入 DWG 文件的自由 C 库。 该程序是 GNU 项目的一部分,在 GNU 的庇护下发布。 它根据 GNU 通用公共许可证 第 3 版(或您选择的任何后续版本)的条款进行授权。
DWG 是一种在 70 年代为新兴的 CAD 应用而创建的文件格式。 目前它是 AutoCAD 的原生文件格式,AutoCAD 是由 AutoDesk 开发的专有 CAD 程序。
LibreDWG 是从 LibDWG 分叉而来的,因为 LibDWG 使用了世界语,我们认为 对于一个旨在吸引大量贡献者的自由软件项目来说,这不是最佳策略。 LibreDWG 使用英语编写。 目前 我们的解码器(即读取器)已完成,它可以读取所有 DWG 版本,只有一些非常高级的 R2010+ 对象读取失败并被 跳过。 写入器足以处理除 R2007 以外的所有内容。 R2010-R2018 的写入仍然会导致 CRC 错误。 在我们使用 LibreDWG 编写的 示例应用程序中,包括一个读取器、一个写入器、一个 重写器(即另存为)、一个初始的 SVG 和 Postscript 转换、dxf 和 json 转换器、用于搜索文本的 dwggrep,以及用于打印 图层列表的 dwglayer。 还有更多正在开发中。 如果您 想提供帮助,请联系我们。
字符串 API 是 UTF-8(实际上是 WTF8,Windows UCS-2 没有代理 对),并根据 DWG 版本编码为内部 8 位或 UCS-2 字符串。 旧版 DWG 使用约 30 种代码页编码,我们 将其转换为 unicode/UTF-8。
我们还在 doc/ODA-5.4.2-libredwg-diff.pdf 中维护了一份针对内部固定 ODA-5.4.1 规范的差异文档
如需安全联系,请提交工单或发送邮件给软件包维护者:
Reini Urban
现已不活跃的创始人及前任维护者为:
Felipe Corrêa da Silva Sanches Rodrigo Rodrigues da Silva Hardeep Singh Rai <hardeep.rai AT gmail DOT com>
如果您正在寻找有关该项目的通用信息,请访问我们的网站: http://www.gnu.org/software/libredwg/
== 构建和安装库 ==
您需要以下依赖项:
- 基本开发工具(如 gcc/clang 等 C99 编译器、make、autoconf、automake 以及 libtool)
可选:
- libiconv: 可选的代码页转换。没有它只是稍微慢一点。
- libmimalloc: 更快的内存分配,但通常不值得麻烦。
- dwg2ps 的 pslib: http://pslib.sourceforge.net/doc/pslib.html
- 用于 dwggrep 正则表达式支持的 pcre2 8 位和 16 位库。
- 用于更新多个 API 静态哈希的 gperf 仅当添加了对象或显著更改了 dwg.spec 时才需要
- cmake, ninja
- 来自 https://www.opendesign.com/guestfiles/oda_file_converter 的 ODAFileConverter 用于执行交叉检查。
- 来自 xvfb/xorg-x11-server-Xvfb 的 xvfb-run,用于静默 ODAFileConverter 弹窗。
- 用于构建文档的 TeXinfo
- SWIG 1.7+
- Python 2.7 或 3.x 开发头文件 (debian: python-dev; yum: python-devel) 以及 libxml2 的 python 绑定。
- 用于 perl 绑定的 Perl 5
- 用于生成参考手册的 doxygen
- 用于检查 json 有效性的 jq,以及作为 dwgfilter 后端
- 用于检查 shell 脚本的 shellcheck
- 用于检查 spec 有效性的 rpmlint
- 带有部分 svg11 relaxng 的 jinq,用于检查 SVG 有效性。 LaTeXML 曾经有一个损坏的 svg11-basic.rng。如果是这样 来自 http://yupotan.sppd.ne.jp/relax-ng/svg11/ 的 zip 是正确的。 需要安装到 /usr/local/share/relaxng/svg11/ sudo unzip ~/Downloads/svg11-relaxng-20060604.zip -d /usr/local/share/relaxng/ 在 Ubuntu 上我需要: apt install jing libjaxp1.3-java libbatik-java libavalon-framework-java
- 作为 geojson linter 的 mapbox/geojsonhint npm install -g @mapbox/geojsonhint
- geojson-validation 作为第二个 geojson 回退 linter npm install -g geojson-validation
- shfmt 用于格式化 shell 脚本
- clang-format 用于格式化 C 源代码
- clang-tidy 用于检查源代码
- valgrind 用于查找泄漏和内存错误
- timeout 用于帮助处理大型或挂起的 DWG 文件的测试
- GNU parallel 用于加速特殊测试(不是 moreutils parallel!)
- picat 用于查找未知字段,一种更好的 prolog。http://picat-lang.org/
参见 INSTALL 获取通用说明。 基本上,你执行:
$ sh ./autogen.sh (如果你从 git 检出了源代码) $ ./configure [--disable-bindings] [--disable-docs] [--disable-shared] $ make $ make check $ sudo make install
这会构建并安装各种文件到“安装目录”: $libdir ($exec_prefix/lib) -- 库文件 (libredwg.*) $includedir ($prefix/include) -- dwg.h dwg_api.h $libdir/pkgconfig -- libredwg.pc $infodir ($datarootdir/info) -- LibreDWG.info
使用 "./configure --help" 查看可用于自定义安装目录的完整选项列表。 configure 识别的其他选项包括:
--enable-release
推荐给打包者和模糊测试者。禁用所有在官方 tarball 发布中不会启用的功能。例如跳过
不稳定的 DWG 功能或对象,未知的 DWG 版本和对象。
--enable-trace
通过 LIBREDWG_TRACE 启用运行时跟踪(默认:否)。当
启用时,环境变量 LIBREDWG_TRACE 会在第一次解码/编码尝试时被查询。其值为一个整数:0(无
输出)到 9(完全详细)。大多数工具支持
--verbosity|-v 标志作为替代。
--with-dxf-precision=rfc
DXF 双精度浮点数的小数点后位数。6 是推荐 值(例如使用 rfc),最大值和默认值是 16。
--with-geojson-precision=rfc
GeoJSON 双精度浮点数的逗号后小数位数。RFC 7946 推荐值为 6,最大且默认值为 16。
--disable-write
禁用 DWG 写入支持(默认:no)。
写入支持仅适用于 r2004 及更早版本。
重写大多数 <= r2004 的 DWG 文件通常运行正常。
--disable-bindings
禁用 python 和 perl5 的 SWIG 绑定。
--disable-dxf
禁用所有输入和输出模块:DXF, DXFB, JSON, GeoJSON。
--disable-json
禁用 json 输入和输出模块:JSON, GeoJSON。
--disable-python
禁用 python 绑定和测试。
相关:--enable-python=python3.6
用于强制指定特定版本。
--enable-debug
激活对不稳定类的支持。仅用于测试。
--enable-gcov
激活对 GNU gcov 的支持,用于测试覆盖率报告。
--with-perl-install=vendor
安装 perl 绑定的位置:vendor,arch,yes,no,site。 默认为 perl-install=site
== Windows ==
请参阅以下脚本了解我们在 Windows 上的构建方式:
- .github/workflows/main.yml: 通过 msys/autotools 或 cmake。gcc, clang-cl 或 VS2019。
- build-aux/smoke.sh: 交叉编译配方
- build-aux/msys2.bat: msys2 依赖项
- .appveyor.yml: windows 冒烟测试
我们支持通过 cmake 使用 mingw, clang-cl 和 Visual Studio >= 2019。 必须可用 stdint.h 和 inttypes.h。 预编译的 Windows 二进制文件在此处:https://github.com/LibreDWG/libredwg/releases
== 库的使用示例 ==
programs 和 examples 目录包含一些使用我们库的应用代码:
-
dwgread -- 支持多种输出格式的 DWG 读取器,例如 JSON、DXF、DXFB、GeoJSON。
-
dwgwrite -- 支持多种输入格式的 DWG 写入器,例如 DXF、DXFB、JSON。
-
dxfwrite -- 支持多种输入格式的 DXF 写入器,例如 DWG、DXF、DXFB、JSON。
-
dwg2dxf -- 将 DWG 转换为 DXF(ASCII 或二进制,最小或完整),可选地 转换为不同的版本。覆盖率约为 90%。
-
dxf2dwg -- 将 ASCII 或二进制 DXF 转换为 DWG(目前仅支持 r2000)。 覆盖率约为 80%。
-
dwglayers -- 打印 DWG 中的图层列表。可选使用 --extnames
-
dwggrep -- 通过正则表达式在 DWG 文件中搜索文本字符串。
-
dwg2ps -- 打开 DWG 文件并输出 PostScript 文件。 此代码 依赖于 PSlib 库。 在基于 Debian 的系统上,这通常 以名为 pslib-dev 的包形式提供。 目前功能非常有限。
-
dwgfilter -- 通过 JQ 应用 JSON 过滤器。 既可以作为结构化 grep, 也可以用于批量更改某些值。
-
dwg2SVG -- 打开 DWG 文件并输出 SVG(可缩放矢量图形) 文件。 SVG 是 W3C 的 2D 矢量图形标准。 您可以在多个 免费软件工具中打开这些文件。 我们推荐 Inkscape,一款免费软件 矢量图形编辑器。 dwg2SVG 程序不会处理 DWG 中的 3D 内容, 因为 SVG 仅支持二维图像。 仅处理部分 实体。
-
dwgbmp -- 当可用时,提取 dwg 文件的 bmp 缩略图。
-
dwgadd -- 从零创建 DWG(或 DXF、JSON)或向现有 DWG 添加实体的最简单方式。 它接受一个包含创建实体或对象并设置其属性的命令的非常简单的文件。
-
dwgrewrite -- 读取 DWG,以不同的名称写回,并可选地以不同的版本(默认 r2000)写回, 然后重新读取以进行确认。
-
load_dwg -- 这是一个骨架代码,读取 DWG 并添加一个实体。 如果您想快速浏览如何使用该库,请查看此处。
-
dwg2svg2 -- 另一个使用 DWG API 的示例,绕过对 DWG 结构体的直接访问。
-
xmlsuite -- 一个使用 XML 与预定义功能进行比较的广泛示例库位于 test/xmlsuite 目录中。它还包含以 XML 输出实体的代码, 但不使用 python 绑定。
Copyright (C) 2009, 2010, 2015, 2018-2026 Free Software Foundation, Inc.
This library is free software, licensed under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.