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, 客户端加密, 开源库, 搜索引擎爬虫, 文件格式, 格式转换, 逆向工具