LibreDWG/libredwg
GitHub: LibreDWG/libredwg
一个 GNU 项目的自由 C 库,用于读写和转换 AutoCAD 的 DWG 文件格式,提供跨格式的命令行工具集。
Stars: 1493 | Forks: 338
LibreDWG - DWG 文件格式的自由实现
LibreDWG 是一个用于读写 DWG 文件的自由 C 库。该程序是
GNU 项目的一部分,在 GNU 的主持下发布。它根据
GNU 通用公共许可证第 3 版(或您自行选择的
任何更高版本)的条款获得许可。
DWG 是一种创建于 70 年代的文件格式,用于新兴的 CAD 应用。
目前它是 AutoCAD(由 AutoDesk 开发的专有
CAD 程序)的原生文件格式。
LibreDWG 是 LibDWG 的一个分支,因为后者使用了世界语,而我们
认为对于一个旨在
吸引大量贡献者的自由软件项目来说,这不是最佳策略。LibreDWG 使用英文编写。目前
我们的解码器(即读取器)已经完成,它可以读取所有 DWG
版本,只有一些非常高级的 R2010+ 对象读取失败并
被跳过。对于 R2007 之外的所有版本,写入器都已经足够完善。
写入 R2010-R2018 仍然会导致 CRC 错误。在我们
使用 LibreDWG 编写的示例应用程序中,包含一个读取器、一个写入器、一个
重写器(即 saveas)、一个初步的 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
如果您正在寻找有关该项目的一般信息,请查看我们的网站:
http://www.gnu.org/software/libredwg/
== 构建和安装该库 ==
您需要以下依赖项:
- 基础开发工具(如 gcc/clang 的 C99 编译器、make、autoconf、automake
和 libtool)
可选:
- libiconv:可选的代码页转换。没有它只是会慢一点。
- libmimalloc:更快的内存分配,但通常不值得这么麻烦。
- 用于 dwg2ps 的 pslib:http://pslib.sourceforge.net/doc/pslib.html
- 包含 8 位和 16 位库的 pcre2,用于 dwggrep 正则表达式支持。
- gperf,用于更新多个 API 的静态哈希
仅在您添加了对象或显著更改了 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 的 jing,用于检查 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 后备 linter 的 geojson-validation
npm install -g geojson-validation
- 用于格式化 shell 脚本的 shfmt
- 用于格式化 C 源代码的 clang-format
- 用于检查源代码的 clang-tidy
- 用于查找泄漏和内存 bug 的 valgrind
- 用于帮助测试大型或挂起的 DWG 的 timeout
- 用于加速特殊测试的 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
```
Recommended for packagers and fuzzers. Disables all features
which will not be enabled in official tarball releases. Like skipping
unstable DWG features or objects, unknown DWG versions and objects.
```
--enable-trace
```
Enable runtime tracing via LIBREDWG_TRACE (default: no). When
enabled, the environment variable LIBREDWG_TRACE is consulted on
the first decode/encode attempt. Its value is an integer: 0 (no
output) through 9 (full verbosity). Most tools do support a
--verbosity|-v flag instead.
```
--with-dxf-precision=rfc
DXF 浮点数的小数位数。推荐值为
6(例如使用 rfc),最大值和默认值为 16。
--with-geojson-precision=rfc
GeoJSON 浮点数的小数位数。RFC 7946 的推荐值为
6,最大值和默认值为 16。
--disable-write
```
Disable DWG write support (default: no).
Write support only works for earlier versions until r2004.
Rewriting most DWG's <= r2004 usually works fine.
```
--disable-bindings
```
Disable SWIG bindings for python and perl5.
```
--disable-dxf
```
Disables all in and out modules: DXF, DXFB, JSON, GeoJSON.
```
--disable-json
```
Disables the json in and out modules: JSON, GeoJSON.
```
--disable-python
```
Disable python bindings and tests.
Related: --enable-python=python3.6
to enforce a specific version.
```
--enable-debug
```
Activates support for unstable classes. For testing only.
```
--enable-gcov
```
Activates support for GNU gcov, test coverage reporting.
```
--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 是用于 2D 矢量图形的 W3C 标准。您可以在
几款自由软件工具中打开这些文件。我们推荐 Inkscape,这是一款自由软件
矢量图形编辑器。由于 SVG 仅支持 2 维
图像,dwg2SVG 程序不会处理 DWG 中的
3D 内容。仅处理某些实体。
* dwgbmp -- 在可用时提取 dwg 文件的 bmp 缩略图。
* dwgadd -- 从头创建 DWG(或 DXF、JSON)或
将实体添加到现有 DWG 的最简单方法。它接受一个非常简单的带有命令的文件
来创建实体或对象并设置其属性。
* dwgrewrite -- 读取 DWG,以不同的名称并可选择
在不同的版本(默认为 r2000)下将其写回,并重新读取以进行确认。
* load_dwg -- 这是一个骨架代码,读取 DWG 并添加实体。
如果您想快速了解如何使用该库,请查看此处。
* dwg2svg2 -- 另一个如何使用 DWG API、绕过直接访问
DWG 结构的示例。
* xmlsuite -- 一个使用 XML 与准备好的
特性进行比较的广泛示例库,位于 test/xmlsuite 目录中。它还具有以 XML 格式
输出实体的代码,但不使用 python 绑定。
版权所有 (C) 2009, 2010, 2015, 2018-2026 自由软件基金会。
本库是自由软件,根据自由软件基金会发布的
GNU 通用公共许可证条款进行授权,
许可证的第 3 版,或(您自行选择的)任何更高版本。
您应该已经收到了 GNU 通用公共许可证的副本
以及本程序。如果没有,请参阅 。
标签:Bash脚本, CAD, GNU, 客户端加密, 开源库, 搜索引擎爬虫, 文件格式, 格式转换, 逆向工具