开放源代码的CAD

  • http://www.verydemo.com/demo_c278_i920.html看到的文章感觉有用。但是原作者的博客已经无法访问,因此发出来
  • http://blog.csdn.net/robinjwong/article/details/4803481
  • 但是他的博客能访问,但是最近的文章是Java的!
  • OpenCASCAD

网址是:http://www.opencascade.org/

开放源码可以下载,商业版本比开放源码版本要新,最新可下载版本为6.0。架构很完整,包括几何核心,实体建模核心,文件数据处理,显示渲染,等 等。代码比价多,编译复杂,需要下大力气研究,适合在校学生研究,要是老师研究明白,用来讲CAD软件或者大型软件开发是个很好的例子。

有一些基于这个库开发自己的CAD的项目:AnyCAD,国人开发的,网站下不到了,有博客可以看:http://www.cppblog.com/mythma/ 。还有一个基于Python来做的封装的:pythonOCC,http://www.pythonocc.org/ 。

  • Wild-cat

网址是:http://code.google.com/p/wildcat-cad/ , 作者blog是:http://wildcat-cad.blogspot.com/

这是个使用GPU技术做显示的CAD。主要集中在几何部分,支持Trimmed-surface,还有几何求交的部分。注意,有些时候这个网站由于众所周知的原因上不去。

  • BRL-CAD

网址是:http://brlcad.org/

这个软件有意思,是美国军方开放出来的,开始是一个打赌之后的作品。开始设计的目标是显示坦克的设计!使用了CSG实体建模技术,比较完整的软件,可以参考。文档比较全,还有很多人关注。

  • QCAD

网址是:http://www.qcad.org

QCAD社区版本是基于GPL开放源代码的。这个软件使用了QT作为GUI,所以是跨平台的软件。支持Wndows,MacOS,Linux。软件模块比较全,可以作为开发的参考。

  • Intellicad

严格来说这个现在不是开放源代码的。是个社区软件,只有会员能拿到源代码。国内很多公司都是会员,例如中望,浩辰。我看到的是网上找到的2000年的时候的版本,看起来bug太多,代码也比较旧。但是可以作为参考。

这些都是比较完整的基于C/C++的开放源代码的CAD。当然也有其他语言的开放源码CAD,但作为实际生产用的CAD软件,我们暂时不考虑其他语言开发的。当然,将来的网络CAD是什么样子,我的小脑袋还看不到,呵呵。

Java可以通过调用CAD文件的开放式API接口,将CAD图纸导入到Java项目中进行展示、分析和编辑。这需要使用支持CAD文件的第三方Java库,如AutoCAD Java API、dwgPlotX Java Edition和CADSoftTools Java API等。 有关AutoCAD Java API的示例代码如下: ```java import com.autodesk.autocad.application.IAcadApplication; import com.autodesk.autocad.databaseServices.BlockTable; import com.autodesk.autocad.databaseServices.Database; import com.autodesk.autocad.databaseServices.DBObject; import com.autodesk.autocad.databaseServices.DBObjectIterator; import com.autodesk.autocad.databaseServices.DwgFileHandle; import com.autodesk.autocad.databaseServices.Entity; import com.autodesk.autocad.databaseServices.LayerTable; import com.autodesk.autocad.databaseServices.Layout; import com.autodesk.autocad.databaseServices.ModelSpace; import com.autodesk.autocad.databaseServices.ObjectId; import com.autodesk.autocad.databaseServices.Polyline; import com.autodesk.autocad.databaseServices.Polyline2d; import com.autodesk.autocad.databaseServices.Polyline3d; import com.autodesk.autocad.databaseServices.Viewport; import com.autodesk.autocad.geometry.Point2d; import com.autodesk.autocad.geometry.Point3d; import com.autodesk.autocad.runtime.ErrorStatus; import com.autodesk.autocad.runtime.ExtensionDictionary; import com.autodesk.autocad.runtime.Interop; import com.autodesk.autocad.runtime.ResultBuffer; import com.autodesk.autocad.runtime.Variant; public class AutoCADDrawing { public static void main(String[] args) { IAcadApplication app = null; try { app = Interop.getAcadApplication(); if (app != null) { Database db = app.getDocumentManager().getActiveDatabase(); BlockTable bt = db.getBlockTableId().open(BlockTable.class, false); Entity ent = null; Polyline plc = null; Polyline2d p2d = null; Polyline3d p3d = null; LayerTable lt = db.getLayerTableId().open(LayerTable.class, false); Layout lo = db.getLayout("Model"); ObjectId objId = lo.getObjectId(); ModelSpace ms = objId.open(ModelSpace.class, false); Viewport vp = null; DBObjectIterator vit = null; DBObject obj = null; ExtensionDictionary ed = null; ResultBuffer rb = null; Variant vDrawingScale = null; String sLayerName = null; int iColor = -1; short iLineWeight = -1; Point3d pt1 = null, pt2 = null; Point2d p2dfst = null, p2dscd = null; System.out.println("Blocks in drawing:"); for (ObjectId id : bt) { System.out.println(id.getHandle()); } System.out.println("Layers in drawing:"); for (ObjectId id : lt) { System.out.println(id.getHandle()); } System.out.println("Entities in ModelSpace:"); vit = ms.newObjectIterator(); while (vit.hasNext()) { obj = vit.next(); if (obj instanceof Polyline) { plc = (Polyline) obj; System.out.println("Polyline found on Layer: " + plc.getLayer()); System.out.println("Polyline vertices:"); for (int i = 0; i < plc.getNumberOfVertices(); i++) { pt2 = plc.getPointAt(i); System.out.println("Vertex " + i + ": (" + pt2.getX() + "," + pt2.getY() + ")"); } } else if (obj instanceof Polyline2d) { p2d = (Polyline2d) obj; System.out.println("Polyline2d found on Layer: " + p2d.getLayer()); System.out.println("Polyline2d vertices:"); for (int i = 0; i < p2d.getNumberOfVertices(); i++) { p2dfst = p2d.getVertexAt(i); System.out.println("Vertex " + i + ": (" + p2dfst.getX() + "," + p2dfst.getY() + ")"); } } else if (obj instanceof Polyline3d) { p3d = (Polyline3d) obj; System.out.println("Polyline3d found on Layer: " + p3d.getLayer()); System.out.println("Polyline3d vertices:"); for (int i = 0; i < p3d.getNumberOfVertices(); i++) { pt2 = p3d.getPointAt(i); System.out.println("Vertex " + i + ": (" + pt2.getX() + "," + pt2.getY() + "," + pt2.getZ() + ")"); } } else if (obj instanceof Viewport) { vp = (Viewport) obj; System.out.println("Viewport found on Layer: " + vp.getLayer()); System.out.println("Viewport position and size: " + vp.getLowerLeftCorner().toString() + ", " + vp.getUpperRightCorner().toString()); } else { System.out.println(obj.getHandle() + ": " + obj.getClass().getName()); } } } } catch (UnsatisfiedLinkError e) { System.out.println("AutoCAD isn't running"); } catch (ErrorStatus e) { System.out.println(e.name()); } finally { if (app != null) { DwgFileHandle dwg = app.getActiveDocument().getDwgFileHandle(); System.out.println("Drawing name is " + dwg.getFileName()); } } } } ``` 该示例代码利用AutoCAD Java API遍历了当前AutoCAD文档中的块、图层、布局、视口和实体,并获取了它们的属性和坐标信息,可以为Java开发人员提供了一种方便快捷的方式来解析和操作CAD图纸。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值