在一次项目开发中需要将Java生成的曲线导出图片和CAD,图片已经搞定,网上查了下Java调用AutoCAD绘图的资料和demo很少,于是自己根据官网提供的VBA调用AutoCAD绘图的文档,通过Jacob实现了间接操控AutoCAD绘图。
准备
jacob.jarjacob-1.16-M1-x64.dlljacob-1.16-M1-x86.dll。可自行查找下载,我用的是jacob-1.16版本的,对应Java7,两者要相互匹配,具体可参考Jacob的docs文档。


把jacob-1.16-M1-x64.dll和jacob-1.16-M1-x86.dll拷贝到C:\Windows\System32F:\Java\jdk-7u72\binF:\Java\jdk-7u72\jre\bin,三个目录最好都拷一下。
下来就可以在Java里边调用AutoCAD绘图啦,先展示一下最后的绘图效果,如下:

这里面主要用到了画直线、画圆、设置颜色、线型、保存等指令,代码如下:

public static void main(String[] args) {double[] startPoint = { 100.0, 100.0, 0.0 };double[] midPoint = { 300.0, 100.0, 0.0 };double[] endPoint = { 300.0, 300.0, 0.0 };double[] centerPoint = { 100.0, 100.0, 0.0 };double radius = 200.0;String text = "你好,中国";double[] textPoint = { 100.0, 100.0, 0.0 };double height = 30.0;double[] polyLine = new double[] { 100.0, 100.0, 0.0, 200.0, 200.0, 0.0, 300.0, 300.0, 0.0 };String savePath = "D:\\test\\test1.dwg";String lineTypePath = "D:\\test\\acadiso.lin";JavaForCad javaForCad = new JavaForCad();javaForCad.initCAD();javaForCad.loadLineType(lineTypePath, LineType.DASHED, LineType.CENTER, LineType.DASHDOT, LineType.BORDER);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}javaForCad.drawLine(startPoint, midPoint, Color.BLUE, LineType.DASHED);javaForCad.drawLine(midPoint, endPoint, Color.YELLOW, LineType.DASHDOT);javaForCad.drawCircle(centerPoint, radius, Color.GREEN);javaForCad.drawCircle(midPoint, radius, Color.RED, LineType.CENTER);javaForCad.drawText(text, textPoint, height, Color.ORANGE);javaForCad.drawPolyLine(polyLine, Color.CYAN, LineType.BORDER);javaForCad.saveCAD(savePath);//javaForCad.quitCAD();javaForCad.closeCAD();}在这里插入代码片

下面给出部分指令的实现方法,其余的大家可参考AutoCAD ActiveX and VBA Reference自行研究,如下图,虽然是英文的,不过只要你理解了原理,用起来还是很快的,无非是VBA的指令如何通过Java实现。

CAD初始化:

