Java中的AutoCAD库以读取.dwg文件?

3

是否有可用于解析.dwg文件并获取其中对象的开源Java或JavaScript库。

我想从文本表格中提取数据用于我的项目。

似乎AutoCAD开发者社区更喜欢.NET和C/C++而不是JAVA。

我找到的唯一免费替代方案是先将.dwg转换为.dxf,然后使用Kabeja库从中读取。


尝试使用此链接:http://sourceforge.net/projects/jdwglib/ - unique_ptr
我认为这个项目已经死了...我联系了作者,但几天后仍没有回复...此外,.dwg格式经常发生变化,而该库的最后一次提交是几年前。 - user3336544
你可以检出项目并进行轻微修改,或者像我们这样采用另一种方式,文件处理是本地的(C/C++),并使用JNI与Java进行交互。 - unique_ptr
嗯,Java和JavaScript是不同的东西。 - Thomas S.
4个回答

9
来自opendesignaliance的Teigha库拥有C++、C#和Java接口。 Teigha是RealDWG的替代品,被许多CAD软件供应商广泛使用。它稳定且具有读取/编辑/编写dwg文件的功能。我们已经有超过3年的使用经验,我可以说它非常出色且价格更便宜。当我们在RealDWG和Teigha之间选择时,我们选择了Teigha,并且我很高兴我们这样做。
利用SWIG创建Teigha for Java 2013年,ODA利用SWIG提供的Java支持创建了“Teigha for Java”。Teigha for Java包括以下内容: Java访问完整的Teigha API,支持.dwg和.dgn文件。 支持Windows、Linux和Mac平台。 API与Teigha.NET非常相似,简化了语言之间的过渡。

1
在这里,您可以找到所有不同的加入选项。这里是专门为教育/研究而设的。他们说这是免费的,但您需要提交申请。 - Ognyan Dimitrov
1
@OgnyanDimitrov:好答案,我有一个问题:将AutoCAD文件导入Java意味着将AutoCAD线转换为Java中的“Point”,其中每个“Point”具有两个坐标“x”和“y”?因此,每条AutoCAD线在Java中将成为两个“Point”? - Jad Chahine
1
Teigha(BricsCAD)库有自己的类,就像RealDWG(AutoCAD)有它自己的类一样。CAD库中的任何类都不会“翻译”成Java类。AutoCAD中的每个Point3d,Point2D,Polyline,Line,Arc,Circle,MText都有相应的类-Point3D,Point2D,Polyline,Line等在Teigha中。尽管内部实现不同,但来自AutoCAD的代码几乎在API级别上与Teigha兼容。我们将一个大型应用程序从AutoCAD迁移到BricsCAD,并使用相同的代码维护和开发两个版本(AuCad和BrixCAD),其中工作量非常小。 - Ognyan Dimitrov
当我们需要在RealDWG和Teigha之间进行选择时,我们选择了Teigha,我很高兴我们做出了这个决定。对于那些在关注的人来说,我选择了RealDwg,但我并不为此感到高兴。 - CAD bloke
@CADBloke 这真的是指向 RealDWG Java 接口的链接吗?当我打开它时,它指向了 Teigha 的 Java 接口。 - Ognyan Dimitrov
显示剩余2条评论

8
感谢所有回答的人,我已经测试了你们提供的所有方法,截至2015年得出以下结论:
目前没有可靠且免费的解决方案来读取和操作.dwg和.dxf文件。这尤其适用于AutoCAD的最新版本,例如:Autocad 2010、Autocad 2013等,RF 2013、RF 2010。
可靠的(且昂贵的)解决方案是Teigha by ODA(每年2000美元)和由Autocad开发的C#中的RealDWG(每年5000美元)…..
更便宜的替代方案如下:
- AutoCAD I/O,每月10美元(由Augusto Gonclaves建议),但现在功能受限。 - 编写LISPS例程并在付费的AutoCAD 2015/2016实例中使用SCRIPT文件运行它们。 - 等待更完整的AutoCad Core Console实现。
开源库(如Kabeja和YCad)可能能够处理较旧版本的AutoCAD,但不要对它们有过高期望,因为这些项目几年前就已经停止更新了。值得关注的是Apache Tika,因为他们开始编写.dwg文件解析器,但是开发进展缓慢。
个人认为,AutoDesk现在在CAD市场上拥有强大而自私的垄断地位,并且他们正在使其他人难以加入。.dwg文件格式的版本变化如此之快,我想开源开发人员迟早将不得不放弃并使用官方产品。
让我们希望未来几年会有更多的开源解决方案。

Apache Tika的DWGParser目前仅限于读取文件头。他们是否计划创建一个DWG内容的阅读器? - a different ben

2
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获取对象。 - user3336544
如果您在计算机上安装了AutoCAD,则可以使用开发人员版本的accoreconsole.exe,这是AutoCAD的命令行版本,可以从任何语言(通过命令行)进行自动化。请在安装文件夹中查找此exe。请注意,您无法将其复制并粘贴到不同的文件夹计算机上,这需要完全安装AutoCAD。 - Augusto Goncalves
关于 accoreconsole.exe 的反馈:零指南,零支持,非常有限的用途...我尝试了 DATAEXTRACTION,但控制台总是崩溃...ATTOUT 不受支持...互联网上很少有指南...看起来 AutoCAD 目前对这个新功能不太在意... - user3336544

2

正如你所指出的,应该使用DXF格式。有一个开源的Java库,YCAD,可以使用,并且非常易于使用。


我已经尝试使用Ycad,但编译和导入都很困惑...而且它不读块中属性的值...作者可能已经放弃了这个项目...没有任何使用示例...注意:Kabeja和Ycad都不读取属性的值,虽然它们可以,但我的测试每次都返回空值...我已经尝试过几个AutoCad版本(R10、R13、2010、2013)。 - user3336544
如果您参考DXF规范pdf,您可以查看有关属性实体并理解它们,编写一个快速的文件解析器,从而满足您的要求。 - Yoku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接