Java中的AutoCAD库读取.dwg文件?
Posted
技术标签:
【中文标题】Java中的AutoCAD库读取.dwg文件?【英文标题】:AutoCAD library in Java to read .dwg files? 【发布时间】:2015-10-30 16:26:04 【问题描述】:是否有任何开源 Java 或 javascript 库可用于解析 .dwg 文件并从中获取对象。
我想从我的项目的文本表中提取数据。
似乎 AutoCAD 开发人员社区更喜欢 .NET 和 C/C++ 而不是 JAVA。
我发现的唯一免费替代方法是先将 .dwg 转换为 .dxf,然后使用 Kabeja 库从中读取。
【问题讨论】:
试试这个sourceforge.net/projects/jdwglib 我认为这个项目已经死了...我联系了作者,但几天后没有回复...此外,.dwg 格式经常演变,库的最后一次提交是少数几年前.. 呃,Java 和 JavaScript 是不一样的。 【参考方案1】:opendesignaliance 的 Teigha 库具有 C++, C#, and Java 接口。 Teigha 是 RealDWG 的替代品,它被许多 CAD 软件供应商广泛使用。它很稳定,可以毫无问题地读取/编辑/写入 dwg。我们有超过 3 年的经验,我可以说它非常好而且便宜很多。当我们要在 RealDWG 和 Teigha 之间进行选择时,我们选择了 Teigha,我很高兴我们做到了。
利用 SWIG 为 Java 创建 Teigha
2013 年,ODA 使用 SWIG 提供的 Java 支持创建了“Teigha for Java”。Teigha for Java 包括以下内容:
Java 访问 .dwg 和 .dgn 文件的完整 Teigha API。 支持 Windows、Linux 和 Mac 平台。 API 与 Teigha.NET 非常相似,简化了语言之间的转换。
【讨论】:
Here 您可以找到所有不同的加入选项。 Here 专门用于教育/研究。他们说它是免费的。您需要提交申请。 @OgnyanDimitrov:很好的答案,我有一个问题:将 autocad 文件导入 java 意味着将 autocad 行转换为 java 中的Point
s,其中每个 Point
有两个坐标 x
和 @ 987654328@ ?所以在java中每条autocad行将是两个Point
s?
Teigha(BricsCAD) 库有自己的类,就像 RealDWG(AutoCAD) 有自己的类一样。 CAD 库中的任何类都不会“转换”为 Java 类。 AutoCAD 中的每个 Point3d、Point2D、Polyline、Line、Arc、Circle、MText 在 Teigha 中都有对应的类 - Point3D、Point2D、Polyline、Line 等。来自 AutoCAD 的代码几乎与 Teigha 的源代码(在 API 级别)兼容,尽管内部实现并不相同。我们将一个大型应用程序从 AutoCAD 迁移到 BricsCAD,并使用相同的代码维护和开发两个版本(AuCad 和 BrixCAD),几乎不费吹灰之力。
“当我们要在 RealDWG 和 Teigha 之间进行选择时,我们选择了 Teigha,我很高兴我们做到了。” ...我选择了 RealDwg,但我不高兴我这样做了,因为那些记分的人。
@CADbloke 能否提供一个指向 RealDWG 的 Java 接口的链接,好吗?我在 RealDWG 中搜索了 Java 接口,但找不到!【参考方案2】:
感谢所有回答的人,我已经测试了你的所有提议,这是我发现的,截至 2015 年:
目前没有免费且可靠的解决方案来读取和操作 .dwg 和 .dxf 文件。这尤其适用于最新版本的 AutoCAD,例如:Autocad 2010、Autocad 2013 等、RF 2013、RF 2010。
可靠(且昂贵)的解决方案是 ODA 的 Teigha(每年 2000 美元)和 Autocad 的 C# 中的 RealDWG(每年 5000 美元)...
更便宜的选择是这样的:
AutoCAD I/O 每月 10 美元(按照 Augusto Gonclaves 的建议),但目前功能有限。 在 AutoCAD 2015/2016 的付费实例中编写 LIPS 例程并使用 SCRIPT 文件运行它们.. 等待更完整的 AutoCad Core Console 实现..Kabeja 和 YCad 等开源库可能能够处理较旧的 AutoCAD 版本,但不要对它们抱太大希望,因为这些项目在几年前就处于非活动状态。不过值得关注 Apache Tika,因为他们开始为 .dwg 文件编写解析器,但开发速度很慢。
就个人而言,我认为 AutoDesk 现在在 CAD 市场上拥有强大而自私的垄断地位,他们让其他人难以加入。 .dwg 文件的格式版本经常变化,我猜是开放的-源代码开发人员将不得不在某个时候放弃并改用官方产品。
让我们期待未来几年有更多的开源解决方案
【讨论】:
Apache Tika 的 DWGParser 目前仅限于读取文件头。他们是否也计划为 DWG 内容创建阅读器?【参考方案3】:Autodesk 主要使用 C++ 开发 AutoCAD,并提供对 C++、.NET、JavaScript、VBA 和 LISP 的插件支持,这就是为什么没有原生 Java 支持的原因。所有这些都需要在机器上安装 AutoCAD。
或者,您可以使用 AutoCAD I/O Web 服务(基本上是云上的运行实例)来运行自定义代码并提取数据或创建新图形。这将支持所有 DWG 功能。检查http://developer.autodesk.com
【讨论】:
是的 AutoCAD 似乎讨厌 Java...我正在尝试为 Nuxeo 文档管理系统开发一个插件来解析和读取 .dwg 文件,但现在 Java 中可用的所有库似乎都不起作用.. . 现在唯一的解决方案是通过 .dxf 转换并使用 Kabeja 获取对象 如果您的机器上安装了 AutoCAD,您可以使用开发人员版本 accoreconsole.exe,它是 AutoCAD 的命令行版本,可以从任何语言(通过命令行)自动化。在安装文件夹中检查此 exe。请注意,您不能在不同的文件夹机器上复制和粘贴,这需要完整安装 AutoCAD。 关于 accoreconsole.exe 的反馈:零指南,零支持,非常有限的使用...我尝试了 DATAEXTRACTION 但控制台只是崩溃了...不支持 ATTOUT...互联网上的指南很少。 .. 看来 AutoCAD 目前并没有对这个新功能提供废话...【参考方案4】:正如你所指出的,改用 DXF 格式,还有开源的 java 库,YCAD,你可以使用并且非常容易使用。
【讨论】:
我尝试过使用 Ycad,编译和导入很混乱....除了它没有读取块中的属性值...作者可能已经放弃了该项目...那里在任何地方都没有使用示例...注意:Kabeja 和 Ycad 不读取属性的值,这暗示它们可以,但我的测试每次都返回空值...我尝试了几个 AutoCad 版本(R10、R13、2010 , 2013) 如果您参考 DXF 规范 pdf,您可以检查属性实体并理解它们并编写一个快速文件解析器,您就可以摆脱您的要求。以上是关于Java中的AutoCAD库读取.dwg文件?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 保存 AutoCAD 文件 (.dwg)