public void initCAD() {ComThread.InitSTA();// 开启线程m_application = new ActiveXComponent("AutoCAD.Application");// 获取Application对象m_application.setProperty("Visible", new Variant(true));m_documents = m_application.getObject();m_document = Dispatch.call(m_application, "ActiveDocument").toDispatch();m_modelSpace = Dispatch.get(m_document, "ModelSpace").toDispatch();}

CAD画直线,设置颜色、线型

/*** 画直线* * @param startPoint*            起点坐标* @param endPoint*            终点坐标* @param color*            颜色* @param lineType*            线型*/public void drawLine(double[] startPoint, double[] endPoint, Color color, LineType lineType) {Dispatch lineTypeObj;if (m_lineTypesObj != null) {try {lineTypeObj = Dispatch.call(m_lineTypesObj, "Item", lineType.name()).toDispatch();} catch (Exception e) {lineTypeObj = Dispatch.call(m_lineTypesObj, "Item", LineType.BYLAYER.name()).toDispatch();System.out.println("drawLine未加载线型:" + lineType.name());}Dispatch.put(m_document, "ActiveLinetype", lineTypeObj);}if (m_modelSpace != null) {Dispatch lineObj = Dispatch.call(m_modelSpace, "AddLine", startPoint, endPoint).toDispatch();lineTypeObj = Dispatch.call(m_lineTypesObj, "Item", LineType.BYLAYER.name()).toDispatch();Dispatch.put(m_document, "ActiveLinetype", lineTypeObj);Dispatch colorObj = Dispatch.get(lineObj, "TrueColor").toDispatch();float[] rgbColor = new float[3];color.getRGBColorComponents(rgbColor);Dispatch.call(colorObj, "SetRGB", (int) rgbColor[0] * 255, (int) rgbColor[1] * 255, rgbColor[2] * 255);Dispatch.put(lineObj, "TrueColor", colorObj);} else {return;}}

保存CAD:

/*** 保存CAD* * @param filePath*            保存路径*/public void saveCAD(String filePath) {if (m_document != null) {Dispatch.call(m_document, "SaveAs", filePath);} else {return;}}

关闭CAD:

/*** 关闭CAD进程*/public void quitCAD() {if (m_application != null) {Dispatch.call(m_application, "Quit");} else {return;}}

结论:
简单的一个demo,主要是在Java里边实现VBA指令控制AutoCAD绘图,重点是理解其中的各种对象调用关系,前面说的文档多研究一下,包括各个对象的方法和属性,如何使用,最好能和AutoCAD对应起来,熟悉之后你会发现,用代码画CAD的效率也可以如此之高。
不得不佩服Jacob的开发者,架起了Java与Windows应用程序之间的桥梁!
注:
AutoCAD的指令很多,包括图层、布局、块、动画等比较高级的东西,楼主做的项目只用到了一些常用的指令,有兴趣的可以自行研究一下,看看都是如何通过Java来实现的。

通过Jacob调用AutoCAD绘图的Demo示例相关推荐

  1. vb外部调用autocad_Java基于VB通过Jacob调用AutoCAD接口

    Java 以跨平台深受大家喜欢,而由于它跨平台的目的,需要运行在java虚拟机上工作,使得它和本地机器各种内部联系变得很少,约束了它直接掉本地API的功能.本例采用VB代码生成调用AutoCAD接口的 ...

  2. Java基于VB通过Jacob调用AutoCAD接口

    Java 以跨平台深受大家喜欢,而由于它跨平台的目的,需要运行在java虚拟机上工作,使得它和本地机器各种内部联系变得很少,约束了它直接掉本地API的功能.本例采用VB代码生成调用AutoCAD接口的 ...

  3. 实盘api交易接口C#调用DEMO示例

    众所周知,人是有极限的,受情绪影响的.为了占据先机,程序化交易就此诞生,而api接口就是中间的桥梁. api接口是什么,api接口是一个股票程序化交易中必备的东西.就像汽车的轮子,没有它就没有程序化交 ...

  4. php实现调用手机相册,Android实现调用系统相册和拍照的Demo示例

    本文讲述了Android实现调用系统相册和拍照的Demo示例.分享给大家供大家参考,具体如下: 最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有 ...

  5. lisp画靶子 visual_基于VisualLISP的AutoCAD绘图命令的二次开发_沈良翼

    2009 AutoCAD 是由美国 Autodesk 公司于 20 世纪 80 年代初为 微机上应用 CAD 技术而开发的绘图程序软件包, 经过不断的 完善, 现已经成为国际上广为流行的绘图工具 . ...

  6. Levmar:VS2015编译Levmar及Demo示例

    参考 64位 WIN 7/8 下VS2010配置CLAPCAK3.2.1和Levmar2.6 准备 下载CMake:https://cmake.org/ 下载clapack_cmake:http:// ...

  7. 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件

    GitHub源码仓库:Qt学习例程 1. QPainter绘图抗锯齿 /// 抗锯齿测试 /// painter.drawEllipse(QPoint(100,50), 50, 50);// 设置 抗 ...

  8. mock.js 在html中使用demo示例代码

    mock.js 在html中使用demo示例代码 <!DOCTYPE html> <html lang="en"> <head><meta ...

  9. JAVA语言对接报警类语音通知接口demo示例

    本文为您提供了JAVA语言版本的语音通知接口对接DEMO示例 import java.io.IOException;import org.apache.commons.httpclient.HttpC ...

最新文章

  1. 【翻译】使用新的Sencha Cmd 4命令app watch
  2. Liferay Portal Json Web Service 反序列化漏洞(CVE-2020-7961)
  3. python画图-python绘图篇
  4. linux查看用户的操作记录,Linux下查看用户登陆后的操作记录
  5. 2017.9.4 黑白棋 失败总结
  6. ftp ---- 文件结构(配置简单整理)
  7. oracle catalog命令,catalog 命令
  8. [python] 在指定目录下找文件
  9. Java : logback简单配置
  10. gis数据与cad数据转换之间的关系
  11. appium+python环境搭建_想学习自动化测试,已经学习了appium+python环境搭建和python的简单内容,下面该怎么做?...
  12. CentOS6源码安装VSFTPD3
  13. 【python】Python学到什么程度可以面试工作
  14. 什么是VIE:Variable Interest Entities
  15. 网络存储NAS网络存储器术语解释
  16. QQ “安全检查未通过,禁止下载该文件” 解决方法
  17. 如何用Java写出热门大鱼吃小鱼游戏
  18. java记事本统计功能_JAVA 运用流编程实现简单的记事本功能
  19. 计算机网络三:运输层
  20. 硅芯思见:SystemVerilog中的packedarray和unpacked array

热门文章

  1. 四大Hybrid App移动开发平台对比
  2. Android-25种开源炫酷动画框架
  3. 创建bbs mysql语句怎么写_MySQL常用语句 | 小灰灰博客
  4. DRF(django restframework)-数据库查询结果序列化
  5. Eclipse-jee-2022-03下载地址
  6. 基于STC8H的极简易示波器
  7. 互联网快讯:极米优质产品助力大屏观影;中兴手机官宣吴京为全新代言人
  8. springboot+flowable请假详细流程
  9. 西门子PLC和多个HMI通讯
  10. echarts初次渲染不出来